WindowsVBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)專(zhuān)家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷(xiāo),專(zhuān)業(yè)領(lǐng)域包括成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、電商網(wǎng)站制作開(kāi)發(fā)、小程序設(shè)計(jì)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā),與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷(xiāo)的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評(píng)估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!

一、漏洞簡(jiǎn)介

VBScript引擎處理內(nèi)存中對(duì)象的方式中存在一個(gè)遠(yuǎn)程執(zhí)行代碼漏洞。該漏洞可能以一種攻擊者可以在當(dāng)前用戶的上下文中執(zhí)行任意代碼的方式來(lái)破壞內(nèi)存。成功利用此漏洞的攻擊者可以獲得與當(dāng)前用戶相同的用戶權(quán)限。如果當(dāng)前用戶使用管理用戶權(quán)限登錄,則成功利用此漏洞的攻擊者可以控制受影響的系統(tǒng)。然后攻擊者可以安裝程序; 查看,更改或刪除數(shù)據(jù); 或創(chuàng)建具有完全用戶權(quán)限的新帳戶。

在基于Web的攻擊情形中,攻擊者能通過(guò)Internet Explorer利用此漏洞的特定網(wǎng)站,然后誘使用戶查看該網(wǎng)站。攻擊者還可以在承載IE呈現(xiàn)引擎的應(yīng)用程序或Microsoft Office文檔中嵌入標(biāo)記為“安全初始化”的ActiveX控件。攻擊者還可以利用受到破壞的網(wǎng)站和接受或托管用戶提供的內(nèi)容或廣告的網(wǎng)站。這些網(wǎng)站可能包含可能利用此漏洞的特制內(nèi)容。

2018年8月14日,微軟發(fā)布了安全補(bǔ)丁,影響流行的大部分系統(tǒng)版本。

漏洞基本信息 
漏洞IDCVE-2018-8373
漏洞名稱Microsoft VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞
漏洞類(lèi)型遠(yuǎn)程代碼執(zhí)行
威脅類(lèi)型UAF
影響系統(tǒng)版本IE9 WS 2008 32/64、IE10 Windows Server2012、IE11大部分版本

二、漏洞測(cè)試

系統(tǒng)環(huán)境Win7 32/64
IE版本IE10
EXPhttps://github.com/B1eed/VulRec/blob/master/CVE-2018-8373

三、漏洞原理

由于樣本混淆嚴(yán)重,部分代碼見(jiàn)圖1,這里采用簡(jiǎn)化POC進(jìn)行分析,代碼見(jiàn)圖2。Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的圖1 樣本采用了嚴(yán)重混淆

 Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

圖2Crash Poc

Crash PoC定義了MyClass類(lèi)、一個(gè)array的成員變量和兩個(gè)成員函數(shù):Class_Initialize  與Default Property Get P。Class_Initialize 是一種被棄用的方法,現(xiàn)在已經(jīng)被新的過(guò)程所替代。當(dāng)對(duì)象初始化的時(shí)候,會(huì)被自動(dòng)喚醒。在PoC中,Class_Initialize 是重載的,當(dāng)調(diào)用 VBScriptClass::InitializeClass時(shí),處理的是重載的函數(shù)。

MyClass:通過(guò)new進(jìn)行創(chuàng)建并賦值給指定變量cls,該操作首先會(huì)觸發(fā)類(lèi)的創(chuàng)建以及初始化,創(chuàng)建類(lèi)的函數(shù)由vbscript!VBScriptClass::Create函數(shù)完成;

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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


Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的隨后調(diào)用class的虛函數(shù)vbscript!CScriptEntryPoint::Call 進(jìn)行初始化,最終的調(diào)用棧如下:

 Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

vbscript!CScriptRunTime::RunNoEH負(fù)責(zé)對(duì)編譯后的vbs代碼進(jìn)行解釋執(zhí)行。這里執(zhí)行類(lèi)的初始化操作,主要包含了array數(shù)組的定義以及Class_Initialize函數(shù)的執(zhí)行。

vbscript中創(chuàng)建數(shù)組的函數(shù)為vbscript!MakeArray,如下:


Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的ReDim array(2):會(huì)調(diào)用vbscript!MakeArray來(lái)創(chuàng)建元素?cái)?shù)是3的數(shù)組,如下圖

 Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的將元素的地址保存到堆棧上,保存array(2)= 0x12ae6ff0地址到棧上 

cls.array(2)=cls:調(diào)用vbscript!AssignVar來(lái)設(shè)置MyClass的默認(rèn)屬性值為 cls.array(2)。獲取MyClass的默認(rèn)屬性值后,會(huì)調(diào)用Public Default PropertyGet P并執(zhí)行Public Default Property Get P中的ReDim array(1),釋放了原來(lái)的pvData。

 Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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


Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

array(2)的地址仍然保存在棧中, Public Default Property Get P 的返回值會(huì)訪問(wèn)釋放的內(nèi)存,最終導(dǎo)致UAF漏洞。

四、EXP調(diào)試分析

調(diào)試方法同Crash PoC,跟蹤分析如何將二維數(shù)組修改長(zhǎng)度為0x0FFFFFFF,如何實(shí)現(xiàn)任意內(nèi)存讀寫(xiě)以及如何偽造CONTEXT結(jié)構(gòu)來(lái)執(zhí)行Shellcode。

 

漏洞定義了兩個(gè)數(shù)組,array1和array2。array1就是前面PoC中描述的數(shù)組,array2是一個(gè)二維數(shù)組,其中每個(gè)元素的值都是3。然后使用腳本回調(diào)函數(shù)DefaultPropertyGet釋放原來(lái)的array1.pvData,設(shè)置array2為新的array1.pvData。因?yàn)樵瓉?lái)array1.pvData的大小和array2.SAFEARRAY結(jié)構(gòu)是相同的,在內(nèi)存中是0x30字節(jié)。array2.SAFEARRAY結(jié)構(gòu)將重用原始array1.pvData中釋放的內(nèi)存。同時(shí),DefaultPropertyGet的返回值0x0FFFFFFFF會(huì)覆蓋array2.SAFEARRAY的結(jié)構(gòu)SAFEARRAYBOUND,并修改二維數(shù)組的長(zhǎng)度為0x0FFFFFFF。

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

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

Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的Windows VBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的

在Windows7環(huán)境下能夠成功利用,以彈出calc為例。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)頁(yè)標(biāo)題:WindowsVBScript引擎遠(yuǎn)程執(zhí)行代碼漏洞的分析與復(fù)現(xiàn)是怎么樣的
分享URL:http://muchs.cn/article4/gjgsoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站、網(wǎng)站策劃、App設(shè)計(jì)網(wǎng)站導(dǎo)航、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)