前言
本文原为向《电脑报》的投稿,是两个月之前写的稿子,我很遗憾《电脑报》编辑拖沓的效率,所以只能自行发布这篇稿子了,再次为电脑报编辑对待作者的态度感到遗憾!
--------------------------------------------------------------------------------
(2005-07-24 10:57:41) 逝去就別懷念 您好,我问下那篇QQ的稿子还发吗
(2005-07-24 10:58:18) Maxi 要发的
(2005-07-24 10:58:14) 逝去就別懷念 when?
(2005-07-24 11:00:28) Maxi 就这一两周之类
--------------------------------------------------------------------------------
有没有想到过,在打开别人发来的一条让你帮忙支付QQ秀衣服的请求时,你还没有点击“确定”,系统就已经“好心的”替你支付完毕了?
[图一]

没错,下面就跟着玄猫来通过QQ网站的漏洞,构建攻击代码,巧妙地对你的QQ好友的Q币来一次亲密接触吧。
跨站点的发现
QQ秀有“他人支付”一个功能,就是在购买物品账户余额不足的时候,可以让用户的好友付账。在这个付账的留言中,我们可以填写经过构造的任意危险内容,网站会直接不加过滤的把这个消息通知到QQ的客户端,当受侵害者打开这个消息时,我们放在其中的代码就会执行了。
过程分析
我们先来分析下“他人支付”的过程。
首先在网页上填写请求他人支付的表单,内容有对方的QQ号码和你给对方的留言,然后对方的QQ会弹出提示说有他人的支付请求,被请求的人点击“查看”打开这个请求(其实是打开了一个特殊形态的IE窗口[图二]),里面显示你请求对方购买的物品,还有两个按钮:“确定”和“拒绝”。
[图二]

经过分析页面源代码,点击“拒绝”就是关闭窗口,而点击“确定”是执行了一个自定义的Javascript函数:AskAccept()。这个AskAccept()函数的代码如下:
[code]function askAccept()
{
SendItem(’熟草莓’, ’14218’, ’20’, ’14’, 1, 2, ’20813691’, ’90868’); //20813691就是被赠送的人号码
if (0) {
window.location="/mall/inc/cart.html"; //页面跳转
}
else { //设置几个参数
setCookie(’asksession’, ’bgCs4dE3tUryvLZTNSG2EAT47xMCjTs’);
setCookie(’senduin’, ’20813691’);
setCookie(’recvuin’, ’1000000’);
setCookie(’sendid’, ’90868’);
window.location="/mall/inc/cl_cart.html"; //页面跳转
}
}
[/code]
通过这个函数我们不难看到,程序先设置一些cookies,然后跳转的页面http://qqshow.qq.com/mall/inc/cl_cart.html。这个cl_cart.html是干什么的呢?这个就是点击同意后转到的页面,显示购物车的。再来分析这个页面,首先页面显示了购买的物品,然后有一个“账户支付”的按钮,我们再来分析源代码,点击“账户支付”后页面将被定向到http://qqshow.qq.com/cgi-bin/qqshow_user_ask_pass,来执行购买支付的操作。
跨站构造
我们需要用户执行查看物品页面中的函数AskAccept()的一部分代码,即前面设置cookies的代码,而暂时不能进行页面的跳转,因为如果页面被重定向到了cl_cart.html这个页面的话,我们就失去了对客户端的控制权,但是在页面cl_cart.html又进行了某些设置cookies的操作,所以我们还要用别的方法调用这个页面,同理,我们也要调用页面http://qqshow.qq.com/cgi-bin/qqshow_user_ask_pass来进行支付的操作。
编辑:xker.com