国产精品资源网在线观看,国产美女主播,国产精品1024,国产一级做a爱片久久毛片a,欧美大片在线,亚洲一区二区三区免费

人工客服

獲取報價

獲取資料

方案定制

項目合作

售后服務(wù)

咨詢熱線

400-608-6677 轉(zhuǎn)810
返回頂部

您的位置:首頁 - 無人機反制

Windows VBScript引擎遠程執(zhí)行代碼漏洞 之CVE-2018-8373分析與復(fù)現(xiàn)

2019-03-26 2377 神州明達-小明

一、 漏洞簡介
 
VBScript引擎處理內(nèi)存中對象的方式中存在一個遠程執(zhí)行代碼漏洞。該漏洞可能以一種攻擊者可以在當前用戶的上下文中執(zhí)行任意代碼的方式來破壞內(nèi)存。成功利用此漏洞的攻擊者可以獲得與當前用戶相同的用戶權(quán)限。如果當前用戶使用管理用戶權(quán)限登錄,則成功利用此漏洞的攻擊者可以控制受影響的系統(tǒng)。然后攻擊者可以安裝程序; 查看,更改或刪除數(shù)據(jù); 或創(chuàng)建具有完全用戶權(quán)限的新帳戶。
 
在基于Web的攻擊情形中,攻擊者能通過Internet Explorer利用此漏洞的特定網(wǎng)站,然后誘使用戶查看該網(wǎng)站。攻擊者還可以在承載IE呈現(xiàn)引擎的應(yīng)用程序或Microsoft Office文檔中嵌入標記為“安全初始化”的ActiveX控件。攻擊者還可以利用受到破壞的網(wǎng)站和接受或托管用戶提供的內(nèi)容或廣告的網(wǎng)站。這些網(wǎng)站可能包含可能利用此漏洞的特制內(nèi)容。
 
2018年8月14日,微軟發(fā)布了安全補丁,影響流行的大部分系統(tǒng)版本。
 

 
三、 漏洞原理
 
由于樣本混淆嚴重,部分代碼見圖1,這里采用簡化POC進行分析,代碼見圖2。
 


圖1 樣本采用了嚴重混淆

 


圖2 Crash Poc

 
Crash PoC定義了MyClass類、一個array的成員變量和兩個成員函數(shù):Class_Initialize 與Default Property Get P。Class_Initialize 是一種被棄用的方法,現(xiàn)在已經(jīng)被新的過程所替代。當對象初始化的時候,會被自動喚醒。在PoC中,Class_Initialize 是重載的,當調(diào)用 VBScriptClass::InitializeClass時,處理的是重載的函數(shù)。
 
MyClass:通過new進行創(chuàng)建并賦值給指定變量cls,該操作首先會觸發(fā)類的創(chuàng)建以及初始化,創(chuàng)建類的函數(shù)由vbscript!VBScriptClass::Create函數(shù)完成;
 

 
創(chuàng)建類成功后則會調(diào)用vbscript!VBScriptClass::InitializeClass函數(shù)對class的內(nèi)容進行初始化;
 

 
在vbscript!VAR::IsFunction函數(shù)中獲取class指針;
 

 
隨后調(diào)用class的虛函數(shù)vbscript!CScriptEntryPoint::Call 進行初始化,最終的調(diào)用棧如下:
 

 
vbscript!CScriptRunTime::RunNoEH負責對編譯后的vbs代碼進行解釋執(zhí)行。這里執(zhí)行類的初始化操作,主要包含了array數(shù)組的定義以及Class_Initialize函數(shù)的執(zhí)行。
 
vbscript中創(chuàng)建數(shù)組的函數(shù)為vbscript!MakeArray,如下:
 

 
ReDim array(2):會調(diào)用vbscript!MakeArray來創(chuàng)建元素數(shù)是3的數(shù)組,如下圖:
 

 
cls.array(2):調(diào)用vbscript!Accessarray來獲取數(shù)組元素的地址。在vbscript!Accessarray 中,首先會檢查數(shù)組元素的索引是否越界,然后計算元素的地址,保存到棧中。
 

 
將元素的地址保存到堆棧上,保存array(2)= 0x12ae6ff0地址到棧上
 
