如何构造Office漏洞POC

自FireFye检测并发布以来我一直在研究这个漏洞,在微软正式发布补丁后我决定发布这个PoC。我的利用方式可能与其他研究人员的利用方法不同这个利用方法可能会更轻松┅点。

使用任意随机内容在Winword中创建一个简单的RTF文档(在例子中,我使用字符串来作为我的内容)

将这2个文件发送到被我们完全控制的网絡服务器上我们假定它将被存储在/var/www/html中。

现在我们必须配置Apache才能将ms.rtf作为一个链接配置Apache:

单击确定后,我们将获得只包含随机字符串内容嘚“ms.rtf”文件将该文件保存为“ exploit.rtf ”。

在这一步我们可以关闭Winword并转到下一步改变ms.rtf的内容与HTA有效载荷…

更改自定义HTA有效载荷中包含的ms.rtf

Web服务器將发送“application/hta”的内容类型…这将由Winword客户端解析,它将运行mshta来处理这个内容类型并执行我们的有效载荷

在这一步如果用户打开“exploit.rtf”文件了,怹必须要双击链接对象来启动攻击…

如果我们希望在文档开头时自动加载OLE对象我们必须编辑更改exploit.rtf文件:

在这个步骤中,我们成功的构建叻exploit

我们可以不用关心警告了,因为代码已经执行了

CVE-被成功利用了, 执行后发出警告

从我的个人测试来看这种方法似乎没有被AV捕获(Defender巳经有CVE-的签名),此外目前发布的yara规则与此漏洞利用率不匹配。

确实urlmoniker不匹配,这将永远不会触发这个yara规则

}

本文从2019UNCTF里的一道有意思的逆向题目奇妙的RTF入手对Office2017年的CVE-进行调试分析,题目文件我放在附件中需要的师傅可以下载学习,如果你完全不懂Office漏洞这篇文章还是可以帮助伱打开Office漏洞的面纱,首先我会讲一下身为一个完全不懂office的人如何做出这道题目的然后在对漏洞的Poc本身进行分析,其原理十分简单本文嘚调试环境是

首先题目给我们一个压缩包,解压之后提示我们用Office打开既然是2017年的,那肯定之前的版本都没有进行修复所以这里选择安裝office2007,然而我们打开什么也没发现

对于一个不了解office结构的二进制选手肯定想着先把他放进二进制编辑器中观察,显示如下前面这些内容應该是office特有的格式

不懂office的话那怎么办呢?当然是百度呀直接百度第一行的内容,下面就有显示相关的漏洞信息所以我们初步确定漏洞編号CVE-

这里用rtfobj工具查看office文件的各种属性,发现各种属性和百度搜索中的文字完全一样再次确定漏洞编号CVE-,工具下载地址 =>

通过阅读我们可鉯得到漏洞存在于EQNEDT21.EXE公式编辑器的sub_41160F函数中,我们将其拖进IDA找到漏洞点,可以看到

伪代码如下这里没有对长度进行检验就直接进行复制操莋,而这个a1参数是我们可以控制的所以本质上就可能产生一个栈溢出漏洞

我们静态分析出了漏洞的编号,漏洞的位置那么动态调试就仳较方便了,从网上的各种文章来看因为Poc都是有弹计算器的,所以它们都是直接在弹计算器函数或者创建线程的函数处下断点然而这裏并没有直接弹计算器,所以我们选择直接在漏洞函数下断点我们直接用Windbg在程序启动时附加即可,因为是程序启动时附加所以我们需偠设置注册表:

接下来我们直接运行程序就会由Windbg接管,我们在IDA中找到漏洞函数的位置下断即可这里我们直接在返回地址下断,也就是bp 0x411874峩们第一次运行发现这里并没有对返回地址进行覆盖

继续运行,这一次覆盖了返回地址到了shellcode部分

继续单步进入ecx,发现一堆异或的操作

我們把异或在eax的结果记录下来

解码一下即可得到flag

前面是解题过程这次我们来分析一下具体的poc,首先我们从获得弹计算器的样本我们这次茬函数开始的地方下断点,观察参数

接着我们运行直到拷贝函数覆盖返回地址这里直接被覆盖为调用计算器函数

漏洞原理很简单,这里峩们继续深入分析一下我们同样用rtfobj来分析样本

上图这个命令会从RTF文件中提取所有对象,下图的命令可以查看dump出的bin文件的各种属性的信息

峩们用二进制编辑器打开dump出来的bin文件找到下面的片断,这里就是我们分析的关键点也就是上图分析得到的 Equation Native 数据流

看不懂没关系,下面峩们来分析一下结构 Equation Native 由几个成员组成

其结构对应在二进制编辑器中就是下图红框的值

接下来就是 MTEF header 的结构,里面存放一些版本信息

其结构對应在二进制编辑器中就是下图红框的值

0

这里我们主要关注的是其中的 FONT 结构也就是漏洞点,结构如下

其结构对应在二进制编辑器中就是丅图红框的值

分析完结构利用就很明显了,我们找到偏移之后只需要把最后返回地址修改为我们的shellcode地址即可网上Poc大多数是用python实现的,唎如师傅Poc的一些步骤:

# python实现对各个部件的构造

从代码角度修复那就是在拷贝函数之前加上一个判断判断字体名长度是否在合法区间内从洏阻止溢出,从用户角度而言修复方案是比较简单的有下面几个方法

  1. 直接在微软官网下载安装包:
  2. 开启自动更新,更新到最新版本
  3. 由于該公式编辑器已经17年未做更新可能存在大量安全漏洞,建议在注册表中取消该模块的注册按下Win+R组合键,打开cmd.exe输入以下两条命令:

[+] 四維创智分析文章:

}

我要回帖

更多关于 漏洞单 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信