【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)

 

一、CVE-2017-0199——类型:OLE对象中的逻辑漏洞

漏洞利用 OFFICEOLE 对象链接技术,将恶意链接对象嵌入在文档中,之后调用 URLMoniker 将恶意链接中的 HTA 文件下载到本地,URLMoniker 通过识别响应头中 content-type 的字段,最终调用 mshta.exe 执行 HTA 文件中的攻击代码。攻击者通过该漏洞可以控制受影响的系统,对受害者系统进行安装后门,查看、修改或删除数据,或者创建新用户。

URL Moniker 是一个 COM  对象,可以在注册表中找到其具体位置。

 

二、准备(复现过程中恢复了几次虚拟机快照,所以 IP发生了改变)

攻击机:kali-2019    192.168.75.138

靶机:win7_x86(关闭防火墙)    192.168.75.130

 

三、受影响版本

Microsoft office 2016;Microsoft office 2013;

Microsoft office 2010;Microsoft office 2007;

 

四、复现过程

1、新建一个 poc.hta 文件,一个 docx 文档,poc.hta代码如下可以打开计算器

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第1张图片

2、将 test.docx 放到 kali 网站目录下并重命名为 test.rtf,也就是放到攻击者的服务器上,或者是肉鸡服务器,都行啦。

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第2张图片

3、攻击者设置服务器 Apache 开启 DAV 支持,Web Dav 完全可以当成一个网络共享的文件服务器使用

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第3张图片

4、新建一个 testyeah.docx 作为攻击文档,插入文件链接对象,链接到服务器中的 test.rtf,点击确定耐心等待

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第4张图片

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第5张图片

链接成功显示服务器中的 test.rtf 的内容

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第6张图片

将 testyeah.docx 重命名为 testyeah.rtf 格式文件,攻击文档制作完毕,将其发送给受害人让受害人打开即可,在这里就是在靶机中打开。

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第7张图片

5、将被链接的恶意功能脚本 poc.hta 文件复制到服务器目录下重命名为 test.rtf

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第8张图片

6、修改 Apache 配置文件如下,并重启 Apache,开启 Dav 服务,由于设置了响应头中的 Content-type 为 application/hta,所以服务器返回对应文件后,word 将返回对象以 hta 脚本的方式执行——关键点

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第9张图片

7、理论上打开 testyeah.rtf ,双击其中的对象就可以弹出计算器,然而无效,艹

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第10张图片

8、别急嘛,其实是需要对攻击机的注册表进行如下修改

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第11张图片

如下为解释:

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第12张图片

再次运行 testyeah.rtf ,成功弹出计算器,注册表的这个属性导致了0199这个漏洞的危害在现实中并没有太大。。

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第13张图片

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第14张图片

>> 做过几遍用过各种系统各种版本的 office 最终都未能成功弹出计算器,就是注册表的问题,这一点大部分的复现博文都没提到,希望同行注意。