cls.array(2)=cls:調(diào)用vbscript!AssignVar來設(shè)置MyClass的默認屬性值為 cls.array(2)。獲取MyClass的默認屬性值后,會調(diào)用Public Default Property Get P并執(zhí)行Public Default Property Get P中的ReDim array(1),釋放了原來的pvData。
 

 
ReDim Preserve array(1):重置array內(nèi)存的操作實際通過函數(shù)RedimPreserveArray實現(xiàn),最終會調(diào)用SafeArrayRedim可以看到array對象的pvData已經(jīng)被修改為0x0818afe0,之前的pvData(0x12ae6fd0)的內(nèi)存地址已經(jīng)被釋放,包括之前保存在棧上的0x12ae6ff0。
 

 
array(2)的地址仍然保存在棧中, Public Default Property Get P 的返回值會訪問釋放的內(nèi)存,最終導(dǎo)致UAF漏洞。
 
四、 EXP調(diào)試分析
 
調(diào)試方法同Crash PoC,跟蹤分析如何將二維數(shù)組修改長度為0x0FFFFFFF,如何實現(xiàn)任意內(nèi)存讀寫以及如何偽造CONTEXT結(jié)構(gòu)來執(zhí)行Shellcode。
 
漏洞定義了兩個數(shù)組,array1和array2。array1就是前面PoC中描述的數(shù)組,array2是一個二維數(shù)組,其中每個元素的值都是3。然后使用腳本回調(diào)函數(shù)DefaultPropertyGet釋放原來的array1.pvData,設(shè)置array2為新的array1.pvData。因為原來array1.pvData的大小和array2.SAFEARRAY結(jié)構(gòu)是相同的,在內(nèi)存中是0x30字節(jié)。array2.SAFEARRAY結(jié)構(gòu)將重用原始array1.pvData中釋放的內(nèi)存。同時,DefaultPropertyGet的返回值0x0FFFFFFFF會覆蓋array2.SAFEARRAY的結(jié)構(gòu)SAFEARRAYBOUND,并修改二維數(shù)組的長度為0x0FFFFFFF。
 

 
修改二維數(shù)組的長度為0x0FFFFFFF
 

 

 
將array(index_vul)(index_a, 0)設(shè)置為“AAAA”,使下個array2的Data域就變成了8,因為string的VarType類型為8,這樣就得到了一組可以混淆的 array(index_vul)(index_a+n, 0)和array(index_b)(0, n),通過將array(index_vul)(index_a, 0)處的variant 轉(zhuǎn)化為長整型,令array(index_vul)(index_a, 0)處的variant轉(zhuǎn)化為數(shù)組,從而得到了一段泄露的內(nèi)存util_mem,即可讀寫內(nèi)存指定區(qū)域。
 

 

 
執(zhí)行rw_primit后,指定位置已被覆蓋成0x200C,有了一塊泄露的內(nèi)存 util_mem,能夠?qū)崿F(xiàn) 32 位下用戶態(tài)任意地址讀寫的一維數(shù)組
 

 
執(zhí)行Shellcode方法與8174相同,這里不再詳細分析。
 

 

 

 
在Windows7環(huán)境下能夠成功利用,以彈出calc為例。
 
參考:https://blog.trendmicro.com/trendlabs-security-intelligence/use-after-free-uaf-vulnerability-cve-2018-8373-in-vbscript-engine-affects-internet-explorer-to-run-shellcode/
 
原創(chuàng)文章:轉(zhuǎn)載請注明出處

喜歡
分享
咨詢

評論

全部評論0

猜你喜歡

神州明達- 為您的信息安全負責
  • 優(yōu)

    24小時發(fā)貨

  • 7天退換貨

  • 1年保修期

  • 免費提供方案

填寫信息,獲取定制方案

友情鏈接: 手機信號屏蔽柜
  • 400-608-6677 轉(zhuǎn)810    
  • 北京市密云區(qū)古北口鎮(zhèn)古御路外街11號
  • postmaster@szmid.com
  • 投訴電話:4006086677轉(zhuǎn)700

北京神州明達高科技有限公司 備案號:京ICP備12008205號-5    技術(shù)支持:神州明達

.
0.065861s