漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0137693
漏洞标题:旧版本QQ中的一处打开聊天界面就能触发的远程命令执行
相关厂商:腾讯
漏洞作者: gainover
提交时间:2015-08-28 22:01
修复时间:2015-11-29 17:06
公开时间:2015-11-29 17:06
漏洞类型:远程代码执行
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-08-28: 细节已通知厂商并且等待厂商处理中
2015-08-31: 厂商已经确认,细节仅向厂商公开
2015-09-03: 细节向第三方安全合作伙伴开放
2015-10-25: 细节向核心白帽子及相关领域专家公开
2015-11-04: 细节向普通白帽子公开
2015-11-14: 细节向实习白帽子公开
2015-11-29: 细节向公众公开
简要描述:
虽然这个漏洞已经由于QQ客户端的功能模块更新导致无法复现(大约是2014年4、5月份的版本),但是其中涉及的具体的“小问题”还是依然存在,如果找到了“可替代品”的“入口点”,危害可能将会再次出现。
详细说明:
1. QQ秀是由FLASH来编写的
2. 以前的QQ秀提供了一个叫做心情秀的功能
3. 心情秀可以在Q秀上显示一段自定义文字,还可以改变文字颜色,这及有可能是在TextField中来显示的,并且这个TextField支持htmlText,那么是否可以插入一个img标签呢?
如上图所示,可以发现并不能输入特殊字符?
4. 然而,似乎只是在客户端做了过滤而已。。我们抓包看看。
5. 数据被huffcompress算法压缩了,给JS代码下断点,然后修改原始的Q秀数据,提交,
可以看到不论是客户端,还是WEB页面,都成功渲染了我们所填写的HTML代码。
6. 接着,我们得试试被img标签嵌入的FLASH是否可以执行恶意代码呢?经测试AS2编写的FLASH才能成功执行,说明父级FLASH为AS2编写。
7. getURL试试。
成功打开pkav.net
8. 然后。。
9. 那么有哪些可以被用来调用的API呢?找到Q秀的主FLASH文件。
10. 看到了有意思的API,是吧?执行个calc试试?
11. 似乎还缺点什么
12. 继续反编译另外一个Q秀的FLASH,看名字似乎胜利就在眼前。
13. 分析一下这个函数的作用~
14. 尝试调用一下这个download API。
成功下载了一个文件,但是文件内容却不对。。Why ?
抓包找一下原因。
看来客户端实现的代码大概是这样(伪代码):
15. 怎么办呢?团队的@sogili(长短短)同学提出的一个可能的解决方案,换行试试?
16. 下载回的数据还是不对?继续抓包:
似乎所有的\r都不见了。。。
17.为什么呢?
上面是ExternalInterface.call的实际过程,推测“\r\n”可能是在拼接成XML数据之后被“格式化”为“标准”的 “\n”。
18. 为了避免这种情况,把\r\n改写成entity的形式,

可是,参数在处理过程中,&会进行一次转义处理,依然不行。
19. 是不是没办法了呢?我们把视线切换到 functionName,函数名未做任何过滤措施。
20. 然后,我们闭合并构造XML。
21. OK,这次我们的请求成功了。
22. 到了这里,我们可以修改请求的host了,但是IP我们肯定没办法改掉了。
我们找找看这个IP对应了多少域名
23. 接着,我们的目标就是在这些域名下找到我们可以控制的资源。
24. 最终,我们在b.qzone.qq.com下找到一个可以用来做bat的接口,注意值的双引号边界。
这个接口在登录情况下,是需要csrftoken的,但是在未登录情况下访问,不需要token就可以直接返回数据,所以我们构造请求头时,并不需要带入cookie等信息。
25. 最终:download API下载JSON为bat,在QQ默认安装情况下,下载文件的路径已知,openURL API指定程序路径进行执行。
漏洞证明:
结果已经不是那么重要了。。。
修复方案:
由于Q秀的版本更新,正好把心情秀这个功能去除了,新版本Q秀上不会显示心情秀了,不排除有类似其它问题。
版权声明:转载请注明来源 gainover@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2015-08-31 17:05
厂商回复:
非常感谢您的报告,问题已着手处理,感谢大家对腾讯业务安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。
最新状态:
2015-08-31:这个漏洞是之前老版本的,还是非常感谢报告。另外我们处理漏洞的同学在wooyun后台执行漏洞确认操作时流程有误,感谢wooyun的同学协助修正流程!