從Linux到Windows的PowerShell遠程處理
前提條件
1)後期利用期間可以通過目標NTLM身份驗證
2)重啟WinRM服務
3)使用此NTLM支持PowerShell Docker鏡像到Linux的PS-Remote,您可以從Linux到Windows進行PS遠程到Windows。
背景資料
偶然發現在我的測試中使用PowerShell遠程處理作為維護系統遠程代碼執行的主要方法很有用。它是一個內置的Windows功能。不幸的是,由於PowerShell Core的Linux分支支持的身份驗證機制,從我的Kali Linux遠程連接到我的目標並不是一件容易的事。
PowerShell遠程處理需要對Kerberos身份驗證,這意味著客戶端計算機和目標計算機必須都連接到同一域。如果我們沒有可以連接的機器來執行遠程處理,那麼這對測試人員來說可能會造成問題。幸運的是,我們可以選擇將自己添加為目標配置中的「TrustedHost」,這將允許我們執行NTLM身份驗證而不是Kerberos,因此無需從域上的系統進行連接。
現在唯一的問題是,用於Linux的PowerShell核心(撰寫本文時為PowerShell 6.1.0)並未支持NTLM身份驗證。幸運的是,Redditors找到了在Centos上使用PowerShell進行NTLM身份驗證的方法,因此我將他們的發現整合到一個簡單的PowerShell Docker鏡像quickbreach / powershell-ntlm中。
如何使用從Linux到Windows的PowerShell遠程處理
本節將逐步介紹如何從Linux客戶端到Windows目標建立遠程PowerShell會話。假設您對目標PC具有管理訪問許可權(RDP,payload等)。
1.在目標上啟用PowerShell遠程處理
Enable-PSRemoting –Force
2.獲取目標系統上當前TrustedHost的列表以供參考
Get-Item WSMan:localhostClientTrustedHosts
3.將自己添加為目標上的TrustedHost。這是在Enter-PSSession設置階段使用NTLM身份驗證所必需的,這是唯一可用於通過PowerShell遠程連接從Linux連接到Windows的身份驗證機制。要完成此操作,請運行以下命令之一:使用通配符允許所有計算機在對此主機進行身份驗證時使用NTLM
Set-Item WSMan:localhostClientTrustedHosts -Force -Value
或者只將您的IP添加到NTLM身份驗證允許列表中
Set-Item WSMan:localhostClientTrustedHosts -Force -Concatenate -Value 192.168.10.100
4.設置並重新啟動WinRM服務
Set-Service WinRM -StartMode AutomaticRestart-Service -Force WinRM
5.放入PowerShell-NTLM Docker鏡像的實例。下面的示例命令還在docker鏡像內的/mnt路徑上安裝包含PowerShell腳本
docker run -it -v /pathTo/PowerShellModules:/mnt quickbreach/powershell-ntlm
6.現在我們一直在等待:使用以下命令進入遠程PowerShell會話 - 請注意,您必須指定-Authentication類型:
# Grab the creds we will be logging in with$creds = Get-Credential# Launch the session # Important: you MUST state the authentication type as NegotiateEnter-PSSession -ComputerName (Target-IP) -Authentication Negotiate -Credential $creds# i.e.Enter-PSSession -ComputerName 10.20.30.190 -Authentication Negotiate -Credential $creds
您也可以以類似的方式使用Invoke-Command功能
Invoke-Command -ComputerName 10.20.30.190 -Authentication Negotiate -Credential $creds -ScriptBlock {Get-HotFix}
清除痕迹
如果您的命令之前存在TrustedHosts以自行添加,請更換您的IP並運行以下命令:
$newvalue = ((Get-ChildItem WSMan:localhostClientTrustedHosts).Value).Replace(",192.168.10.100","")
Set-Item WSMan:localhostClientTrustedHosts -Force -Value $newvalue
或者,如果您是唯一的TrustedHosts,則可以刪除所有TrustedHosts
Clear-Item WSMan:localhostClientTrustedHosts
重新啟動WinRM服務以完成更改(請注意,這將使您與Enter-PSSession斷開連接)
Restart-Service WinRM
*參考來源quickbreach,由周大濤編譯,轉載請註明來自FreeBuf.COM
※匿名者黑客組織放話挑釁,這可能又是一場鬧劇
※商業銀行數據安全保護體系建設思路
TAG:FreeBuf |