漏洞概要
关注数(24)
关注此漏洞
漏洞标题:phpyun 第三方接口引发的注入漏洞
提交时间:2015-10-30 10:55
修复时间:2015-12-17 14:48
公开时间:2015-12-17 14:48
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2015-10-30: 细节已通知厂商并且等待厂商处理中
2015-10-30: 厂商已经确认,细节仅向厂商公开
2015-11-02: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航)
2015-12-24: 细节向核心白帽子及相关领域专家公开
2016-01-03: 细节向普通白帽子公开
2016-01-13: 细节向实习白帽子公开
2015-12-17: 细节向公众公开
简要描述:
此注入漏洞可以获取理员的账户密码,危害比较大。
详细说明:
## 漏洞触发条件
早于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**。
在实际的攻击过程中,可以直接向对方公众号发送如下内容,进行注入。
修复方案:
在
语句前加入
。
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:10
确认时间:2015-10-30 11:02
厂商回复:
感谢提供,我们会尽快修复!
最新状态:
暂无