一则有趣的XSS WAF规则探测与绕过
字数 1684 2025-08-18 11:37:53

XSS WAF规则探测与绕过技术详解

前言

本文以B站一个已修复的XSS漏洞为例,详细分析其WAF(Web应用防火墙)规则,并探讨如何通过系统化的方法探测WAF规则并实现绕过。本文内容适用于安全研究人员、渗透测试人员以及对Web安全防御机制感兴趣的技术人员。

WAF绕过基本原理

  1. WAF工作原理:WAF通常由多条正则表达式规则组成,用于检测和拦截恶意输入。
  2. 绕过核心思想
    • 使用不在WAF规则库中的payload
    • 构造初始无效但经服务器处理后生效的payload
  3. 探测方法论:从局部到整体,逐步组合测试,分析WAF拦截点。

XSS探针技术

基础探针结构

'";>ddd`

探针解析

  1. 用于测试HTML标签、属性、事件处理程序等基本元素的解析情况
  2. 在Chrome浏览器的Element和Source面板中观察探针的解析结果

WAF规则探测方法

手工探测步骤

  1. 分离测试:单独测试标签、属性、事件、函数等组成部分

    • 测试``是否被拦截
    • 测试alert(1)是否被拦截
    • 测试onerror是否被拦截
    • 测试src=x是否被拦截
  2. 逐步组合:将组件逐步组合,观察拦截点

    • `` → 未拦截
    • `` → 未拦截
    • `` → 未拦截
    • `` → 拦截
  3. 回溯分析:根据拦截点分析可能的WAF规则

    • `` → 未拦截
    • `` → 拦截
    • onerror=alert(xxxx) → 拦截

探测到的WAF规则示例

  1. 基础事件过滤

    • on\w+=(?:prompt|alert|confirm){1}$\w+$
    • <[^>]*\s+on\w+=(?:prompt|alert|confirm){1}\(\w+
  2. Script标签过滤

    • <script>.*\s(?:alert|prompt|confirm)$.*$
    • <script>[^]*document.\w+`
    • <script>[^]*document

\[\w+ \]

`

  • <script>\w+\.cookie
  • <script\s(.*\s)?src(=\w+)?>
  1. A标签过滤

    • <a\s(.*\s)?href=javascript:.*>
  2. 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编码等)

防御建议

  1. 增强规则库:覆盖更多变体和编码方式
  2. 输入过滤:对特殊字符进行实体编码转义
  3. 输出编码:根据上下文进行适当的输出编码
  4. CSP策略:实施严格的内容安全策略

总结

本文详细介绍了XSS WAF规则的探测方法和绕过技术,重点包括:

  1. 系统化的WAF规则探测方法论
  2. 多种有效的绕过技术
  3. 实际案例中的WAF规则分析
  4. 针对性的防御建议

通过理解WAF的工作原理和规则结构,安全研究人员可以更有效地发现和利用漏洞,同时也能帮助开发人员构建更强大的防御机制。

扩展思考

  1. 自动化WAF规则探测的可能性(如XSStrike工具)
  2. 机器学习在WAF规则生成和绕过检测中的应用
  3. 不同WAF产品(如ModSecurity、Cloudflare等)的规则特点比较

注:本文所有技术内容仅用于安全研究目的,请勿用于非法用途。

XSS WAF规则探测与绕过技术详解 前言 本文以B站一个已修复的XSS漏洞为例,详细分析其WAF(Web应用防火墙)规则,并探讨如何通过系统化的方法探测WAF规则并实现绕过。本文内容适用于安全研究人员、渗透测试人员以及对Web安全防御机制感兴趣的技术人员。 WAF绕过基本原理 WAF工作原理 :WAF通常由多条正则表达式规则组成,用于检测和拦截恶意输入。 绕过核心思想 : 使用不在WAF规则库中的payload 构造初始无效但经服务器处理后生效的payload 探测方法论 :从局部到整体,逐步组合测试,分析WAF拦截点。 XSS探针技术 基础探针结构 ' ";> ddd ` 探针解析 用于测试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示例 : 2. 标签拼接绕过 利用响应包拼接构造有效payload: Payload结构 : 实际应用 : 浏览器解析时会自动补全 </script> ,使 alert(document.cookie) 在 <script> 标签内执行。 3. 利用全局对象存储payload window.name : `` location.hash : #document.cookie 4. 特殊字符和编码绕过 使用反引号代替括号: <script>alert 1 </script> 尝试各种编码方式(HTML实体、URL编码等) 防御建议 增强规则库 :覆盖更多变体和编码方式 输入过滤 :对特殊字符进行实体编码转义 输出编码 :根据上下文进行适当的输出编码 CSP策略 :实施严格的内容安全策略 总结 本文详细介绍了XSS WAF规则的探测方法和绕过技术,重点包括: 系统化的WAF规则探测方法论 多种有效的绕过技术 实际案例中的WAF规则分析 针对性的防御建议 通过理解WAF的工作原理和规则结构,安全研究人员可以更有效地发现和利用漏洞,同时也能帮助开发人员构建更强大的防御机制。 扩展思考 自动化WAF规则探测的可能性(如XSStrike工具) 机器学习在WAF规则生成和绕过检测中的应用 不同WAF产品(如ModSecurity、Cloudflare等)的规则特点比较 注:本文所有技术内容仅用于安全研究目的,请勿用于非法用途。