使用Sboxr实现DOM XSS漏洞的自动挖掘与利用
字数 2920 2025-08-18 11:38:28

DOM XSS漏洞的自动挖掘与利用:基于Sboxr的实践指南

1. DOM XSS概述

1.1 定义与特点

DOM XSS(Document Object Model Cross-Site Scripting)是一种特殊类型的XSS漏洞,其特点包括:

  • 完全在客户端执行,不依赖于服务器端处理
  • 基于文档对象模型(DOM)操作产生的漏洞
  • 常见于JavaScript富应用(单页应用等)
  • 传统扫描工具难以检测

1.2 与常规XSS的区别

特征 DOM XSS 传统XSS
执行位置 纯客户端 服务端+客户端
检测难度 较高 相对较低
依赖因素 DOM操作 服务端输出
触发方式 无需刷新页面 可能需要页面刷新

1.3 常见漏洞源

  • location对象相关属性(hash, search等)
  • document.referrer
  • window.name
  • 本地存储(localStorage, sessionStorage)
  • 客户端数据库操作结果

2. Sboxr工具介绍

2.1 核心功能

Sboxr是一个专门用于测试JavaScript富应用的动态分析工具,主要功能包括:

  • 监控JavaScript执行流程
  • 追踪用户可控数据的传播路径(源到接收器)
  • 识别潜在的代码执行点
  • 提供详细的执行上下文分析

2.2 工作原理

  1. 作为中间人代理运行
  2. 注入DOM传感器代码到目标页面
  3. 监控以下内容:
    • JavaScript使用情况
    • 数据源和接收器
    • 变量赋值
    • 函数调用链

2.3 系统要求

  • 操作系统:Windows/Linux(本文基于Ubuntu 18.04)
  • 运行时:.NET Core SDK
  • 浏览器:Chrome(本文使用72版本)

3. 环境搭建

3.1 安装步骤

  1. 安装.NET Core SDK

    • Linux(Ubuntu):
      # 参考 https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current
      wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
      sudo dpkg -i packages-microsoft-prod.deb
      sudo apt-get update
      sudo apt-get install dotnet-sdk-3.1
      
    • Windows:
      • 从 https://dotnet.microsoft.com/download 下载安装
  2. 获取Sboxr

    • 从官网 https://sboxr.com 下载
    • 解压后得到Sboxr.dll文件
  3. 启动Sboxr

    dotnet Sboxr.dll
    
    • Web管理界面:http://localhost:3333
    • 代理端口:3331

3.2 浏览器配置

由于Sboxr不支持SOCKS代理,需特殊配置Chrome:

Linux配置:

mkdir -p ~/.chrome
/opt/google/chrome/chrome -incognito \
--ignore-certificate-errors \
--proxy-server=http=http://localhost:3331\;https=http://localhost:3331 \
--user-data-dir=~/.chrome

Windows配置:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -incognito \
--ignore-certificate-errors \
--proxy-server=http=http://localhost:3331;https=http://localhost:3331 \
--user-data-dir="C:\Users\%Username%\AppData\Local\Temp\TestChromeProxy"

3.3 代理链配置(可选)

如需结合Burp或OWASP ZAP:

  1. 访问 http://localhost:3333/console
  2. 在"HTTP Sensor"设置中配置上游代理
    • 输入Burp/ZAP的IP和端口

4. 漏洞挖掘实战

4.1 练习1:基于location.hash的XSS

漏洞分析:

  1. 访问 https://domgo.at/cxss/example/1
  2. Sboxr检测流程:
    • 数据源location.hash
    • 接收器HTMLElement.innerHTML
    • 执行路径:用户控制的hash值未经处理直接赋值给innerHTML

验证步骤:

  1. 构造恶意URL:
    https://domgo.at/cxss/example/1#<svg onload=alert(document.domain)>
    
  2. URL编码后:
    https://domgo.at/cxss/example/1#%3Csvg%20onload%3Dalert(document.domain)%3E
    
  3. 访问后触发XSS弹窗

Sboxr分析要点:

  • 在Code Execution面板查看执行链
  • 通过"View event location details"查看具体代码位置
  • 确认数据从源到接收器的完整传播路径

4.2 练习2:基于document.referrer的XSS

漏洞分析:

  1. 访问流程必须通过重定向(直接访问无效)
  2. 关键因素:
    • 数据源document.referrer
    • 接收器:参数解析后的innerHTML赋值
    • 特殊要求:必须从包含payload参数的页面跳转过来

