当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-010800

漏洞标题:当 |XSS蠕虫| 与 |QQ系统消息推送| 双剑合璧之后 …

相关厂商:腾讯

漏洞作者: gainover

提交时间:2012-08-11 18:43

修复时间:2012-09-25 18:43

公开时间:2012-09-25 18:43

漏洞类型:xss跨站脚本攻击

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-08-11: 细节已通知厂商并且等待厂商处理中
2012-08-13: 厂商已经确认,细节仅向厂商公开
2012-08-23: 细节向核心白帽子及相关领域专家公开
2012-09-02: 细节向普通白帽子公开
2012-09-12: 细节向实习白帽子公开
2012-09-25: 细节向公众公开

简要描述:

QQ某处页面存在缺陷,导致我们可以恶意推送QQ系统消息,但是单纯的推送消息并不能太实质性的危害!但是,如果这个“系统消息”的链接能够被我们修改为我们自定义的页面的话,那就危险了!在自定义的页面内,结合一个FLASH XSS,进而自动获取用户的好友列表,自动给受害者的好友推送恶意的“系统消息”! 想想看,那会是一个什么效果? 当XSS蠕虫结合腾讯的系统消息功能,会是个什么疯狂的效果呢? 可惜,我们是白帽子,无法去实际测试会产生的恐怖后果 :) ,但是利用过程中的一些思路却可以被借鉴。
PS:该漏洞最初由我们全宇宙最帅的男人only_guest发现!!
在PKAV官网,我们也对此漏洞相关细节进行了描述,http://pkav.net/2012/08/xssworm-qqxiaoxi-vul/ (考虑到漏洞的实际危害,目前对此文进行了加密操作,在腾讯进行修复后,将会予以公开。)

详细说明:

1. 首先是我们全宇宙最帅的男人only_guest发现在QQ奥运竞猜处,可以无限给好友发送邀请消息,而且可以自定义消息窗口的内容。这样一来,我们就可以给好友发送一些虚假公告,或者是一些搞笑的“鄙视“信息。



2. 但是如果仅仅是这样的话,只能算是一个鸡肋,甚至都算不上是一个安全漏洞了!
3. QQ系统消息是可以点击进去查看详情的,如果我们可以把这个链接都改为自己的呢?那么造成的危害将会瞬间升级!
4. 带着这个思路,我们可以开始对“奥运竞猜邀请”这个模块进行抓包分析。
5. 经过抓包,我们可以看到给好友发送一个邀请,主要是2步~


5.1 获取好友列表的请求

http://apps.2012.qq.com/guess/friends/list?url=http%3A%2F%2Fapps.2012.qq.com%2Fguess%2Fguess-tid-18-id-363&message=%E5%A5%B3%E7%AF%AE%E5%B0%8F%E7%BB%84%E8%B5%9B-%E4%B8%AD%E5%9B%BDvs%E5%AE%89%E5%93%A5%E6%8B%89%EF%BC%8C%E8%B0%81%E5%B0%86%E8%8E%B7%E8%83%9C%EF%BC%9F
Query String:
url http://apps.2012.qq.com/guess/guess-tid-18-id-363
message 女篮小组赛-中国vs安哥拉,谁将获胜?


在这个请求中,我们看到,有“系统消息”里点击的那个链接。那么这个链接出现在这个请求里有什么用呢? 我们看看这个请求里的源码。会看到以下内容:

<script type="text/javascript">
//邀提Url
_MI.invate.invateUrl = "/guess/friends/invite?url=http%3A%2F%2Fapps.2012.qq.com%2Fguess%2Fguess-tid-18-id-363&hash=bc85ea9ed27178416dfe984ef58fb657";
_MI.invate.maxNumber = 5;
var message="女篮小组赛-中国vs安哥拉,谁将获胜?";
var uin="22871560";
var invateUrl="http://apps.2012.qq.com/guess/guess-tid-18-id-363";
window.onload =function(){_MI.invate.run(message,uin);}
</script>


我们可以看到,在这段代码里,有invateUrl (这个单词是不是写错了,invite?),还有invateUrl对应的hash
而在下一个请求5.2中,正好又用到了这个hash值。
5.2 给好友发送邀请的请求。

