用到的靶机为:WinXP
漏洞原理:
一、漏洞触发机制与核心组件
漏洞根源:RTF文件解析逻辑缺陷
触发组件:Microsoft Word的RTF(Rich Text Format)解析引擎,具体涉及 mso.dll 模块中的
路径规范化函数(如 pfragments 相关函数)。
漏洞触发条件:当用户打开包含超长控制字属性字符串的RTF文件时,Word未对输入数据长度进行
验证,直接将数据复制到固定大小的栈缓冲区中,导致溢出。
关键控制字与数据构造
恶意RTF结构:攻击者在RTF文件中插入 {\*\pnfragments 等控制字,并设置超长的 属性字符串
(如字体名称或路径参数)。例如:{\rtf1\ansi{\*\pnfragments XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}}
溢出触发点: pnfragments 控制字对应的属性字符串长度超过栈缓冲区容量(通常为64-128字
节),引发栈溢出。
二、内存破坏原理与利用技术
栈缓冲区溢出过程
栈空间分配:在解析RTF文件时,函数 sub_XXXXX (位于 mso.dll )会在栈上分配固定大小的缓冲区(如 0x00123E98 至 0x0012FFFF )。当输入数据长度超过此范围时,溢出覆盖相邻内存区域。
关键寄存器覆盖:
返回地址覆盖:溢出数据覆盖栈中保存的 EIP (指令指针),指向攻击者预设的地址(如 JMP
ESP 指令地址)。
SEH链劫持:若溢出未直接覆盖返回地址,可能通过覆盖 结构化异常处理链(SEH) 中的异常处理函数指针,触发异常后跳转至Shellcode。
Shellcode布局与执行
内存布局操控:攻击者通过插入NOP雪橇( 0x90 指令)和跳转指令,确保溢出后的控制流准确跳
转到Shellcode区域。
载荷注入方式:
直接嵌入:将Shellcode编码为十六进制字符串插入RTF文件。
远程加载:通过 data: 协议或恶意URL动态加载Shellcode,例如:
html <iframe src="data:text/html;base64,XXXXXXXXXXXX"></iframe>
三、影响范围与历史危害
1. 受影响版本
操作系统:Windows XP SP3、Windows Server 2003、Vista、7。
Office版本:Office 2003 SP3、2007 SP2、2010、Mac版Office 2004-2011。
2. 实际攻击案例
大规模挂马攻击:2010-2011年,MS10-087被集成至“黑页”攻击链,全球超过50%的挂马网站利用
此漏洞传播木马。
APT攻击载体:高级持续性威胁(APT)组织利用该漏洞投递恶意文档,窃取政府及企业数据。
四、防御与修复措施
1. 官方补丁分析
补丁编号:KB2423930(MS10-087)修复了 mso.dll 中的路径处理逻辑,增加输入长度校验并重
构栈缓冲区分配策略。
补丁验证方法:使用 Bindiff 对比补丁前后DLL文件,可发现关键函数(如
CanonicalizePathName )的指令修改。
2. 临时缓解方案
禁用RTF解析:通过组策略禁用Word的RTF文件解析功能(设置路径:
HKCU\Software\Microsoft\Office\...\Word\Security )。
启用防护机制:强制启用DEP(Data Execution Prevention)和Office沙箱(Protected View)。
3. 网络与终端防护
流量监控:检测HTTP/邮件流量中异常的 pnfragments 控制字或超长属性字符串。
行为分析:监控 winword.exe 进程的异常栈操作或Shellcode执行行为。
详细步骤:
1.执行msfconsole。









