## 漏洞触发条件
早于14年6月2日的版本可以直接利用此漏洞。最新版本需要开启微信公众号功能才可利用。
## 漏洞影响范围
phpyun v4.0 build151012,以及之前版本。
## 漏洞代码分析
首先简单说一下微信公众号的原理。
当网站绑定了微信公众号时,我们提交的内容先传到微信服务器。然后经过微信生成xml格式的数据,附加上效验码传到网站。网站根据发送的内容进行判断整理,将生成好的数据返回给微信服务器。微信服务器接收到数据后进行解析,最终再反馈给用户。
此次的问题在于,phpyun对于微信提交过来的数据没有转义,保持了信任。最终导致注入的发生。
关键代码位于`app\controller\weixin\index.class.php`,23行
当效验完signature之后,进入`$GLOBALS["HTTP_RAW_POST_DATA"]`。我们来看一下php手册的解释。
我们在此可以理解为**php不会对提交的数据产生任何的转义**。
当我们在微信公众号的输入框里键入关键字时。会经过程序处理到达113行。
我们提交的内容会被程序当作keyword传入searchJob。我们再来看看 searchJob。文件位于`app\model\weixin.model.php`,141行
当做了几次SQL拼接以后,最终进入`DB_select_all`。
补充一下:印象中早于14年6月2日的版本,并未检查系统内部weixin token是否为空。所以signature伪造为sha1('')即可通过signature。
本地环境下可以类似的构造,注意替换**signature**。
![[2015-10] phpyun 微信接口引发的注入漏洞 实验数据.JPG](http://wimg.zone.ci/upload/201510/30101027d634119d142410a7324928a96f6cd84e.jpg)
在实际的攻击过程中,可以直接向对方公众号发送如下内容,进行注入。
![[2015-10] phpyun 微信接口引发的注入漏洞 IMG_2902.PNG](http://wimg.zone.ci/upload/201510/30101114bb26ce47f7e03d6b7912fa70a8c33cf1.png)