【漏洞复现】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代码如下可以打开计算器
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)相关推荐
- 【漏洞复现】Microsoft Office MSDT 远程代码执行漏洞 (CVE-2022-30190)
0x01 Microsoft Office Microsoft Office是由Microsoft(微软)公司开发的一套办公软件套装.常用组件有 Word.Excel.PowerPoint等. 0x0 ...
- 【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞
文章目录 前言 一.漏洞描述 二.漏洞复现 前言 本篇文章仅用于漏洞复现研究和学习,切勿从事非法攻击行为,切记! 一.漏洞描述 Phpstudy小皮面板存在RCE漏洞,通过分析和复现方式发现其实本质上 ...
- 【漏洞复现】XMind2020及2021beta版本存在xss漏洞导致任意代码执行
简介 XMind是一种功能齐全的思维导图和头脑风暴工具,旨在产生想法,激发创造力,并在工作和生活中带来效率.数以百万计的用户们喜欢它 漏洞(xss) XMind2020及2021beta版本存在xss ...
- CNVD-2021-49104漏洞复现(泛微E-Office文件上传漏洞)
1.漏洞检测脚本 自己写的简单检测脚本,感兴趣可以看看 CSDN 2.漏洞成因 该漏洞是由于 e-office 未能正确处理上传模块中用户输入导致的,攻击者可以构造恶意的上传数据包,实现任意代码执行. ...
- 【漏洞复现】永恒之蓝 MS17-010 远程溢出漏洞(CVE-2017-0143)
文章目录 声明 前言 一.漏洞原理简述 二.漏洞代码深层解析 三.实验步骤 四.漏洞补丁 总结 声明 本篇文章仅用于技术研究与技术学习,切勿用于非授权下攻击行为,切记! 前言 Windows7 存在 ...
- 【漏洞复现】WordPress插件Quizlord 2.0 XSS漏洞复现与分析
年后趁着需要做安全测试系统不多的这个空档,学学python到处逛逛复现复现和分析一些简单的漏洞 --from Lyricbao 0x00 复现环境 phpstudy wordpress 4.4版本 Q ...
- commons-pool2-2.3 jar包_[漏洞复现]FastJson 1.2.61远程代码执行漏洞(From第三方jar包)
前言 最近FastJson更新了黑名单,升级到了1.2.61版本,我尝试bypass其黑名单,在AutType打开的情况下成功绕过了黑名单防护.(目前暂未修复,官方即将更新) 复现环境准备 1.JDK ...
- 漏洞复现----37、Apache Unomi 远程代码执行漏洞 (CVE-2020-13942)
文章目录 一.Apache Unomi简介 二.CVE-2020-11975漏洞 2.1.CVE-2020-11975漏洞代码 2.2.CVE-2020-11975漏洞修复代码 三.CVE-2020- ...
- [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2018-16509
最新文章
- C++_STL——list(and forward_list)
- 运行cmd直接进入指定目录下的命令
- centos 磁盘扩容,新建lv
- ubuntu mysql汉字写入只写入了一个字符
- HTML与CSS基础之选择器优先级(十)
- php获取页面的可视内容高度,网页制作技巧:获取页面可视区域的高度_css
- vb.net 数据集设计器 新增列_SQLPro for MSSQL for Mac(数据库客户端)
- Ecere SDK:用于GUI和图形的跨平台工具包
- dom4j 中文api
- zookeeper使用问题汇总
- Windows开机运行程序
- Factory IO v2.5.2 Crack by Xacker
- Android 如何测试你的Base64是否正确展示
- pandas获取全部列名_pandas获取全部列名_pandas DataFrame数据重命名列名的几种方式...
- 企业部署信息安全等级保护的重要性
- sift论文_ImageNet一作邓嘉最佳论文,ECCV2020奖项全公布
- 令人眼前一亮的IDEA 2021
- 20190918爱奇艺2020校招题
- 18 款低代码平台!开发解放双手
- MYSQL 更改初始 ROOT 密码