2005年10月4日,世界上第一只“Web 2.0蠕虫”诞生了。当时有人在国外著名社交网络MySpace上写了一段 JavaScript 蠕虫代码,利用 Ajax 方法让无数的用户在毫不知情的情况下把作者加入了好友名单,同时在他们的个人简介里自动加上了“samyis my hero”的字样。此 Samy XSS Worm在MySpace上疯狂散播,一天内就感染了超过100万用户。由于极其惊人的传播速度,最终导致MySpace服务器崩溃。
所谓的跨站脚本蠕虫(XSS Worm)实质上是一段脚本程序,通常用JavaScript或Vbscript写成,在用户浏览XSS页面时被激活。蠕虫利用站点页面的XSS漏洞根据其特定规则进行传播和感染。
值得注意的是,XSS蠕虫只是Web 2.0蠕虫的其中一种,也是最广为人知的一种它利用网站的XSS漏洞进行散播。Web2.0蠕虫还有其他形式,如CSRF Worm,顾名思义,该类蠕虫是利用网站的CSRF漏洞进行攻击。
1、攻击者发现目标网站存在XSS漏洞,并且可以编写XSS蠕虫;
2、利用一个宿主(如博客空间)作为传播源头进行XSS攻击;
3、当其他用户访问被感染的空间时,XSS蠕虫执行以下操作:
编写一只完整的XSS蠕虫并不困难,一般需要具有Web开发经验,此外还要对目标程序网站的应用层逻辑和XSS Worm的业务流程有所了解。
构建一只完整的XSS Worm,不可避免地要使用许多DOM节点技术。
如访问页面元素的DOM HTML表单,可以使用不同的技术,常见的方法是给出一个特定的标识符(ID),然后使用document的getElementByld()函数来访问:
<div>
.....
var div1=document.getElementByld( “div1”);
遍历DOM是一种平滑的体验,另外还有两种强大的方法:
所有的DOM元素无外乎分为两种:文本和元素。使用innerHTML属性就可以从一个元素中提取所有的HTML和文本。具体代码如下:
<div id="tr1">
<h1>hello world!</h1>
</div>
<script>
alert(document.getElementByld(“tr1").innerHTML);
</script>
使用 innerHTML方法还可以向HTML DOM中插入新内容,具体示例如下:
<a href="#" onclick= "this.innerHTML= '<h1> this is new message </h1>' "> Old message </a>
用浏览器打开含上述HTML代码的文档,单击Old message超级链接,此时页面会替换当前标签中的内容。插入<htmI>标签语句的位置可以指定为:
beforeBegin:插入到标签开始标记前
afterBegin:插入到标签开始标记后
beforeEnd:插入到标签结束标记前
afterEnd:插入到标签结束标记后
除了使用以上的DOM方法获取和设置必要元素,还可以使用JavaScript提供的方法进行辅助,如indexOf/substring/lastindexOf等。
下面的示例说明了indexOf 方法的用法:
string test="asdfjsdfjgkfasdsfsgfhgjgfjgdddd"
test.indexof('d')=2 //从前向后定位d 第一次出现的位置
test.indexof('d',1)=2 //从前向后定位d 从第二个字符串开始,第一次出现的位置
test.indexof('d',5,2)=6 //从前向后定位d 从第5位开始向后查2位,即查询第5~7位
<html>
<body>
<script>
var str;
var s="http://www.baidu.com";
str=s.substring(11,15);
alert(str);
</script>
</body>
</html>
2011年6月28日,国内最火的信息发布平台之---新浪微博(http://weibo.com)遭遇XSS蠕虫攻击,受害者被强迫发布带有攻击链接的私信或微博,内容类似“个税起征点有望提到4000““3D肉蒲团高清普通话版种子“可以监听别人手机的软件”等含有诱惑性的信息。用户在感染蠕虫的同时会自动关注位名为“hellosamy”的微博用户,然后向其他好友发送含有同样链接地址的私信。新浪微博的XSS蠕虫爆发仅执续了16分钟,感染的用户就达到将近33000个,可见Web蠕虫的危害性十分巨大,如下图所示。
这次漏洞的成因是因为新浪对参数g完全没有过滤,这次攻击在Chrome、Safari中会被XSS Filter拦截,而IE、Firefox未能幸免。根据当时IE、Firefox的市场占有率这是一次范围很广的攻击。
用来传播XSS蠕虫的URL:
在访问URL的时候,新浪会对字符串进行处理,由于参数g没有进行相应的过滤,导致来自外部的JS脚本被嵌入页面。
本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!
本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。