使用此工具,您將能夠檢測:
對 COM 物件不正確的存取控制(LaunchPermission、AccessPermission) - LPE 透過可濫用的 COM 方法、DCOM 驗證中繼。這就是PermissionHunter
。
COM 物件的註冊表權限不正確 - 透過 COM 劫持進行 LPE。那是ComDiver
。
找到新的海拔名字 - UAC 繞過。那是MonikerHound
。
取得有關特定 CLSID 的詳細資訊 - 檢查 COM 物件以尋找可濫用的 COM 方法。那是ClsidExplorer
。
代表低權限使用者檢查跨會話啟動 - 嘗試在其他人的 LPE 會話中實例化物件。那是ComTraveller
。
如果我們在幾個月前(例如 2024 年春季)發布此工具,您會發現 CVE-2024-38100 (FakePotato) 和 CVE-2024-38061 (SilverPotato)。
開始使用此工具,您可以找到更多在 Windows 系統上提升權限的方法。它就像一個自動化的 OleViewDotnet :)
PermissionHunter 是一個工具,可讓您檢查系統上所有 COM 物件的 LaunchPermission 和 ActivatePermission。
PS A:mzhmo> .PermissionHunter.exe -h ,`-。 .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-'/`-。 ` PermissionHunter - 尋找不正確的LaunchPermission 和ActivatePermission CICADA8 研究團隊來自Michael Zhmaylo (MzHmO)PermissionHunter.exe 小工具,讓您可以找到具有不正確的LaunchPermission 和ActivatePermission[OPTIONS]-outfile :輸出檔案名稱-outfileat :輸出檔案格式的 outfiles易受攻擊的COM 物件。接受 'csv' 和 'xlsx'-h/--help :顯示此窗口
這裡只有兩個論點:
-outfile
- 帶有權限報告的檔案的名稱;
-outformat
- 報告文件的格式,可以 csv 和 xlsx 格式輸出。最好是csv格式輸出,因為如果沒有Excel,就無法以xlsx格式輸出。
例子:
PS A:mzhmo> .PermissionHunter -outfile 結果 -outformat xlsx ,`-。 .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-'/`-。 ` PermissionHunter - 尋找不正確的 LaunchPermission 和 ActivatePermission CICADA8 研究團隊來自 Michael Zhmaylo (MzHmO)[+] 結果將在結果中,格式為 xlsx[+] 成功
之後您將取得一個檔案 result.xlsx,其中列出了現有 COM 物件的所有權限。
我輸出以下列:
ApplicationID
- 特定 COM 物件的 ApplicationID。例如: {69AD4AEE-51BE-439b-A92C-86AE490E8B30}
;
ApplicationName
- 特定 COM 物件的應用程式名稱。例如: Background Intelligent Transfer Service
;
RunAs
- COM 物件的 RunAs 註冊表項。例如: Interactive User
;
LaunchAccess
、 LaunchType
、 LaunchPrincipal
、 LaunchSid
- LaunchPermission 註冊表項。 LaunchPrincipal 指定對 COM 物件具有 LaunchAccess 權限的使用者。 LaunchType - ACE 類型:啟用或停用。 LaunchSID - LaunchPrincipal 的 SID。前任:
本地啟動。遠端啟動。本地啟動。允許遠端啟動存取 NT AUTHORITYSYSTEM S-1-5-18
這意味著系統對該COM物件具有LocalLaunch、RemoteLaunch、LocalActivation、RemoteActivation權限;
AccessAccess
、 AccessType
、 AccessPrincipal
、 AccessSID
- 欄位與 LaunchPermissions 具有相同的意義,僅在 AccessPermission 的上下文中;
AuthLevel
、 ImpLevel
- 身份驗證等級和模擬等級。預設情況下,它們設定為RPC_C_AUTHN_LEVEL_CONNECT
和RPC_C_IMP_LEVEL_IDENTIFY
;
CLSIDs
- COM 物件 CLSID。
例如,如果您發現可以代表低權限使用者存取的 COM 對象,您可以如下濫用它:
建立一個實例並呼叫該 COM 物件的方法,例如代表系統寫入任意檔案。 例如,您找到了一個帶有DeployCmdShell()
方法的 COM 對象,該方法代表NT AUTHORITYSYSTEM
帳戶運行,並且您擁有LaunchPermissions
和AccessPermissions
。您可以啟動此 COM 對象,呼叫DeployCmdShell()
方法,並代表系統執行程式碼。您可以使用ClsidExplorer
查看可用的方法。
濫用 DCOM 身份驗證。為此,請參閱 RemoteKrbRelay
有關 COM 物件的所有資訊都在登錄中。但如果註冊不正確怎麼辦?在這種情況下,我們有可能覆蓋 COM 設置,例如劫持可執行檔。
該工具可讓您偵測此類漏洞,並根據搜尋 COM 物件時查看的按鍵的優先順序來掃描登錄。透過這種方式,你甚至可以發現Shadow COM Hijacking。優先順序如下:
1. HKCUSoftwareClasses(GUID)視為 2. HKLMSoftwareClasses(GUID)視為 3. HKCUSoftwareClasses(GUID)InprocServer32 4. HKLMSoftwareClasses(GUID)InprocServer32 5. HKCUSoftwareClasses(GUID)LocalServer32 6. HKLMSoftwareClasses(GUID)LocalServer32
因此,至少出現了兩個特權升級的向量:
如果我們擁有HKCU...TreatAs
寫入權限,並且原始 COM 可執行檔位於HKCU...LocalServer32
中,那麼我們可以透過將執行檔寫入HKCU..TreatAs
來進行 Shadow COM 劫持。
如果 COM 物件位於HKCU..LocalServer32
中,且我們可以寫入HKCU..LocalServer32
,那麼我們就可以進行 COM 劫持
讓我們仔細看看該工具:
PS A:ssdgitrepoCOMThanasiaComDiverx64Debug> .ComDiver.exe -h / o ^ o / ( ) / ____________(%%%%%%%)____________ ( / / )%%%%%%%( ) (___/___/__/ ________) ( / /(%%%%%%%) ) (__/___/ (%%%%%%%) _____) /( ) / (%%%%%) (%%%) !------------ COM 驅動程式 -------------- [?] 檢查 com 物件上不安全註冊表和磁碟權限的小工具 [?] 參數 -h/--help <- 顯示此訊息 --from<- 從此 clsid 分析 CLSID --target <- 分析一個目標 clsid --no-context <- 不檢查另一個 COM 伺服器上下文。僅註冊表分析。 --no-create <- 不建立目標 COM 物件。這是最快的模式
它接受以下參數:
--from
- Windows 系統上有許多 CLSID。如果您不希望工具從第一個開始查看所有 CLSID,則可以指定以 CLSID 開頭,例如--from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--target
- 分析特定的clsid;
--no-context
- 不檢查代表其啟動 COM 物件的使用者名稱;
--no-create
- 不建立已偵測到的 COM 物件。這限制了您可以獲得的相關資訊。然而,這是僅檢查註冊表權限的最快方法。
例子:
.ComDiver.exe --無創建
在這種情況下,我們可以看到 HKCU 內部沒有金鑰,並且我們對這些金鑰具有寫入權限。因此,如果我們將自己的值寫入該路徑,我們就會進行COM劫持。
如果您在工具輸出中看到紅色行,則這是濫用 COM 物件的潛在方法!您可以執行 COM 劫持(欺騙現有的可執行檔)或影子 COM 劫持(欺騙遺失的執行檔)。在此閱讀有關 COM 劫持的更多信息
Windows 系統上有一個內建方法可以繞過 UAC,這是透過 Elevation Moniker 完成的。您可以在這裡閱讀更多相關資訊。這種UAC繞過需要一種非標準的方式在註冊表中註冊COM對象,這相當容易追蹤。所以你可以使用我的工具來尋找繞過UAC的新方法。
例子:
PS A:ssdgitrepoCOMThanasiaMonikerHoundx64Debug> .MonikerHound.exe ,_ _ _, oo/ ,(.-.), _/ |) (| _ /=-=/ ,| =/ |, _/ | / _ _! MonikerHound - 找到您自己的 UAC 繞過! CICADA8研究團隊 來自邁克爾·日梅洛 (MzHmO) [+] 發現了潛在的海拔名稱 COM 伺服器! CLSID:{01D0A625-782D-4777-8D4E-547E6457FAD5} LocalizedString: @%systemroot%system32werconcpl.dll,-351 已啟用:1 圖示參考:@%systemroot%system32werconcpl.dll,-6 激活:成功 PID:15800 DLL主機 [+]................................[+] [+] 發現了潛在的 COM 伺服器,用於提升綽號! CLSID:{03e15b2e-cca6-451c-8fb0-1e2ee37a27dd} LocalizedString: @%systemroot%system32tapiui.dll,-1 已啟用:1 圖示參考:@%systemroot%system32tapiui.dll,-201 激活:成功 PID:440 DLL主機 [+]................................[+]
一旦您發現了 UAC Bypass 的潛在候選者,您就可以開始檢查它們。作為運行 Elevation Moniker 的絕佳模板,您可以採用此功能或此程式。
ClsidExplorer 可讓您檢索有關特定 CLSID 的資訊。此程式輸出以下數據:
AppID
- 特定 COM 物件的應用程式 ID;
ProgID
- 特定 COM 物件的 ProgID;
PID
- 此 COM 物件在其中執行的 PID;
Process Name
-PID進程的名稱;
Username
- 代表其運行進程的使用者的名稱;
Methods
- COM 物件的可用方法。透過解析 TypeLib 製作。
PS A:ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe -h CLSIDExplorer.exe - 透過clsid辨識所有訊息 用法: .CLSIDExplorer.exe --clsid“{00000618-0000-0010-8000-00aa006d2ea4}”
程式只接受一個參數:
--clsid
- 要分析的目標 CLSID
PS A:ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe --clsid“{00000618-0000-0010-8000-00aa006d2ea4}”[{00000618-0000000000000 應用程式ID:未知 程式 ID:未知 PID:1572 進程名稱: CLSIDExplorer.exe 使用者名稱:WINPCMichael 方法: [0] __stdcall void QueryInterface(IN GUID*, OUT void**) [1] __stdcall 無符號長 AddRef() [2] __stdcall unsigned 長 Release() [3] __stdcall void GetTypeInfoCount(OUT unsigned int*) [4] __stdcall void GetTypeInfo(IN unsigned int, IN unsigned long, OUT void**) [5] __stdcall void GetIDsOfNames(IN GUID*, IN char**, IN unsigned int, IN unsigned long, OUT long*) [6] __stdcall void Invoke(IN long、IN GUID*、IN unsigned long、IN unsigned Short、IN DISPPARAMS*、OUT VARIANT*、OUT EXCEPINFO*、OUT unsigned int*) [7] __stdcall BSTR 名稱() [8] __stdcall 無效名稱(IN BSTR) [9] __stdcall RightsEnum GetPermissions(IN VARIANT,IN ObjectTypeEnum,IN VARIANT) [10] __stdcall void SetPermissions(IN VARIANT,IN ObjectTypeEnum,IN ActionEnum,IN RightsEnum,IN InheritTypeEnum,IN VARIANT) [11] __stdcall 無效 ChangePassword(IN BSTR, IN BSTR) [12] __stdcall 組* 組() [13] __stdcall 屬性* 屬性() [14] __stdcall _Catalog* ParentCatalog() [15] __stdcall 無效 ParentCatalog(IN _Catalog*) [16] __stdcall 無效 ParentCatalog(IN _Catalog*) [結尾]
該程式非常適合檢查使用ComTraveller
或PermissionHunter
或MonikerHound
發現的 COM 類,以查找可能被濫用的有趣方法。
ComTraveller - 該工具可讓您探索所有可用的 COM 物件。首先,它允許您快速識別具有有趣值(以互動用戶身份運行)的 COM 物件、TypeLib 的可用性以及跨會話啟動功能。因此,您可以快速檢測可能在另一個使用者會話中實例化的對象,從而導致權限升級。
PS A:SSDgitrepoCOMThanasiaComTravellerx64Debug> .ComTraveller.exe -h ,,_ zd$$??= z$$P? F:`c, _ d$$, `c'cc$$i ,cd$?R $$$$ cud$,?$$$i ,=P"2?z " $" " ?$$$, ? ,-''`>, bzP 'cLdb,?$$,?$$$ ,h' "I$'J$P .... `?$$$,"$$,`$$h $$PxrF'd$"d$PP""?-,"?$$,?$h`$$,,$$'$F44 "?,,_`=4c,?=,"?hu?$`?L4$'? ' `""?==""=-"" `""-`'_,,,, .ccu? m?e?JC,-,"=? """=='?"ComTraveller - 用於解析和提取系統上所有已註冊 CLSID 資訊的小工具用法:--file
--file
- 將輸出有關 COM 物件的資訊的檔案的名稱;
--from
- Windows 系統上有許多 CLSID。如果您不希望工具從第一個開始查看所有 CLSID,則可以指定以 CLSID 開頭,例如--from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--session
- 嘗試在其他人的會話中實例化一個對象
--target
- 僅分析一個目標 clsid
例子:
.ComTraveller.exe --檔案rep.csv --會話1
之後,您將找到一個包含有關 COM 物件資訊的rep.csv 檔案。 這裡有幾個欄位:
CLSID
- COM 物件的 CLSID;
AppId
- COM 物件的 APPID;
ProgId
- COM 物件的 APPID;
RunAs
- RunAs 註冊表中的值。如果值為The Interactive User
或NT AUTHORITYSYSTEM
,則可以嘗試製作 LPE;
Username
- 代表其運行 COM 物件的使用者名稱;
PID
- COM物件運作所在的PID;
ProcessName
- COM 物件正在其中執行的進程的名稱;
HasTypeLib
- COM 物件是否有 TypeLib。如果是的話,你可以把這個物件交給ClsidExplorer
來查看可用的方法;
canCrossSessionActivate
- 是否可以透過在其他人的會話中啟動來濫用此 COM 類別進行 LPE。如果值為+
或錯誤為ACCESS DENIED
,則這可能是 LPE 的潛在候選者。
例如,如果您套用篩選器,您將立即找到有趣的 COM 類別:) 哇,這是一個可以跨會話啟動並且代表系統工作的 COM 類別嗎?
需要注意的是,由於COM物件過多,程式可能會崩潰。在這種情況下,您可以像這樣重新啟動它:
.ComTraveller.exe --檔案rep.csv --會話1 --來自“{0006F071-0000-0000-C000-000000000046}”