本文涉及漏洞点:
1、self-xss
2、scheme 跳转
3、URL 跳转
4、CSRF
5、JSONP
挖掘过程分解:
一、挖掘背景介绍
在某次冲浪过程中,随手测试了一下这个系统的预览功能,点击预览会生成二维码,需要手机QQ扫描才能访问预览界面。
随手点击F12修改HTML源码,插入XSS代码
再次扫描二维码预览,触发XSS。
原本以为这就结束了,直到换了一个账户,扫描之后才发现进坑了,这是一个self-xss,无奈洞是自己挖的,无论如何也要利用起来。
二、self-xss的上位之路
1.首先解码二维码,发现uin为当前预览用户的QQ号,seq为当前预览生成的次数。通过测试发现,直接访问这个链接与扫描二维码的效果一致,这就进一步方便了我们攻击链的形成。
2.到这里初步利用的思路就来了,首先需要受害者触发恶意预览请求的操作,然后要设法让受害者访问到预览请求之后的链接。
3.开始第一步,设法让受害者触发恶意预览请求操作。经过测试发现预览请求可以由POST改为GET,这就有可能存在CSRF漏洞。
3.1但是后台验证了Referer,要解决 Referer 的问题,首先就需要这个请求是由buluo.qq.com发起的,并且浏览器需要带上Referer头。
3.2 CSRF 的 Referer 问题这个我们可以通过 img 标签解决,发帖测试可行。
4.受害者QQ号的问题?我怎么才能知道受害者的QQ号呢?这里就需要用到JSONP漏洞了,在写了一个burp插件后,很轻松找到了一个JSONP泄露。
5.到现在我们回顾一下,该漏洞需要手机QQ访问预览链接,所以这个漏洞只能在手机QQ上触发,但是无论是触发预览请求,还是JSONP都需要用户处于登录状态,那我们怎么才能保证用户访问的时候是处于登录状态呢。这里就又用到一个新的机制 scheme。
6.手机QQ scheme 跳转
mqqapi://forward/url?version=1&src_type=web&url_prefix=[base64_url]
当我尝试使用xxx.qq.com这类域名的时候,发现直接就成功登录了,初步猜测,是APP中做了判断,如果是qq.com 这类腾讯域名的话,就会带上cookie 进行访问。
7.该 shceme 限制了只能跳转腾讯的域名。所以我们还需要一个 qq.com 域下的URL跳转漏洞。恰巧我又发现该系统下的一个有限制的跳转。跳转的时候,会进行提示。
https://xxxx/mobile/jumpURL.html?_wv=4&url=http%3A%2f%2f106.52.197.233%3A8888%2fqingfengshifu%2findex.php%26ie%3Dutf-8
8.但是baidu的域名有很大几率绕过这个提示,所以只需要在找个baidu的跳转就可以了。组合起来就是这样。成功绕过安全提示。
https://xxxx/mobile/jumpURL.html?_wv=4&url=https%3A%2f%2fbaidu.com%2fs%3Fwd%3Dpaperuri%253A%25284a9cb4a895e665c048089b2b3a78e1cf%2529%26filter%3Dsc_long_sign%26tn%3DSE_xueshusource_2kduw22v%26sc_vurl%3Dhttp%3A%2f%2fxxxx%3A8888%2fqingfengshifu%2findex.php%26ie%3Dutf-8
9.同时我发现QQ浏览器与手机QQ之间使用 Scheme 跳转,是全程静默没有提示的。所以完整的思路就来了。如下所示。
三、self-xss 进化 蠕虫!!!
1.发布恶意帖子,使用 IMG 标签触发 CSRF 包含恶意代码的预览生成请求。
img 内解码如下
2.创建恶意页面 index.php,使用iframe包含该恶意帖子,触发CSRF,同时跳转到下个页面:
3.在 info.php 中,使用JSONP 截取目标QQ号,并循环生成 iframe 绕过 seq 限制。(iframe 的地址就是最终预览链接地址),触发XSS,同时隐藏iframe。
4.将控制跳转的 jump.php 发布出去。使用 scheme 控制各种跳转去访问恶意的 index.php:
5.编写获取cookie与XMLhttp 发帖蠕虫的 1.js 文件:
6.发帖内容解码如下,A标签添加 href 利用跳转绕过,指向我们的恶意网页。img 标签再次触发预览的CSRF请求:
四、最终演示:
(视频就不放咯,以免引起不必要的麻烦)
最终效果就是,受害者使用qq浏览器或手机QQ访问了某恶意页面,该页面会通过 schame 调用手机QQ,触发xss窃取信息,并发布带有恶意地址的帖子。当其他用户浏览了这个帖子,并点击了A标签,又会进行相同的步骤。形成蠕虫。(因为是测试,所以多了一些无用步骤包括跳转等待等等)。
其实一系列低危甚至无危的漏洞,通过组合利用,往往就能变废为宝。
本文迁移自知识星球“火线Zone”