一、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代码如下可以打开计算器

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

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

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

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

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

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

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

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

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

如下为解释:

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

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

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

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

五、技术细节

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

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

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

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 文件。

恶意样本为了避免和用户交互,会使用 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 脚本。盗个图如下:

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

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

被称为“逻辑漏洞”的关键点在于可以修改服务器配置文件,让返回的消息头将返回的恶意文件表示为 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

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

  1. 【漏洞复现】Microsoft Office MSDT 远程代码执行漏洞 (CVE-2022-30190)

    0x01 Microsoft Office Microsoft Office是由Microsoft(微软)公司开发的一套办公软件套装.常用组件有 Word.Excel.PowerPoint等. 0x0 ...

  2. 【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞

    文章目录 前言 一.漏洞描述 二.漏洞复现 前言 本篇文章仅用于漏洞复现研究和学习,切勿从事非法攻击行为,切记! 一.漏洞描述 Phpstudy小皮面板存在RCE漏洞,通过分析和复现方式发现其实本质上 ...

  3. 【漏洞复现】XMind2020及2021beta版本存在xss漏洞导致任意代码执行

    简介 XMind是一种功能齐全的思维导图和头脑风暴工具,旨在产生想法,激发创造力,并在工作和生活中带来效率.数以百万计的用户们喜欢它 漏洞(xss) XMind2020及2021beta版本存在xss ...

  4. CNVD-2021-49104漏洞复现(泛微E-Office文件上传漏洞)

    1.漏洞检测脚本 自己写的简单检测脚本,感兴趣可以看看 CSDN 2.漏洞成因 该漏洞是由于 e-office 未能正确处理上传模块中用户输入导致的,攻击者可以构造恶意的上传数据包,实现任意代码执行. ...

  5. 【漏洞复现】永恒之蓝 MS17-010 远程溢出漏洞(CVE-2017-0143)

    文章目录 声明 前言 一.漏洞原理简述 二.漏洞代码深层解析 三.实验步骤 四.漏洞补丁 总结 声明 本篇文章仅用于技术研究与技术学习,切勿用于非授权下攻击行为,切记! 前言 Windows7 存在 ...

  6. 【漏洞复现】WordPress插件Quizlord 2.0 XSS漏洞复现与分析

    年后趁着需要做安全测试系统不多的这个空档,学学python到处逛逛复现复现和分析一些简单的漏洞 --from Lyricbao 0x00 复现环境 phpstudy wordpress 4.4版本 Q ...

  7. commons-pool2-2.3 jar包_[漏洞复现]FastJson 1.2.61远程代码执行漏洞(From第三方jar包)

    前言 最近FastJson更新了黑名单,升级到了1.2.61版本,我尝试bypass其黑名单,在AutType打开的情况下成功绕过了黑名单防护.(目前暂未修复,官方即将更新) 复现环境准备 1.JDK ...

  8. 漏洞复现----37、Apache Unomi 远程代码执行漏洞 (CVE-2020-13942)

    文章目录 一.Apache Unomi简介 二.CVE-2020-11975漏洞 2.1.CVE-2020-11975漏洞代码 2.2.CVE-2020-11975漏洞修复代码 三.CVE-2020- ...

  9. [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2018-16509

最新文章

  1. C++_STL——list(and forward_list)
  2. 运行cmd直接进入指定目录下的命令
  3. centos 磁盘扩容,新建lv
  4. ubuntu mysql汉字写入只写入了一个字符
  5. HTML与CSS基础之选择器优先级(十)
  6. php获取页面的可视内容高度,网页制作技巧:获取页面可视区域的高度_css
  7. vb.net 数据集设计器 新增列_SQLPro for MSSQL for Mac(数据库客户端)
  8. Ecere SDK:用于GUI和图形的跨平台工具包
  9. dom4j 中文api
  10. zookeeper使用问题汇总
  11. Windows开机运行程序
  12. Factory IO v2.5.2 Crack by Xacker
  13. Android 如何测试你的Base64是否正确展示
  14. pandas获取全部列名_pandas获取全部列名_pandas DataFrame数据重命名列名的几种方式...
  15. 企业部署信息安全等级保护的重要性
  16. sift论文_ImageNet一作邓嘉最佳论文,ECCV2020奖项全公布
  17. 令人眼前一亮的IDEA 2021
  18. 20190918爱奇艺2020校招题
  19. 18 款低代码平台!开发解放双手
  20. MYSQL 更改初始 ROOT 密码

热门文章

  1. 怎么把视频的多个片段分割出来?快速分割视频的方法
  2. CSMA/CD最大/最小帧长 争用期
  3. 专攻心脑疾病AI市场,数坤科技完成创世伙伴领投2亿元B轮融资
  4. 为什么程序员一定要会用Google和Stack Overflow?
  5. python PIL 图片素描化
  6. 没密码?巧用工具帮你破解压缩包文件
  7. inherit和initial:两个特殊的css值
  8. linux下安装teamviewer方法
  9. Hexagon DSP SDK简介与HVX扩展(2)编译
  10. 解决Access denied for user ''@'localhost' to database 'mysql