POST方式:
http://apps.2012.qq.com/guess/friends/invite?url=http%3A%2F%2Fapps.2012.qq.com%2Fguess%2Fguess-tid-18-id-363&hash=bc85ea9ed27178416dfe984ef58fb657
Query String:
url http://apps.2012.qq.com/guess/guess-tid-18-id-363
hash bc85ea9ed27178416dfe984ef58fb657 <--- 5.1 步骤中得到的hash值
Post Data
uin0 86****0
nickname0 小号1号
token0 12a0d8a2b3d9c


6. 经过以上抓包分析,我们不难做出以下开发逻辑的猜测:
6.1 首先通过http://apps.2012.qq.com/guess/friends/list得到好友的QQ号码,token值,以及被邀请竞猜的URL以及URL对应的HASH值
6.2 利用6.1中得到的数据给用户发送邀请
7. 那么,我们将第一步url里的http://apps.2012.qq.com/guess/guess-tid-18-id-363修改成我们自己的呢?于是我们测试,将url修改为 http://pkav.net,得不到返回结果。


8. 看来这里对域名进行了判断过滤, 那么我们找一个同域名下的XSS试一下吧~
http://apps.2012.qq.com/guess/friends/list?url=http%3A%2F%2Fapps.2012.qq.com%2Fguess%2Fguess-tid-18-id-363";alert(1)//&message=ok
10. 不幸的是,上面这个XSS URL通过了5.1步,但是在5.2步,由于长度限制,返回了错误。