9、打开 testyeah.rtf 时的弹框如何消除呢?用记事本打开刚刚rtf文件,找到 object 标签所在的地方,把 {\object\objautlink\rsltpict 修改成:{\object\objautlink\objupdate\rsltpict ,然后再次打开 testyeah.rtf ,发现会直接弹出计算器(通过测试发现修改一次只能生效一次,关闭文档后再次打开,被修改的内容会被自动改回去 =_=)。

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第15张图片

取消弹窗的关键点在于 objupdate,这个标签的作用是可以自动更新对象,因此无需用户交互。此时已经可以达到通过 poc.hta 脚本执行任意代码的目的,至于 hta 脚本的恶意功能就是八仙过海各显神通了~

 

五、技术细节

复现完毕后再来看实现的原理:漏洞利用 OFFICEOLE 对象链接技术,将恶意链接对象嵌入在文档中,之后调用 URLMoniker 将恶意链接中的 HTA 文件下载到本地,URLMoniker 通过识别响应头中 content-type 的字段,最终调用 mshta.exe 执行 HTA 文件中的攻击代码。

用 010editor 打开 testyeah.rtf 文档,找到关键字段 objautlink

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第16张图片

该漏洞的关键点为插入的对象被定义成一个 OLE“链接”对象,继续向下看找到 Object Data对象,从“\objdata”控制字开始:“01050000”表示版本信息,“000a0000”表示数据长度,“d0cf11e0”表明这是一个 OLE 结构的流,并且是一个“链接”对象。Moniker 是一个特殊的 COM 对象,可以通过该对象寻找另外一个对象。Windows 操作系统上存在的 Moniker 有 File Moniker、Item Moniker、URL Moniker、Script Moniker等。0199 利用的漏洞为 URL Moniker 上出现的漏洞。

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第17张图片

URL Moniker 开放了 IPersistStream 接 口,IPersistStream 中的 Load() 方法可以加载“StreamData”,URL Moniker 的StdOleLink 结构会使其调用“IMoniker::BindToObject()”方法。该方法会使得进程去寻找目标对象,让它处在运行状态,提供一个该对象的特定接口指针来调用它。如果 URL 是以“http”开头,那么 URL Moniker 就会尝试从指定 URL 的服务器上下载资源,当“资源”是一个 HTA 文件时(通过响应头来判断),会通过 “mshta.exe”加载运行。这也是为什么 testyeah.rtf 连接要以 "http" 开头,并且将服务器 Apache 的配置文件中,html 目录下的文件默认识别为 hta 文件。

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第18张图片

恶意样本为了避免和用户交互,会使用 objupdate 字段来自动更新对象,当打开恶意文档时,会自动加载远程 URL 的对象,攻击者的服务器会针对受害者客户端的 HTTP 请求返回 Content-type 为 application/hta 响应,并下发 HTA 脚本(见上图修改)。

这个漏洞是由于 URL Moniker 可以通过 OLE 执行危险的 HTA 所造成的。URL Moniker 无法直接运行脚本,但是它可以找到一个 OLE 对象并使用这个对象来处理内容,当内容为 HTA 时,"htafile" OLE 对象被启动,HTA 内容里的脚本得到运行。

 

小结:

该漏洞利用 OFFICE OLE 对象链接技术,将包裹的恶意链接对象嵌在文档中,OFFICE 调用 URL Moniker(COM对象)将恶意链接指向的 HTA 文件下载到本地。

>> 具体过程是当用户打开包含嵌入式漏洞的文档时,winword.exe 会向远程服务器发出 HTTP 请求,以检索恶意 HTA 文件(因为插入的链接对象是 http://),服务器返回的文件时一个带有嵌入式恶意脚本的假 RTF 文件(已被更换),而且响应头中的 Content-Type 字段改为了 hta ,因此 winword.exe 会通过 COM 对象查找针对 application/hta 的文件处理程序,这会导致 Microsoft HTA 应用程序(mshta.exe)被自动调用,来下载并执行包含 PowerShell 命令的 Visual Basic 脚本。盗个图如下:

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第19张图片

 

六、微软针对此漏洞所进行的修复是有缺陷的

对 CVE-2017-0199,微软采用了一种“COM Activation Filter” 的机制,过程简单粗暴,修补程序封锁了两个危险的CLSID,{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}(“htafile” 对 象 ) {06290BD3-48AA-11D2-8432-006008C3FBFC}(“script” 对象)。这也导致了后续 CVE-2017-8570 的产生,具体将在另外一篇帖子中分析。

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第20张图片

【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)_第21张图片

被称为“逻辑漏洞”的关键点在于可以修改服务器配置文件,让返回的消息头将返回的恶意文件表示为 hta 文件,从而让客户端调用 mshta.exe 去执行其中的代码。

 

 

 

 

 

参考:

https://www.cnblogs.com/nayu/p/6799912.html

https://zerokeeper.com/penetration/cve20170199-office-rtf-replication-process.html

https://www.jianshu.com/p/850d1363abc5

《360——2017年度安全报告》

https://blog.csdn.net/qq_37672864/article/details/89353787

https://www.fireeye.com/blog/threat-research/2017/04/cve-2017-0199-hta-handler.html

 

你可能感兴趣的:(二进制漏洞,技术研究,CVE-2017-0199,OLE逻辑错误漏洞,漏洞复现,ole2link)