一则有趣的XSS WAF规则探测与绕过
字数 1684 2025-08-18 11:37:53
XSS WAF规则探测与绕过技术详解
前言
本文以B站一个已修复的XSS漏洞为例,详细分析其WAF(Web应用防火墙)规则,并探讨如何通过系统化的方法探测WAF规则并实现绕过。本文内容适用于安全研究人员、渗透测试人员以及对Web安全防御机制感兴趣的技术人员。
WAF绕过基本原理
- WAF工作原理:WAF通常由多条正则表达式规则组成,用于检测和拦截恶意输入。
- 绕过核心思想:
- 使用不在WAF规则库中的payload
- 构造初始无效但经服务器处理后生效的payload
- 探测方法论:从局部到整体,逐步组合测试,分析WAF拦截点。
XSS探针技术
基础探针结构
'";>
探针解析
- 用于测试HTML标签、属性、事件处理程序等基本元素的解析情况
- 在Chrome浏览器的Element和Source面板中观察探针的解析结果
WAF规则探测方法
手工探测步骤
-
分离测试:单独测试标签、属性、事件、函数等组成部分
- 测试``是否被拦截
- 测试
alert(1)是否被拦截 - 测试
onerror是否被拦截 - 测试
src=x是否被拦截
-
逐步组合:将组件逐步组合,观察拦截点
- `` → 未拦截
- `` → 未拦截
- `` → 未拦截
- `` → 拦截
-
回溯分析:根据拦截点分析可能的WAF规则
- `` → 未拦截
- `` → 拦截
onerror=alert(xxxx)→ 拦截
探测到的WAF规则示例
-
基础事件过滤:
on\w+=(?:prompt|alert|confirm){1}$\w+$<[^>]*\s+on\w+=(?:prompt|alert|confirm){1}\(\w+
-
Script标签过滤:
<script>.*\s(?:alert|prompt|confirm)$.*$<script>[^]*document.\w+`<script>[^]*document
\[\w+ \]
`
<script>\w+\.cookie<script\s(.*\s)?src(=\w+)?>
-
A标签过滤:
<a\s(.*\s)?href=javascript:.*>
-
Img标签过滤:
- `]*on\w+=\w+
\[\w* \]
\(\w*\)`
]*on\w+=\w*.*
绕过技术详解
1. 使用非黑名单函数
- 使用
console.log代替alert - 使用
top对象间接调用:top['alert'](1)或top['al'+'ert'](1)
Payload示例:
<script>top['alert'](1)</script>
2. 标签拼接绕过
利用响应包拼接构造有效payload:
Payload结构:
aaa</script>bbb<script>ccc
实际应用:
alert(document.cookie)</script><script>console.log
浏览器解析时会自动补全</script>,使alert(document.cookie)在<script>标签内执行。
3. 利用全局对象存储payload
- window.name:``
- location.hash:
#document.cookie
4. 特殊字符和编码绕过
- 使用反引号代替括号:
<script>alert1</script> - 尝试各种编码方式(HTML实体、URL编码等)
防御建议
- 增强规则库:覆盖更多变体和编码方式
- 输入过滤:对特殊字符进行实体编码转义
- 输出编码:根据上下文进行适当的输出编码
- CSP策略:实施严格的内容安全策略
总结
本文详细介绍了XSS WAF规则的探测方法和绕过技术,重点包括:
- 系统化的WAF规则探测方法论
- 多种有效的绕过技术
- 实际案例中的WAF规则分析
- 针对性的防御建议
通过理解WAF的工作原理和规则结构,安全研究人员可以更有效地发现和利用漏洞,同时也能帮助开发人员构建更强大的防御机制。
扩展思考
- 自动化WAF规则探测的可能性(如XSStrike工具)
- 机器学习在WAF规则生成和绕过检测中的应用
- 不同WAF产品(如ModSecurity、Cloudflare等)的规则特点比较
注:本文所有技术内容仅用于安全研究目的,请勿用于非法用途。