那时候没来得及打比赛,这段时间复现一波。
1.打开题目是一个计算器,首先随便输入几个测试一下,当输入的内容有字母的时候,会弹框 ”这啥算不来“ F12,查看一下网页源代码,有一个calc,我们去访问一下calc.php 过滤了一些东西,但是为什么输入字母就会出现“算不来”这个弹框呢,推测有waf,这个时候陷入了思考,该如何绕过呢?
2.网上搜索到了这篇文章 https://www.secjuice.com/abusing-php-query-string-parser-bypass-ids-ips-waf/
3.这边绕过的主要原理就是:
calc.php?%20num=1当这样输入的时候,php会将%20num解析为num。 下面我们测试一下
1.php内容如下 <?php echo $_GET[a]; ?> 访问 http://127.0.0.1/1.php?a=1 返回1 访问 http://127.0.0.1/1.php?%20a=1 返回1
4.payload: calc.php?%20num=var_dump(scandir(chr(47))) calc.php?%20num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))) getflag
打开页面如下 刚开始还在那边捣鼓了半天,F12,查看源码发现。。。。。。 这边有 current IP,随手改了一下X-Forwarded-For,发现再一次访问的时候 感觉这里有点东西,这边显示了last ip,我猜测他把上一次输入的放进了数据库里面。 再次尝试一下其他的输入: 当我们再次访问index.php的时候,就会延迟5s,说明这里是可以注入的,然后直接写脚本就行了。
这里我就不把自己的脚本拿出来丢人了 QWQ,可以参考一下这边的脚本, https://github.com/berTrAM888/RoarCTF-Writeup-some-Source-Code/blob/master/Web/online_proxy/writeup/Exp.py