利用步骤:

  1. 创建恶意HTML文件(exercise2.html):
    <html>
    <body>
      <h2>PoC for Exercise 2</h2>
      <script>
        window.location="https://domgo.at/cxss/example/2?payload=<svg onload=alert(document.domain)>"
      </script>
    </body>
    </html>
    
  2. 本地托管该文件(可用Python快速搭建):
    python3 -m http.server 80
    
  3. 访问 http://localhost/exercise2.html
  4. 自动跳转后触发XSS

关键注意点:

  • 必须通过页面跳转触发,直接修改Referer头无效
  • payload需要URL编码:
    window.location="https://domgo.at/cxss/example/2?payload=%3Csvg%20onload%3Dalert(document.domain)%3E"
    

5. 高级技巧与最佳实践

5.1 Sboxr使用技巧

  1. 敏感源监控清单

    • location对象所有属性
    • document.cookie
    • window.name
    • 存储API(localStorage/sessionStorage)
    • Web数据库操作结果
  2. 危险接收器清单

    • innerHTML/outerHTML
    • document.write/document.writeln
    • eval/setTimeout/setInterval(含字符串参数)
    • Function构造函数
    • location赋值操作
  3. 数据分析方法

    • 使用"View Code Execution"追踪完整链条
    • 关注从源到接收器的每个处理环节
    • 特别注意编码/解码操作

5.2 漏洞利用开发

  1. PoC构造原则

    • 优先使用<svg onload=alert(1)>而非传统<script>
    • 考虑上下文限制(HTML/JS/URL等)
    • 测试多种编码方式绕过可能的过滤
  2. 常见绕过技巧

    // 大小写混淆
    <ScRiPt>alert(1)</ScRiPt>
    
    // 编码绕过
    
    
    // 利用JavaScript伪协议
    javascript:alert(document.domain)
    
    // 利用SVG事件
    <svg/onload=alert(1)>
    

5.3 防御建议

  1. 输入处理

    • 对所有不可信数据实施严格的输出编码
    • 根据上下文使用合适的编码函数:
      • HTML实体编码:&lt;<
      • JavaScript编码:\x3cscript\x3e
      • URL编码:%3Cscript%3E
  2. 安全API使用

    • 使用textContent代替innerHTML
    • 使用addEventListener而非内联事件处理
    • 避免将用户输入直接传递给eval()等动态执行函数
  3. 内容安全策略(CSP)

    Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline'
    

6. 扩展资源

  1. 官方文档

    • Sboxr官网:https://sboxr.com
    • OWASP DOM XSS:https://www.owasp.org/index.php/DOM_Based_XSS
  2. 练习平台

    • DOMGOAT靶场:https://domgo.at
    • Appsecco解决方案:https://appsecco.com/books/
  3. 相关工具

    • Burp Suite DOM Invader
    • OWASP ZAP DOM XSS扫描插件
    • Chrome DevTools调试技巧

7. 总结

本文详细介绍了使用Sboxr工具进行DOM XSS漏洞挖掘的完整流程,涵盖环境搭建、工具配置、漏洞分析和利用开发等关键环节。通过两个实际案例演示了从检测到验证的全过程,并提供了防御建议和进阶技巧。DOM XSS作为客户端安全的重要威胁,需要测试人员深入理解JavaScript执行环境和DOM操作机制,而Sboxr为此类漏洞的发现提供了强有力的支持。

