0x01 關於WMI
WMI可以描述為一組管理Windows系統的方法和功能。我們可以把它當作API來與Windows系統進行相互交流。WMI在滲透測試中的價值在於它不需要下載和安裝, 因為WMI是Windows系統自帶功能。而且整個運行過程都在計算機內存中發生,不會留下任何痕跡。這一點是其它滲透測試工具所不能相比的。
0x02 WMI信息收集
1. 檢索系統已安裝的軟件
wmic product list brief |more
2. 搜索系統運行服務
wmic service list brief |more
2. 搜索運行中的程序
wmic process list brief |more
4. 搜索啟動程序
wmic startup list brief |more
5. 搜索共享驅動盤
wmic netuse list brief |more
6. 搜索時區
wmic timezone list brief |more
7. 搜索用戶帳戶
wmic useraccount list brief |more
8. 搜索計算機域控制器
wmic ntdomain list brief
9. 搜索登錄用戶
wmic logon list brief |more
9. 搜索已安裝的安全更新
wmic qfe list brief |more
0x03 WMI執行任務
WMIC不僅僅只是用於檢索系統信息。在滲透測試中, 使用適當的命令,它也可以執行各種有用的任務。
1. 卸載和重新安裝程序
在滲透測試中, 我們經常遇到反病毒程序阻止payload運行。 這時候我們可以通過WMIC命令來卸載反病毒程序。
Wmic product where "name like '%forit%' " get name
第二步, 通過WMIC命令來停止運行反病毒服務
Wmic process where name=“XXX.exe” call terminate
0x04 PowerShell
自從PowerShell的出現,WMI功能已經被完全整合到了PowerShell里面。在PowerShell中, WMI擁有多個類型的種類,每個種類都代表一個內部組件:Win32_proces代表當前系統所運行程序。 Win32_Service代表當前系統所運行服務等等。每個種類都有它自己的屬性,我們可以使用WQL語言來進行查詢。它的語法與SQL語言非常接近。那么要在Windows環境中列出所有種類, 我們可以使用PowerShell Get-WmiObject cmdlet來實現。
類型被分組在namespaces or aliases中。以上我們得到的所有資源列表都屬於CIMV2 namespaces,包含大多數系統命令。還有其它可由第三方產品提供或注冊的其他產品。我們可以用以下命令查找:
0x05代碼執行
使用WQL與WMI相互交流只能提供只讀訪問,除此之外, 我們可以使用Windows上的WMIC實用程序, 向我們提供一個CMD.EXE端口。
正如前面提到的,WMI的真正優勢在於能夠遠程控制這些系統。因此,為了在另一個系統上產生新的CMD.EXE端口,我們可以發布以下命令:
需要注意的是: 當遠程執行代碼時,請務必使用不受UAC限制的帳戶。 比如說administrator帳戶和具有本地管理權限的域帳戶等等。
使用WMIC進行遠程命令執行的主要挑戰是將輸出返回。解決這個問題的一個便捷快速的方法是將文件重定向。也就是說, 我們可以將命令輸出存入共享網絡驅動盤。然后再復制到本地驅動盤。
- 第一步, 設置共享網絡驅動盤
- ·第二步, 再復制到本地驅動盤
- 第三步, 查看結果