【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

 

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

原理:该漏洞利用复合 Moniker 绕过了 CVE-2017-0199 的补丁针对 Script Moniker 和 URL Moniker 相关 classid 的拦截。CVE-2017-0199 和 CVE-2017-8570 复杂就复杂在 Composite Moniker。Moniker 绑定指定的对象时,必须要为调用者提供指向所标识对象指定接口的指针。这个过程是通过 IMoniker::BindToObject() 方法实现的:

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

绑定“新”Moniker 时,通过“pmkToLeft”参数获得 Left 名字。在这种情况下,mk 是 File Moniker。之前针对 0199 是*了“htafile”对象和“script”对象,而 CVE-2017-8570 利用了一个其他的对象:“scriptletfile”,CLSID 是“{06290BD2-48AA-11D2-8432-006008C3FBFC}”,从而绕过了 CVE-2017-0199 的补丁。

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

关于 CVE-2017-0199 请移步:https://blog.csdn.net/Cody_Ren/article/details/103857646

 

二、准备

攻击机:kali-2019    192.168.75.146

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

ppsx 格式是 Office 2007 中 PowerPoint 的一种文件格式,始终在幻灯片放映视图打开的演示文稿。(在本漏洞复现中采用ppsx有利于确保目标机用户只要一打开该文件,就会出现播放动画状态,从而**该对象执行 sct 脚本)

 

三、复现过程(注意 postgresql 数据库的开启以及初始化)

1、下载 exp,创建 template 目录,生成 Invoice.ppsx

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

2、生成用来反弹 shell 的 shell.exe,生成时间有点长,耐心等,靶机为 32 位的话,需要将 /x64 去掉

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

3、生成监听模式,监听来自 ppsx 执行反弹 shell(这里会自动启动 80 端口)

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

4、打开 msf ,开启 msf 监听,同样靶机为 32 位的话将 /x64 去掉

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

5、在靶机中打开 Invoice.ppsx 文件,可以看到一闪而过的 powershell.exe 窗口,攻击机窗口中可以看到接收到了消息返回。然而 msf 并未 getshell ,wtf ??

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

6、重新做了几遍,尝试了下在进行第 4 步之前,首先将postgresql 数据库开启,然后将数据库初始化一下,再次在靶机中运行 ppsx,发现 getshell 成功。

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

【漏洞复现】Moniker禁用绕过漏洞(CVE-2017-8570)

 

>> 有时候 getshell 速度比较慢,可以尝试多执行几次 msfdb init ,再一个 getshell 时由于向靶机发送的数据包比较大,根据网络延迟情况,需要耐心等等。