刚刚研究了下二哥的XML实体注入:
WooYun: 百度某功能XML实体注入
感觉好高大上哦,从来没遇到过,这几天看PHPYUN,突然想到了这个问题。
文件weixin/model/index.class.php
这里将$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];通过simplexml_load_string解析后的内容,直接带入了$topTpl:
然而$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];就是直接获取的POST过来的XML内容,没有经过任何处理,最后将其echo出来了。
真个过程就是传一个XML的内容进去,然后输出一个XML的内容,那么我们结果XML实体注入不就可以读取服务器上的内容,然后再输出出来么?!
实际证明是可行的,见漏洞证明!
当然这里有一个问题就是:
在入口会检测一个字符串:
如果用户设置了wx_token就没办法了,但是这个wx_token默认是空的。
所以在默认条件下,没有wx_token时,这个$tmpStr == $signature==da39a3ee5e6b4b0d3255bfef95601890afd80709,这是一个固定的值了,我们是完全可以利用上面的漏洞读入任意文件。
读取/phpyun/robots.txt内容
发送请求:
这里要注意:
signature=da39a3ee5e6b4b0d3255bfef95601890afd80709
Content-Type: text/xml
如图: