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

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

缺陷编号:wooyun-2015-0155520

漏洞标题:你windows上开着QQ点了我的链接我就进了你的qq邮箱财付通等(任意腾讯xss拿qq的clientkey)

相关厂商:腾讯

漏洞作者: 呆子不开口

提交时间:2015-11-24 15:11

修复时间:2016-01-11 15:32

公开时间:2016-01-11 15:32

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-11-24: 细节已通知厂商并且等待厂商处理中
2015-11-25: 厂商已经确认,细节仅向厂商公开
2015-12-05: 细节向核心白帽子及相关领域专家公开
2015-12-15: 细节向普通白帽子公开
2015-12-25: 细节向实习白帽子公开
2016-01-11: 细节向公众公开

简要描述:

你windows上开着QQ,然后点了我的链接,我就可以拿到你的QQ客户端的用于认证的clientkey,然后进入你的腾讯邮箱财付通等腾讯服务,利用条件仅需任意腾讯旗下产品的任意子域的xss即可,非QQ域的其他产品域也可。内有若干其他漏洞

详细说明:

整个利用过程会用到qq快速登陆功能的一些安全设计上的缺陷和几个xss漏洞
1、windows下qq的快速登陆功能的一些设计缺陷
首先,我们先来看看windows下qq客户端的快速登陆网页的流程
QQ软件会在本地开4300和4301(https使用)端口来让网页端调取,网页端快速登陆时,会先请求

http://localhost.ptlogin2.qq.com:4300/pt_get_uins?callback=ptui_getuins_CB&r=0.47074823500588536&pt_local_tk=12345678


用如上请求获取到当前登陆的QQ号后,用户点击快速登陆,会再请求

http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=11111111&callback=ptui_getst_CB&r=0.05807492393068969&pt_local_tk=12345678


此请求会完成ptlogin2.qq.com域下的cookie的设置,有两个值,分别是clientuin和clientkey
设置完cookie后,再请求ptlogin2.qq.com域的如下url来完成对ptlogin2.qq.com域和qq.com域的认证cookie的设置,同时删除clientuin和clientkey这两个cookie值

https://ssl.ptlogin2.qq.com/jump?clientuin=277634777&keyindex=9&pt_aid=522005705&daid=4&u1=https%3A%2F%2Fmail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dloginpage%26target%3D&pt_local_tk=1232278179&pt_3rd_aid=0&ptopt=1&style=25


最后跳到子服务的目标url,比如邮箱,这时候邮箱就是登陆状态的了
整个过程有些安全防护,比如QQ开的web服务只绑定了本地端口,并且有referer限制qq域和token校验,https://ssl.ptlogin2.qq.com/jump这个请求设置的cookie是httponly的,clientuin和clientkey在使用完后也删除了
但有如下问题:
快速登陆的主要获取clientkey的请求如下

http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=11111111&callback=ptui_getst_CB&r=0.05807492393068969&pt_local_tk=12345678


一、这个请求的token校验没有经过服务端验证,直接就是看get参数里的pt_local_tk是否和cookie中的pt_local_token相等
这样的话,攻击者就可以更轻松的去伪造请求让用户快速登陆。而且,理论上本机localhost上的任何软件都可以很轻易的伪造请求来获取当前登陆qq的clientkey
二、set的cookie中clientuin和clientkey不是httponly的,虽然在设置完后,在正常流程中会被删除。但对攻击者来说,可以不走这个流程。所以clientuin和clientkey可能会被ptlogin2.qq.com域的xss偷走
三、qq绑定的接口支持多域名,如localhost.ptlogin2.qq.com,localhost.ptlogin2.paipai.com,localhost.ptlogin2.tenpay.com……等等十多个腾讯旗下产品的域名。导致攻击面增大
2、ptlogin2.qq.com域的一个存储xss
看完快速登陆的缺陷后,我们需要的就是一个ptlogin2.qq.com的XSS,这个xss可以伪造快速登陆请求让用户访问,然后再去偷clientuin和clientkey
我扶了扶镜框,发现一个:

http://ui.ptlogin2.qq.com/assistant/troubleshooter.html


这个页面会用innerhtml加载当前document.cookie,所以我们只要能在qq.com域的cookie中设置一些xss语句就可以了
而且这个页面也支持多域名,如ui.ptlogin2.paipai.com,ui.ptlogin2.tenpay.com,ui.ptlogin2.myapp.com,ui.ptlogin2.3366.com等
所以我们需要找一些接口,可以设置cookie。我找了一些可以设置cookie的接口,但是不是被waf拦截,就是有urlencode编码,利用起来很难
最后,只能求助xss了,找一个腾讯旗下任意产品的任意子域即可,然后往cookie中写xss
3、一个只能×自己的xss和一个自动登陆的csrf
我花了一个晚上也没找到一个比较好用的xss,赞一下腾讯的waf
我只找了一个只能×自己的xss,但可以配合一个自动登陆的csrf漏洞让用户登陆我们的账号,然后中招,然后去种我们的偷clientkey的xss进cookie
只能x自己的xss如下,编辑自己的帖子时会触发

http://bbs.browser.qq.com/newthread?action=edit&fid=48&pid=242412&tid=93562&pos=9&special=0


这个xss支持chrome和Edge,IE貌似不支持,其他的我没测
无token保护的自动登陆的请求如下:

http://ptlogin2.qq.com/jump?pt_clientver=5455&pt_src=1&keyindex=9&ptlang=2052&clientuin=3285197011&clientkey=00015653D111006897ED1217CB4F78787F701442DB6DC550D2A0A6B388E1D4528D3F41B14B359E345C244BBC75F24D6693707003C55A4BE0926A121E44B57AADEFCDE3DE182F2837B57578EC6F58E76D2D93E6EE435BDD6FB2C8AA7569AC13F71F2000FED048162503468772B1522983&u1=http%3A%2F%2Fbbs.browser.qq.com%2F


总结一下,攻击流程如下:
让用户自动登陆我们的账号,然后中了我们的self xss,然后往qq.com域写攻击xss语句。然后加载http://ui.ptlogin2.qq.com/assistant/troubleshooter.html,执行我们的cookie存储xss,然后ptlogin的xss往cookie中写一个假的pt_local_token,然后伪造快速登陆的流程,此时,clientuin和clientkey已在cookie中种下,然后我们的xss再去偷即可
使用clientkey可以登陆腾讯的所有网页服务,包括财付通等等……
此攻击的利用条件仅仅是需要任意腾讯产品域的任意子域的xss即可

漏洞证明:

他点了

QQ截图20151124123222.jpg


我收到了

QQ截图20151124123302.jpg


进了

QQ截图20151124123322.jpg


进了

QQ截图20151124125406.png

修复方案:

修复方案都在我的详情描述中了
一些防护的细节一定要做好,任何小问题都可能会在攻击中被利用

版权声明:转载请注明来源 呆子不开口@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2015-11-25 16:46

厂商回复:

非常感谢您的报告,问题已着手处理,感谢大家对腾讯业务安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。

最新状态:

暂无


漏洞评价:

评价

  1. 2015-11-25 16:48 | zhchbin ( 实习白帽子 | Rank:72 漏洞数:19 | 要走得再远一些!)

    这个rank 8有点少吧。

  2. 2015-11-25 16:49 | zeracker 认证白帽子 ( 普通白帽子 | Rank:1077 漏洞数:139 | 多乌云、多机会!微信公众号: id:a301zls ...)

    进了这词语明显不符合伟哥的风格,一般都是 『上了』两字用的比较多

  3. 2015-11-25 16:56 | Format_smile ( 普通白帽子 | Rank:279 漏洞数:104 | ···孰能无过,谁是谁非!)

    进了这词语明显不符合伟哥的风格,一般都是 『上了』两字用的比较多

  4. 2015-11-25 17:03 | 大师兄 ( 路人 | Rank:29 漏洞数:7 | 每日必关注乌云)

    test,从邮箱发现了一个小伙伴帐号,测试发个评论。

  5. 2015-11-25 17:08 | 迪南 ( 普通白帽子 | Rank:185 漏洞数:47 | 我真是一个大菜比)

    洞主屌屌的

  6. 2015-11-25 17:10 | Mark0smith ( 实习白帽子 | Rank:99 漏洞数:36 )

    666

  7. 2015-11-25 17:12 | 呆子不开口 ( 普通白帽子 | Rank:370 漏洞数:34 | 求各种兼职)

    @zhchbin 就是,给9个又怎么了,是不是优客劳徳科技技术有限公司开始按wb找厂商收费了?

  8. 2015-11-25 17:21 | luwikes ( 普通白帽子 | Rank:532 漏洞数:79 | 潜心学习~~~)

    @呆子不开口 绝对是

  9. 2015-11-25 17:37 | 78基佬 ( 实习白帽子 | Rank:84 漏洞数:20 | 不会日站的设计师不是好产品经理)

    6666666

  10. 2015-11-25 17:45 | px1624 ( 普通白帽子 | Rank:1072 漏洞数:180 | px1624)

    clientkey 擦擦

  11. 2015-11-25 18:14 | Martial ( 普通白帽子 | Rank:2048 漏洞数:292 | 竟然还有人冒充我,醉了,骗子QQ445697541...)

    那么问题来了,你知道我QQ多少么

  12. 2015-11-25 18:38 | 随风的风 ( 普通白帽子 | Rank:188 漏洞数:63 | 微信公众号:233sec 不定期分享各种漏洞思...)

    进了这词语明显不符合伟哥的风格,一般都是 『上了』两字用的比较多

  13. 2015-11-25 19:17 | 青空 ( 路人 | Rank:9 漏洞数:1 | 向各位学习、致敬。)

    啥意思啊。。。

  14. 2015-11-25 20:07 | Honker红颜 ( 普通白帽子 | Rank:156 漏洞数:52 | 皖南人士,90后宅男,自学成才,天朝教育失败....)

    进了这词语明显不符合伟哥的风格,一般都是 『上了』两字用的比较多

  15. 2015-11-25 21:17 | imp0rt ( 普通白帽子 | Rank:109 漏洞数:51 | 剑影。。。)

    进了这词语明显不符合伟哥的风格,一般都是 『上了』两字用的比较多

  16. 2015-11-25 21:40 | onpu ( 普通白帽子 | Rank:140 漏洞数:35 | 勿忘初心)

    你windows上开着wooyun点了我的链接我就进了你的wooyun账号

  17. 2015-11-25 21:45 | f4ckbaidu ( 普通白帽子 | Rank:208 漏洞数:28 | 开发真是日了狗了)

    大牛的洞必须关注

  18. 2015-11-25 22:15 | 泪雨无魂 ( 普通白帽子 | Rank:180 漏洞数:50 )

    进了这词语明显不符合伟哥的风格,一般都是 『上了』两字用的比较多

  19. 2015-11-26 08:25 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    可惜呀

  20. 2015-11-26 08:26 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    @呆子不开口 这么牛逼的漏洞

  21. 2015-11-26 08:49 | 一只猿 ( 普通白帽子 | Rank:509 漏洞数:92 | 硬件与无线通信研究方向)

    进了这词语明显不符合伟哥的风格,一般都是 『上了』两字用的比较多

  22. 2015-11-27 10:06 | 那一夜不得已 ( 路人 | Rank:15 漏洞数:3 | 有个号就不错了,还要神马简介)

    这个目测是QQ的wormhole吧?几个月前给TSRC提过,你猜他们怎么说?“不就一个JSONP嘛”,废尽口舌才给了两分,你运气真好。

  23. 2015-11-27 11:50 | px1624 ( 普通白帽子 | Rank:1072 漏洞数:180 | px1624)

    cookie的话 8分差不多,clientkey感觉起码15+

  24. 2015-11-27 12:51 | 呆子不开口 ( 普通白帽子 | Rank:370 漏洞数:34 | 求各种兼职)

    @那一夜不得已 jsonp获取不到这个,他有token和referer校验

  25. 2015-11-27 12:54 | 呆子不开口 ( 普通白帽子 | Rank:370 漏洞数:34 | 求各种兼职)

    @那一夜不得已 还有,即使有jsonp漏洞,clientkey也不是在response body里面的,是在cookie里面的,jsonp拿不到。我运气一点也不好,你运气不错,还能拿到两分

  26. 2015-11-27 15:18 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    这个漏洞少说也算是高危

  27. 2015-11-30 09:31 | 那一夜不得已 ( 路人 | Rank:15 漏洞数:3 | 有个号就不错了,还要神马简介)

    @呆子不开口 别激动,不是我定义为JSONP,是TSRC给我下的结论,当时我提交了POC,可以盗取本地所有已经登录的QQ skey,也提出了tocken只要不为空就可以绕过tocken检测,只要来路为白名单域名就可以绕过referer。后来他们把tocken检测修复了,可惜也只是验证cookie里面的值是否等于get参数tocken的值,这同样也是漏洞,因为xss可以控制cookie。至于怎么获取clientkey没有深入挖掘,因为skey已经有大部分功能了

  28. 2015-11-30 11:11 | 呆子不开口 ( 普通白帽子 | Rank:370 漏洞数:34 | 求各种兼职)

    @那一夜不得已 看站短,加qq聊

  29. 2015-12-01 11:52 | 1937nick ( 普通白帽子 | Rank:123 漏洞数:40 | 水能载舟,亦能煮粥。物尽其用,人尽其能。)

    然并卵。。。。

  30. 2015-12-11 22:36 | VMApire ( 路人 | Rank:6 漏洞数:1 | ★财神网络★欢迎各位大牛加入)

    招收各种大牛。看我个人主页。