DOM XSS漏洞的自动挖掘与利用:基于Sboxr的实践指南 1. DOM XSS概述 1.1 定义与特点 DOM XSS(Document Object Model Cross-Site Scripting)是一种特殊类型的XSS漏洞,其特点包括: 完全在客户端执行,不依赖于服务器端处理 基于文档对象模型(DOM)操作产生的漏洞 常见于JavaScript富应用(单页应用等) 传统扫描工具难以检测 1.2 与常规XSS的区别 | 特征 | DOM XSS | 传统XSS | |-------------|-------------------|----------| | 执行位置 | 纯客户端 | 服务端+客户端 | | 检测难度 | 较高 | 相对较低 | | 依赖因素 | DOM操作 | 服务端输出 | | 触发方式 | 无需刷新页面 | 可能需要页面刷新 | 1.3 常见漏洞源 location 对象相关属性(hash, search等) document.referrer window.name 本地存储(localStorage, sessionStorage) 客户端数据库操作结果 2. Sboxr工具介绍 2.1 核心功能 Sboxr是一个专门用于测试JavaScript富应用的动态分析工具,主要功能包括: 监控JavaScript执行流程 追踪用户可控数据的传播路径(源到接收器) 识别潜在的代码执行点 提供详细的执行上下文分析 2.2 工作原理 作为中间人代理运行 注入DOM传感器代码到目标页面 监控以下内容: JavaScript使用情况 数据源和接收器 变量赋值 函数调用链 2.3 系统要求 操作系统:Windows/Linux(本文基于Ubuntu 18.04) 运行时:.NET Core SDK 浏览器:Chrome(本文使用72版本) 3. 环境搭建 3.1 安装步骤 安装.NET Core SDK Linux(Ubuntu): Windows: 从 https://dotnet.microsoft.com/download 下载安装 获取Sboxr 从官网 https://sboxr.com 下载 解压后得到 Sboxr.dll 文件 启动Sboxr Web管理界面:http://localhost:3333 代理端口:3331 3.2 浏览器配置 由于Sboxr不支持SOCKS代理,需特殊配置Chrome: Linux配置: Windows配置: 3.3 代理链配置(可选) 如需结合Burp或OWASP ZAP: 访问 http://localhost:3333/console 在"HTTP Sensor"设置中配置上游代理 输入Burp/ZAP的IP和端口 4. 漏洞挖掘实战 4.1 练习1:基于location.hash的XSS 漏洞分析: 访问 https://domgo.at/cxss/example/1 Sboxr检测流程: 数据源 : location.hash 接收器 : HTMLElement.innerHTML 执行路径:用户控制的hash值未经处理直接赋值给innerHTML 验证步骤: 构造恶意URL: URL编码后: 访问后触发XSS弹窗 Sboxr分析要点: 在Code Execution面板查看执行链 通过"View event location details"查看具体代码位置 确认数据从源到接收器的完整传播路径 4.2 练习2:基于document.referrer的XSS 漏洞分析: 访问流程必须通过重定向(直接访问无效) 关键因素: 数据源 : document.referrer 接收器 :参数解析后的innerHTML赋值 特殊要求:必须从包含payload参数的页面跳转过来 利用步骤: 创建恶意HTML文件(exercise2.html): 本地托管该文件(可用Python快速搭建): 访问 http://localhost/exercise2.html 自动跳转后触发XSS 关键注意点: 必须通过页面跳转触发,直接修改Referer头无效 payload需要URL编码: 5. 高级技巧与最佳实践 5.1 Sboxr使用技巧 敏感源监控清单 : location 对象所有属性 document.cookie window.name 存储API(localStorage/sessionStorage) Web数据库操作结果 危险接收器清单 : innerHTML / outerHTML document.write / document.writeln eval / setTimeout / setInterval (含字符串参数) Function 构造函数 location 赋值操作 数据分析方法 : 使用"View Code Execution"追踪完整链条 关注从源到接收器的每个处理环节 特别注意编码/解码操作 5.2 漏洞利用开发 PoC构造原则 : 优先使用 <svg onload=alert(1)> 而非传统 <script> 考虑上下文限制(HTML/JS/URL等) 测试多种编码方式绕过可能的过滤 常见绕过技巧 : 5.3 防御建议 输入处理 : 对所有不可信数据实施严格的输出编码 根据上下文使用合适的编码函数: HTML实体编码: &lt; → < JavaScript编码: \x3cscript\x3e URL编码: %3Cscript%3E 安全API使用 : 使用 textContent 代替 innerHTML 使用 addEventListener 而非内联事件处理 避免将用户输入直接传递给 eval() 等动态执行函数 内容安全策略(CSP) : 6. 扩展资源 官方文档 : Sboxr官网:https://sboxr.com OWASP DOM XSS:https://www.owasp.org/index.php/DOM_ Based_ XSS 练习平台 : DOMGOAT靶场:https://domgo.at Appsecco解决方案:https://appsecco.com/books/ 相关工具 : Burp Suite DOM Invader OWASP ZAP DOM XSS扫描插件 Chrome DevTools调试技巧 7. 总结 本文详细介绍了使用Sboxr工具进行DOM XSS漏洞挖掘的完整流程,涵盖环境搭建、工具配置、漏洞分析和利用开发等关键环节。通过两个实际案例演示了从检测到验证的全过程,并提供了防御建议和进阶技巧。DOM XSS作为客户端安全的重要威胁,需要测试人员深入理解JavaScript执行环境和DOM操作机制,而Sboxr为此类漏洞的发现提供了强有力的支持。