.NET 白名單文件通過反序列化執(zhí)行系統(tǒng)命令的方法
01閱讀須知
此文所提供的信息只為網(wǎng)絡(luò)安全人員對自己所負責的網(wǎng)站、服務(wù)器等(包括但不限于)進行檢測或維護參考,未經(jīng)授權(quán)請勿利用文章中的技術(shù)資料對任何計算機系統(tǒng)進行入侵操作。利用此文所提供的信息而造成的直接或間接后果和損失,均由使用者本人負責。本文所提供的工具僅用于學習,禁止用于其他方面
02VisualUiaVerifyNative
在日常的紅隊行動中,利用微軟簽名的白名單文件來繞過防護措施是一種常見的行為,有些場景下紅隊通過利用系統(tǒng)白名單文件加載反序列化漏洞的方式執(zhí)行惡意指令。
VisualUiaVerifyNative.exe 是一款具備微軟簽名的可執(zhí)行文件,屬于Microsoft UI Automation框架的一部分,最初設(shè)計用于幫助開發(fā)人員驗證UI自動化的狀態(tài),一般在 Microsoft Windows SDK(Windows Kits)包中,比如路徑:Windows Kits\10\bin\10.0.22621.0\x64\UIAVerify,該工具通常依賴于以下兩個重要的動態(tài)鏈接庫。
2.1 UIAComWrapper
UIAComWrapper.dll,該 DLL 文件封裝了 UI Automation COM 接口,用于簡化與 UI Automation 元素的交互。UI Automation 是一種微軟提供的技術(shù),允許自動化工具控制、監(jiān)視和測試 Windows 應(yīng)用程序的用戶界面。UIAComWrapper.dll 使 VisualUIAVerifyNative.exe 可以使用 .NET 代碼與 UI Automation API 進行交互。
2.2 WUIATestLibrary
WUIATestLibrary.dll 提供了一些專門用于 UI 自動化測試的庫函數(shù),主要支持自動化測試中的通用任務(wù),例如自動化 UI 控件的查找、狀態(tài)驗證和操作。VisualUIAVerifyNative.exe 依賴于此庫來運行不同的 UI 驗證和測試場景。
這些依賴庫的主要作用是為 VisualUIAVerifyNative.exe 提供接口和功能支持,使其能夠與 Windows 應(yīng)用程序的 UI 自動化框架進行通信,并通過自動化的方式驗證和測試界面元素。
由于VisualUiaVerifyNative具備了微軟官方簽名的文件,因此,從反病毒軟件的視角看屬于白名單應(yīng)用程序,常??梢岳@過許多基于簽名的安全防護措施。
03反編譯分析
我們使用dnspy打開VisualUiaVerifyNative文件的入口方法Main,發(fā)現(xiàn)調(diào)用了MainWindow類,具體代碼如下所示。
private static void Main(string[] args) { try { Debug.AutoFlush = true; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainWindow(args)); Automation.RemoveAllEventHandlers(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
MainWindow類的初始化方法中,有一個至關(guān)重要的函數(shù)ApplicationStateDeserialize負責反序列化配置文件中的數(shù)據(jù)。如下圖所示
進入此方法內(nèi)部,發(fā)現(xiàn)打開讀取了一個名為uiverify.config的文件,位于用戶的AppData目錄中,代碼如下所示。
private void ApplicationStateDeserialize(){ this._configFile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "uiverify.config"; if (File.Exists(this._configFile)) { Stream stream = File.Open(this._configFile, FileMode.Open); BinaryFormatter binaryFormatter = new BinaryFormatter(); this._applicationState = (ApplicationState)binaryFormatter.Deserialize(stream); stream.Close(); } }
最核心的是調(diào)用了BinaryFormatter類反序列化內(nèi)容,攻擊者可以通過精心構(gòu)造的payload欺騙反序列化過程,加載惡意代碼。在代碼中,binaryFormatter.Deserialize(stream)這一行正是漏洞的觸發(fā)點,它會反序列化uiverify.config文件中的數(shù)據(jù),并將其載入到_applicationState中。
04實戰(zhàn)利用
第1步使用ysoserial.exe工具生成一個惡意的序列化payload。在這里,我們利用了BinaryFormatter格式,并選擇TextFormattingRunProperties作為觸發(fā)器,執(zhí)行命令notepad。
ysoserial.exe -f BinaryFormatter -g TextFormattingRunProperties -o raw -c "notepad" > Roaminguiverify.config
這會生成一個二進制格式的惡意payload,并將其保存為Roaminguiverify.config文件,內(nèi)容如下圖所示。
第2步,將生成的Roaminguiverify.config文件寫入到當前用戶目錄,比如C:\Users\Administrator\AppData\Roaminguiverify.config。這個配置文件是VisualUiaVerifyNative在啟動時會自動讀取的文件,因此一旦寫入惡意數(shù)據(jù),運行該工具時會自動觸發(fā)反序列化漏洞。
第3步,當VisualUiaVerifyNative運行時,它會嘗試從Roaminguiverify.config文件中反序列化數(shù)據(jù),并因此執(zhí)行植入的惡意命令。在本例中,notepad.exe會在系統(tǒng)上啟動,表明命令執(zhí)行成功。
綜上,VisualUiaVerifyNative是一款具備微軟白名單的可執(zhí)行文件,用于基于Microsoft UI Automation框架進行應(yīng)用測試。然而,通過對其配置文件的精心操作,攻擊者可以非法使用其功能來觸發(fā)反序列化漏洞,執(zhí)行任意代碼。
到此這篇關(guān)于.NET 白名單文件通過反序列化執(zhí)行系統(tǒng)命令的文章就介紹到這了,更多相關(guān).net 白名單文件反序列化執(zhí)行系統(tǒng)命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET MVC運行出現(xiàn)Uncaught TypeError: Cannot set property __MVC
同一相站點,有些頁面的客戶端驗證能工作,而有些死活不行。打開頁面就出現(xiàn)Uncaught TypeError: Cannot set property __MVC_FormValidation of null錯誤2010-04-04gridview中實現(xiàn)radiobutton的單選示例
radiobutton可以單選,于是想讓gridview也可以實現(xiàn),具體的思路及代碼如下,感興趣的朋友可以參考下2013-08-08ASP.NET設(shè)置404頁面返回302HTTP狀態(tài)碼的解決方法
訪問網(wǎng)站時錯誤頁面可正常顯示,但HTTP狀態(tài)碼卻是302,對SEO很不友好,按下列步驟修改使錯誤頁面返回正確的利于SEO的404狀態(tài)碼,感興趣的朋友可以了解下2013-09-09asp.net Javascript獲取CheckBoxList的value
最近在做一個BS的小項目,記得自己搞asp.net的時候,還是兩年以前,大部分的東西只是有點印象,忘得差不多了,所以這次也算是溫習的過程吧,一邊學習,一邊趕工,呵呵呵。。。。2009-12-12