当前位置: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

厂商回复:

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

最新状态:

暂无