中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

發布時間:2021-12-22 23:20:25 來源:億速云 閱讀:172 作者:柒染 欄目:安全技術

本篇文章為大家展示了怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

前言

VBScript引擎處理內存中對象的方式中存在一個遠程執行代碼漏洞。該漏洞可能以一種攻擊者可以在當前用戶的上下文中執行任意代碼的方式來破壞內存。成功利用此漏洞的攻擊者可以獲得與當前用戶相同的用戶權限。如果當前用戶使用管理用戶權限登錄,則成功利用此漏洞的攻擊者可以控制受影響的系統。然后攻擊者可以安裝程序;查看,更改或刪除數據;或創建具有完全用戶權限的新帳戶。

一、漏洞簡介

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

2018年8月14日,微軟發布了安全補丁,影響流行的大部分系統版本。

漏洞基本信息
漏洞IDCVE-2018-8373
漏洞名稱Microsoft VBScript引擎遠程執行代碼漏洞
漏洞類型遠程代碼執行
威脅類型UAF
影響系統版本IE9 WS 2008 32/64、IE10 Windows Server2012、IE11大部分版本

二、漏洞測試

系統環境Win7 32/64
IE版本IE10
EXPhttps://github.com/B1eed/VulRec/blob/master/CVE-2018-8373

三、漏洞原理

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

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

圖1 樣本采用了嚴重混淆

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

圖2 Crash Poc

Crash PoC定義了MyClass類、一個array的成員變量和兩個成員函數:Class_InitializeDefault Property Get PClass_Initialize是一種被棄用的方法,現在已經被新的過程所替代。當對象初始化的時候,會被自動喚醒。在PoC中,Class_Initialize是重載的,當調用VBScriptClass::InitializeClass時,處理的是重載的函數。

MyClass:通過new進行創建并賦值給指定變量cls,該操作首先會觸發類的創建以及初始化,創建類的函數由vbscript!VBScriptClass::Create函數完成;

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

創建類成功后則會調用vbscript!VBScriptClass::InitializeClass函數對class的內容進行初始化;

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

vbscript!VAR::IsFunction函數中獲取class指針;

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

隨后調用class的虛函數vbscript!CScriptEntryPoint::Call進行初始化,最終的調用棧如下:

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

vbscript!CScriptRunTime::RunNoEH負責對編譯后的vbs代碼進行解釋執行。這里執行類的初始化操作,主要包含了array數組的定義以及Class_Initialize函數的執行。

vbscript中創建數組的函數為vbscript!MakeArray,如下:

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

ReDim array(2):會調用vbscript!MakeArray來創建元素數是3的數組,如下圖:

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

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

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

將元素的地址保存到堆棧上,保存 array(2)= 0x12ae6ff0地址到棧上。

cls.array(2)=cls:調用vbscript!AssignVar來設置MyClass的默認屬性值為cls.array(2)。獲取MyClass的默認屬性值后,會調用Public Default PropertyGet P并執行Public Default Property Get P中的ReDim array(1),釋放了原來的pvData。

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

ReDimPreserve array(1):重置array內存的操作實際通過函數RedimPreserveArray實現,最終會調用SafeArrayRedim可以看到array對象的pvData已經被修改為0x0818afe0,之前的pvData(0x12ae6fd0)的內存地址已經被釋放,包括之前保存在棧上的0x12ae6ff0。

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

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

四、EXP調試分析

調試方法同Crash PoC,跟蹤分析如何將二維數組修改長度為0x0FFFFFFF,如何實現任意內存讀寫以及如何偽造CONTEXT結構來執行Shellcode。

漏洞定義了兩個數組,array1和array2。array1就是前面PoC中描述的數組,array2是一個二維數組,其中每個元素的值都是3。然后使用腳本回調函數DefaultPropertyGet釋放原來的array1.pvData,設置array2為新的array1.pvData。因為原來array1.pvData的大小和array2.SAFEARRAY結構是相同的,在內存中是0x30字節。array2.SAFEARRAY結構將重用原始array1.pvData中釋放的內存。同時,DefaultPropertyGet的返回值0x0FFFFFFFF會覆蓋array2.SAFEARRAY的結構SAFEARRAYBOUND,并修改二維數組的長度為0x0FFFFFFF。

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

修改二維數組的長度為0x0FFFFFFF:

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

將array(index_vul)(index_a, 0)設置為“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轉化為長整型,令array(index_vul)(index_a,0)處的variant轉化為數組,從而得到了一段泄露的內存util_mem,即可讀寫內存指定區域。

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

執行rw_primit后,指定位置已被覆蓋成0x200C,有了一塊泄露的內存util_mem,能夠實現32位下用戶態任意地址讀寫的一維數組:

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

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

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現

在Windows7環境下能夠成功利用,以彈出calc為例。

上述內容就是怎么實現Windows VBScript引擎遠程執行代碼漏洞的分析與復現,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南昌县| 河北区| 武汉市| 金沙县| 卓尼县| 邵阳市| 衡山县| 霍山县| 昌宁县| 涟水县| 兴文县| 阿尔山市| 亚东县| 建湖县| 汨罗市| 资阳市| 阿城市| 泰和县| 遂平县| 桃源县| 新蔡县| 新乡县| 远安县| 新宁县| 慈利县| 治县。| 昆山市| 勃利县| 滦平县| 尉犁县| 三门峡市| 云阳县| 进贤县| 安平县| 汕尾市| 绍兴市| 通海县| 江源县| 麻江县| 调兵山市| 临桂县|