这个本来是设计的问题,腾讯在设计快速登陆模块插件的时候允许太多可信域来使用这个插件来获取本机上QQ 的ClientKey ,可信域究竟多到什么程度呢?居然在可信域里面可以找到一个皇家赌场的站点...只要在插件上的可信站点找到一处XSS 即可利用,于是找到其中一处可信域上传flash 可以执行javascript 来实现ClientKey 的获取,只要flash 小游戏审核通过后还可以大规模盗取ClientKey ..
出现问题的插件在Chrome 浏览器下是默认导入的:
在IE 中,该插件又会以Active 控件导入到浏览器中:
接下来说说插件里面的可信域,登陆插件为了防止给其它站点恶意获取用户的敏感信息所以只给下面的域来访问:
插件数据获取测试代码如下:
在不可信的站点下执行,插件会抛出错误:
在可信域里面执行可以获取到敏感信息:
刚才说到,有个赌场的网站也在里面,这就给证明,站点http://**.**.**.**/ :
然后在这些域里面找了很久没有找到XSS ,但是找到了**.**.**.** ,里面可以自己上传flash 游戏,而且还是默认启用javascript 接口(因为flash 需要调用后面的云js 接口交互,所以支持flash 执行javascript ),于是可以结合瘦子哥的flash XSS 的原理来执行javascript 代码获取用户敏感数据(http://**.**.**.**/bugs/wooyun-2010-016532)
flash 运行javascript 的域:
有上面作为铺垫之后,在flash 里面写出下面的接收数据的代码
原来的javascript :
加密转换为Action Script 之后:
执行结果如下:
然后到后台可以看到记录,Link:http://1.**.**.**.**/XSS_Get_Cookie/admin_cookie.php (麻烦打个码)
如果这个flash 游戏可以经过审核(一个星期前传了个小游戏昨天才给审批,不过审核很容易的,flash 游戏代码所以百度都有很多,然后插恶意代码进去上传提交即可)的话那么玩这个小游戏的人都可以拿到他们的ClientKey (前提是浏览器里面有快速登陆插件)
使用flash 执行javascript 的代码有点盲目,那么如何构造链接来让对方点击呢?呆子哥的思路很好,在此借鉴一下(http://**.**.**.**/bugs/wooyun-2010-0155520),登陆QQ 空间的URL 格式如下:
https://**.**.**.**/jump?pt_clientver=5473&pt_src=1&keyindex=9&ptlang=2052&clientuin=QQ号&clientkey=ClientKey&u1=要跳转到的目的URL
以此为基础,构造出:
注意:可能在你访问的时候无法正常加载flash ,下面有解释..
然后发给别人来访问,测试结果:
如果在测试中发现无法加载flash 有两个原因:1.由于现在ClientKey 不再是以前那样一条Key 任意登陆了,只有当客户端开启的时候才可以使用ClientKey ,如果关闭了的话就无法再使用了.因为**.**.**.** 的游戏测试flash 有限制,如果不是这个游戏的开发者没有办法在测试状态下去访问游戏的flash ,自然也就不能正常加载flash ,所以在复现漏洞的话建议写个小小的flash ,上传然后找到测试链接,再结合自己的QQ 号和ClientKey 填到登陆跳转URL 里面;2.有些主机的浏览器里面没有装这个插件,复现的时候注意看看navigator.mimeTypes['application/nptxsso'] 有没有存在