11. 那么这里到底限制了多少长度呢?为了方便测试,用俺的魔盒(http://www.toolmao.com)写了一个利用程序进行了测试。


12. 随后我将这个程序发送给了only_guest, 过一会,他发现在5.1这个步骤上,QQ的域名判断存在问题,用http://pkav.net/#.qq.com/?http://1.qq.com一样可以发送成功。 看来QQ在这里的判断正则写的不到位?或者是indexOf("qq.com")的方式检测?
13. 这样一来,我们就可以向自己的好友推送恶意的“系统消息”,并且用户点击系统消息后,会打开我们所设置的链接,http://pkav.net,如下图:


14. 当然这个还不算什么, 如果把这个系统消息推送,再配合一个QQ的XSS,效果该如何呢? 因为FLASH XSS具有独特的优势(http://zone.wooyun.org/content/368),我就去腾讯的域名下找一个FLASH XSS,然后进行下一步的利用。
15. 利用思路可以用下图表示:


16. 按照上面的思路,我们可以写一下利用代码!
16.1 首先是FLASH XSS的利用代码。

@see http://itsokla.duapp.com/aoyun_js.php.txt


16.2 FLASH XSS会调用我们的JS文件。

@see http://itsokla.duapp.com/aoyun_worm.js


16.3 aoyun_worm.js会将用户的QQ号码和cookies发送给aoyun_receive.php

@see http://itsokla.duapp.com/aoyun_receive.php.txt


16.4 aoyun_receive.php 就会利用用户的cookies向用户的好友自动推送消息。
这里用mysql来存储了以及推送过的QQ号码,防止对同一个用户的全部好友进行多次重复推送。

漏洞证明:

用我的大号打开危害页面后,可以看到大号在不知情的情况下,自动对我的好友小号发送了恶意的“系统消息”

修复方案:

1. 等奥运结束,活动下线即可
2. 对推送消息处的域名判断做审查并修改
3. 对消息推送次数做限制
4. 修复FLASH XSS,不修复也可以 :),留着我下次再用吧~~

版权声明:转载请注明来源 gainover@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2012-08-13 14:04

厂商回复:

感谢反馈,我们正在跟进处理中

最新状态:

暂无


漏洞评价:

评论

  1. 2012-08-11 18:46 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    双剑合璧后

  2. 2012-08-11 19:04 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    其实测试下也没什么的 我觉得啊

  3. 2012-08-11 19:19 | zeracker 认证白帽子 ( 核心白帽子 | Rank:1068 漏洞数:137 | 多乌云、多机会!微信公众号: id:a301zls ...)

    我擦。又是20点

  4. 2012-08-11 19:21 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    @xsser 我犹豫了两天..要不要测试一次...后来想想还是算了...不给腾讯找麻烦了...也不给PKAV找麻烦了..

  5. 2012-08-11 19:23 | 闪电小子 ( 实习白帽子 | Rank:63 漏洞数:5 | PKAV技术宅社区!---闪电小子!)

    给妹子发消息最有爱啦!哈哈~

  6. 2012-08-11 19:26 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    全宇宙最帅的男人only_guest

  7. 2012-08-11 19:48 | Henry:bobo ( 普通白帽子 | Rank:104 漏洞数:22 | 本胖吊!~又高又肥2个奶奶像地雷)

    @闪电小子 .....好自恋

  8. 2012-08-11 19:53 | imlonghao ( 普通白帽子 | Rank:730 漏洞数:74 )

    @zeracker 亲小二不保啊。@闪电小子 大牛出没注意。

  9. 2012-08-11 20:00 | Henry:bobo ( 普通白帽子 | Rank:104 漏洞数:22 | 本胖吊!~又高又肥2个奶奶像地雷)

    @only_guest ..貌似我回错人了 应该是

  10. 2012-08-11 20:39 | 蟋蟀哥哥 ( 普通白帽子 | Rank:363 漏洞数:57 | 巴蜀人士,80后宅男,自学成才,天朝教育失败...)

    看来有基情

  11. 2012-08-11 20:53 | _Evil ( 普通白帽子 | Rank:418 漏洞数:59 | 万事无他,唯手熟尔。农民也会编程,别指望天...)

    @only_guest +_+肾斗士雄起,小铸 很拜模。

  12. 2012-08-11 20:53 | _Evil ( 普通白帽子 | Rank:418 漏洞数:59 | 万事无他,唯手熟尔。农民也会编程,别指望天...)

    @only_guest 你刚刚开论坛没多久我注册的账号 账号密码都不记得了...

  13. 2012-08-11 20:57 | 数据流 ( 普通白帽子 | Rank:716 漏洞数:88 | all or nothing,now or never)

    @only_guest @_Evil 肾斗士?这ID好熟悉

  14. 2012-08-11 21:08 | _Evil ( 普通白帽子 | Rank:418 漏洞数:59 | 万事无他,唯手熟尔。农民也会编程,别指望天...)

    @数据流 百度 "90后黑客 肾斗士" 早认识了,= =。。。

  15. 2012-08-11 21:53 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    @数据流 肾斗士也是我的ID...

  16. 2012-08-11 21:56 | 闪电小子 ( 实习白帽子 | Rank:63 漏洞数:5 | PKAV技术宅社区!---闪电小子!)

    @Henry:bobo 我的确给妹子发过。效果刚刚,哈哈~

  17. 2012-08-11 22:15 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @zeracker 精华翻倍啊。压力好大

  18. 2012-08-11 22:18 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    @zeracker 排名不保了....

  19. 2012-08-11 23:18 | zeracker 认证白帽子 ( 核心白帽子 | Rank:1068 漏洞数:137 | 多乌云、多机会!微信公众号: id:a301zls ...)

    @only_guest 有竞争力才有动力,除非这个帖子厂商给22点,才超我。哈哈,哥不担心。

  20. 2012-08-11 23:44 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    @zeracker @xsser 来电他一下

  21. 2012-08-11 23:54 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    @zeracker 要是加精华了呢....

  22. 2012-08-11 23:55 | random_ ( 普通白帽子 | Rank:295 漏洞数:50 | 推动开源推动网络安全)

    哈哈 给力

  23. 2012-08-12 12:46 | 啤酒 ( 实习白帽子 | Rank:62 漏洞数:8 | 道不同.喝酒结盟)

    微博来的?

  24. 2012-08-12 23:58 | 苦战 ( 路人 | Rank:5 漏洞数:4 | 人称苦战?乃南方蛮荒之人!相平,谓正不如...)

    大爱这类~ 关注个吧

  25. 2012-08-14 01:17 | rdpclip ( 实习白帽子 | Rank:50 漏洞数:4 | 脚踏实地,不慕虚华,实事求是的rdpclip)

    前来膜拜。。

  26. 2012-08-14 14:44 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    http://pkav.net/2012/08/xssworm-qqxiaoxi-vul/内容已经公开

  27. 2012-08-14 16:59 | imlonghao ( 普通白帽子 | Rank:730 漏洞数:74 )

    @only_guest 果断转载~

  28. 2012-08-23 14:12 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    提醒:级别足够但是无法查看 Rank 高于自己的白帽子漏洞

  29. 2012-08-23 14:28 | imlonghao ( 普通白帽子 | Rank:730 漏洞数:74 )

    @only_guest +1

  30. 2012-08-23 16:58 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @only_guest 这个限制应该去掉、、

  31. 2012-08-23 17:51 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    @px1624 @imlonghao http://pkav.net/2012/08/xssworm-qqxiaoxi-vul/ 内容已经公开 你们可以到这里看

  32. 2012-08-23 18:08 | imlonghao ( 普通白帽子 | Rank:730 漏洞数:74 )

    @only_guest 早就转了。~看这个回复上面的第5个回复

  33. 2012-08-24 14:16 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @only_guest 嗯,这个看了,不过好多都是等级够,rank不够,看不了。。。

  34. 2012-08-25 00:13 | only_guest 认证白帽子 ( 普通白帽子 | Rank:800 漏洞数:75 | PKAV技术宅社区-专心做技术.PKAV已经暂停...)

    @px1624 我要是全转到PKAV拿去公开的话.剑心会弄死我的.

  35. 2012-08-25 09:30 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @only_guest @px1624 only_guest说可以用乌云币提前看的

  36. 2012-08-25 10:50 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @xsser 没看到怎么使用乌云币诶?

  37. 2012-08-26 18:21 | imlonghao ( 普通白帽子 | Rank:730 漏洞数:74 )

    @xsser ................

  38. 2012-08-26 18:25 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @px1624 @imlonghao 再仔细看!

  39. 2012-08-26 18:36 | imlonghao ( 普通白帽子 | Rank:730 漏洞数:74 )

    @xsser 打死不支付。。。。。都是爱疯配件啊。。。。。。。。。。。。。。。。。。

  40. 2012-08-26 20:31 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    @xsser 价格怎么定的呢?

  41. 2012-08-27 10:08 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @一刀终情 当前漏洞rank的一半儿

  42. 2012-08-28 17:17 | 凤凰 ( 路人 | Rank:15 漏洞数:6 | 涅磐)

    原来乌云币就是rank啊~~手抖了下,10个币没了。。还好这个漏洞是20。不然亏了

  43. 2012-08-28 17:21 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @凤凰 rank不会减少 乌云币会

  44. 2012-08-28 17:46 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    @xsser 支付给作者了么?

  45. 2012-08-28 17:57 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @一刀终情 给乌云了...

  46. 2012-08-28 18:32 | imlonghao ( 普通白帽子 | Rank:730 漏洞数:74 )

    @xsser ..

  47. 2012-08-29 08:39 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    @xsser 应该给作者提成,可以提高作者的积极性的哇;提成比例根据支付者的评价定

  48. 2012-08-29 08:59 | 凤凰 ( 路人 | Rank:15 漏洞数:6 | 涅磐)

    @xsser 我也以为给作者了。建议抽个两成给作者

  49. 2012-08-29 10:31 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @凤凰 @一刀终情 不是都给精华了咩 :(

  50. 2012-08-29 11:14 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    @xsser 也是,精华的,WB翻翻的哇~~没精华的呢……

  51. 2012-09-13 09:16 | none ( 实习白帽子 | Rank:40 漏洞数:5 | 十次十次啊 hack it then know more~)

    再给二哥一个精华吧

  52. 2013-03-29 03:49 | Drizzle.Risk ( 普通白帽子 | Rank:255 漏洞数:19 | You have an error in your SQL syntax; ch...)

    太经典了.. 赞一个,有时候,一个洞,不给厂商狠狠证明威胁性,或许就忽略了...

  53. 2013-04-09 19:02 | 小野 ( 路人 | Rank:6 漏洞数:2 | 低调~)

    擦!这个漏洞腾讯缝上了吧??

  54. 2013-04-09 19:43 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @小野 ...八百年前的事情了。。。

  55. 2013-06-21 12:52 | 噬魂 ( 普通白帽子 | Rank:141 漏洞数:37 | 08安全团队)

    好牛B啊啊