[RoarCTF 2019]Easy Calc

去年的 roarCTF 比赛 

质量很高 

进去一看 

 以为和 渗透不沾边  是那种跑反应的 

check sourch 

find something interestring

 

 发现源码 

代码审计  

其实就是命令 执行加了waf 

一开始 我以为直接就是 蚁剑连接  但是这里有个echo  想要注释掉 但是没有办法  后来 查了 资料 才了解 php特性 用; 可以分开执行语句 

构造                     1;phpinfo();

 可结果 。。

因为不清楚 一些php特性 做不下去了

大佬的理解 

  主要是 字符串解析 漏洞      后台waf 可能对 查询的字符串 做了判断 如果查到了 num 就 返回禁止访问

 如果有下划线 可用  [ 代替 

php 解析时 会把空格和%00去掉 但是waf会先进行检测  检测不到num  其实就已经绕过了waf

知道了 这个知识点 才能继续不然 一切白干

但是 查看了phpinfo后 

 过滤了 很多函数  主要是 系统函数 这样 我们就很难getshell    而且还过滤了很多冷门函数  但是放出了 打印函数 var_dump  相当于 C的printf

翻出了 目录搜索函数 scandir

查看了 源码  是过滤了 / 

但是我们如果要查根目录  需要用               var_dump(scandir(/))    打印 找到的目录 

 发现 页面返回错误

因为把 / 过滤了 

而且 必须 var_dump 

直接scandir 不行

 必须实用 var_dump(scandir(chr(47)))  

 找到 f1agg

打开 f1agg即可

https://www.runoob.com/php/func-string-chr.html   chr函数用法

 之后就是想办法 打开 了 

不能直接 var_dump  因为  这个 f1agg不是代码 

还需要用到  file_get_contents 

该函数可以将文件内容转换为代码流   实用 var_dump 可以打印出来 

构造payload  ? num=1;var_dump(file_get_contents(/f1agg))

将 /f1agg转换成 chr函数表示 

将每个字符 用 . 拼接           而不是像C或Py 一样用+

PHP特性!!。。  没怎么学 

构造好 ? num%00=1;var_dump(file_get_contents(/f1agg)) 

 致死点 :  php 字符串解析漏洞  命令执行漏洞 结合 

原文地址:https://www.cnblogs.com/Sabia/p/14110587.html