当XSS蠕虫与QQ系统消息推送双剑合璧之后
QQ某处页面存在缺陷,导致我们可以恶意推送QQ系统消息,但是单纯的推送消息并不能太实质性的危害!但是,如果这个“系统消息”的链接能够被我们修改为我们自定义的页面的话,那就危险了!在自定义的页面内,结合一个FLASH XSS,进而自动获取用户的好友列表,自动给受害者的好友推送恶意的“系统消息”! 想想看,那会是一个什么效果? 当XSS蠕虫结合腾讯的系统消息功能,会是个什么疯狂的效果呢? 可惜,我们是白帽子,无法去实际测试会产生的恐怖后果 ,但是利用过程中的一些思路却可以被借鉴。
1. 首先是我们全宇宙最帅的男人only_guest发现在QQ奥运竞猜处,可以无限给好友发送邀请消息,而且可以自定义消息窗口的内容。这样一来,我们就可以给好友发送一些虚假公告,或者是一些搞笑的“鄙视“信息。
2. 但是如果仅仅是这样的话,只能算是一个鸡肋,甚至都算不上是一个安全漏洞了!
3. QQ系统消息是可以点击进去查看详情的,如果我们可以把这个链接都改为自己的呢?那么造成的危害将会瞬间升级!
4. 带着这个思路,我们可以开始对“奥运竞猜邀请”这个模块进行抓包分析。
5. 经过抓包,我们可以看到给好友发送一个邀请,主要是2步~
5.1 获取好友列表的请求
Query String:
url http://apps.2012.qq.com/guess/guess-tid-18-id-363
message 女篮小组赛-中国vs安哥拉,谁将获胜?
</code>
在这个请求中,我们看到,有“系统消息”里点击的那个链接。那么这个链接出现在这个请求里有什么用呢? 我们看看这个请求里的源码。会看到以下内容:
<code>
<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>
</code>
我们可以看到,在这段代码里,有invateUrl (这个单词是不是写错了,invite?),还有invateUrl对应的hash
而在下一个请求5.2中,正好又用到了这个hash值。
5.2 给好友发送邀请的请求。
<code>
POST方式:
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
</code>
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. 那么这里到底限制了多少长度呢?为了方便测试,用俺的魔盒(
12. 随后我将这个程序发送给了only_guest, 过一会,他发现在5.1这个步骤上,QQ的域名判断存在问题,用
14. 当然这个还不算什么, 如果把这个系统消息推送,再配合一个QQ的XSS,效果该如何呢? 因为FLASH XSS具有独特的优势(
16. 按照上面的思路,我们可以写一下利用代码!
16.1 首先是FLASH XSS的利用代码。
<code>
@see 
漏洞修复:
1. 等奥运结束,活动下线即可
2. 对推送消息处的域名判断做审查并修改
3. 对消息推送次数做限制
4. 修复FLASH XSS,不修复也可以 ,留着我下次再用吧~~




