1. 程式人生 > 實用技巧 >內網橫向移動常見方法

內網橫向移動常見方法

最近事情積壓太多,想要做些什麼,卻不知從哪裡開始

索性啥也不幹了,來,你儘管來,我就整理(水)一下內網滲透橫向移動常見的方法來happy一下吧

橫向移動,根據定義是指獲取內網某臺機器的控制權之後,以被攻陷主機為跳板,通過蒐集域內憑證,找辦法訪問到域內其他機器,再依次迴圈往復,直到獲得域控許可權甚至控制內網

當然成功的橫向移動的前提是先竊取好了憑證,無論明文密文,沒有憑證,橫向移動無從談起(本文語境中不做特殊說明,預設已取得憑證,且不考慮木馬工具免殺和跳板機;關於憑證竊取日後有機會再說)

實際上,關於橫向移動,實際操作過程中可以分析的細節太多,有很多大佬說的非常詳細,可以去看XX社群,本文側重於整理思路和一些樸素的思想,觀點僅代表我個人

又 workgroup和domain環境下部分方法想要成功使用可能條件存在差異,本文預設討論域環境

0x01 IPC$+計劃任務/系統服務

首先不得不提windows自帶的遠端連線命令IPC$。IPC$(Internet Process Connection) 是為了讓程序之間通訊的一種“管道”,通過提供使用者名稱密碼建立了一條安全的、加密的、用於資料交換的通道。當然,還是在同一個時間,還是同樣的兩個IP,他們之間只能建立一個IPC$連線,腳踏多條船無論什麼時候都是不可取的。通過這個連線,可以實現在被連線的目標機器上搞檔案上傳、下載、命令執行......

啊,關於IPC$+計劃任務的橫向,我們的目的非常明確,思路非常美好:

(1)首先建立向目標主機的IPC$連線

(2)其次把命令執行的指令碼傳到目標主機

(3)再次建立計劃任務在目標機器上執行命令指令碼

(4)最後過河拆橋刪除IPC$連線

當然想要用IPC$來橫向是有條件的:

(1)目標機器沒有禁用IPC$連線,沒有什麼防火防盜攔截IPC$,139 445 埠也開了(能走445走445,不能則走139)

(2)目標機器小管理員開了IPC$預設共享服務(邏輯盤、系統目錄;都不開我訪問個啥?)

(圖1)

(3)獲取了目標機器的小管理員的管理員許可權的賬號密碼(最好是域管理員賬號密碼),明文的

(4)目標系統能支援IPC$,且和攻擊機能彼此互通(廢話)

建立連線命令:

net use \\ip\ipc$ "password" /user:"administrator"

當然也可以net use \\ip\c$ 。。。。。。之類的,但通常情況下都是ipc$

還有很多命令不一一列舉了

(圖2)

上圖中200.10就是我建立IPC$命令的IP 後期被我打碼打沒了。。。

(圖3)

net use \\IP /del /y

用完了可以刪掉IPC$

當然IPC$連線並不是一帆風順的,可能爆出各種錯

錯誤號 5,拒絕訪問(很可能你使用的使用者不是管理員許可權的,先提升許可權)
錯誤號 51,Windows 無法找到網路路徑(網路有問題)
錯誤號 53,找不到網路路徑(ip 地址錯誤;目標未開機;目標 lanmanserver 服務未啟動;目標有防火牆(埠過濾))
錯誤號 67,找不到網路名(你的 lanmanworkstation 服務未啟動;目標刪除了 ipc$;)
錯誤號 1219,提供的憑據與已存在的憑據集衝突(你已經和對方建立了一個ipc$,請刪除後再連)
錯誤號 1326,未知的使用者名稱或錯誤密碼
錯誤號 1385,登入失敗:未授予使用者在此計算機上的請求登入型別
錯誤號 1792,試圖登入,但是網路登入服務沒有啟動(目標NetLogon服務未啟動[連線域控會出現此情況])
錯誤號 2242,此使用者的密碼已經過期(目標有帳號策略,強制定期要求更改密碼)

。。。。。。祝你好運

建立連線後,可以把生成的木馬從攻擊機上傳、貼上到目標機器上

本地命令可以copy,用CS beacon的可以upload,總之把自己寫的或者是工具生成的木馬搞到目標機器上

接下來建立windows計劃任務,自動執行木馬反彈連線到攻擊機器

值得注意的是,如何自動執行木馬,在windows中常用的就是計劃任務at 和 schtasks

at和schtasks在此情此景下用於建立計劃任務,讓計算機在指定的時間執行木馬;at比較老了,很多系統都不支援了,目前最多的還是schtasks(具體命令不寫了,本貼只做思路整理)

最後一關閉IPC$連線,完活

(另:值得一提的是,IPC$連線中,為了獲得目標機administrator使用者的密碼,可以嘗試寫弱口令指令碼爆破哦

  使用計劃任務什麼的,系統中會有日誌記錄哦)

除了IPC$配合windows計劃任務之外,還可以嘗試配合windows系統命令(sc)

和上文一樣的道理,需要先建立IPC$連線,再把指令碼傳到目標機器中,區別在於還可以建立一個服務,服務用於執行木馬

  例子:

  sc \\<IP> create <servicename>binpath=”<path>”

  sc \\192.168.200.10 create hacker binpath=”c:\shell.exe” #建立服務

  sc \\192.168.200.10 start hacker #啟動hacker服務

  sc \\192.168.200.10 delete hacker #刪除hacker服務

剩下的和計劃任務一樣的道理,不重複了

0x02 smbexec

這是一款基於psexec的域滲透工具,配套Samba服務

下載連結 https://github.com/SecureAuthCorp/impacket

Impacket大禮包,裡面有一堆py工具,有psexec.py、 smbexec.py、 wmiexec.py、 dcomexec.py、 atexec.py等一堆工具

smbexec也是個全互動類的工具,不用於有webshell這種的環境

使用這個impacket套件的時候,要注意用目標機器本地管理員賬號密碼或者域管理員賬號密碼去連線目標機器哦

0x03 psexec

微軟提供的一種遠端命令列工具

EXE版的下載連結 https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

py版本的在上一點中

使用psexec也不需要目標機器開3389,只要開了admin$共享(這個一般都是預設開的,參見圖1)就可以用

且背靠windows這棵大樹,一般殺軟都睜一眼閉一眼,不會過多為難psexec

只要防火牆你敢放行,我就敢用

即:

使用psexec前提條件

(1)目標機器開了admin$共享

(2)防火牆沒開或不攔截

(3)想連域控最好用域管理員賬號密碼連,不要用普通域賬號密碼連;連普通域內主機隨便,用域管理員賬號密碼或者目標主機本地管理員賬號密碼都可以

例如: psexec.exe -accepteula \\IP -u domain\administrator -p password command

psexec.exe -accepteula \\192.168.200.10 -u ohmygod\iamadmin -p 123456789 -s cmd.exe (-s 會返回system許可權的shell;-accepteula 不彈框)

psexec.exe -accepteula \\192.168.200.10 -u ohmygod\iamadmin -p 123456789 whoami

還有很多騷操作,不一一列舉了

另:msf中也有此模組(我的MSF年久失修,看看就好)

下面那個psexec_psh則是powershell版本的payload,有powershell的環境就用這個payload進行混淆免殺效果更好,我就不用這個演示了

選的SMBUser是當前目標機器使用的

果不其然被幹了,本機都沒出去(另:psexec雖然能提供system許可權,但是還是要考慮一下防毒軟體的問題)

關掉攔截

當使用psexec橫向的時候,也會在目標機器中產生日誌滴

大佬推薦類似工具 scshell(沒用過)

另:CS中也有用psexec來PTH的功能

0x04 wmic

WMI (windows management instrumentation),從windows98起自帶的工具集。可以通過/node選項使用埠135上的遠端過程呼叫(RPC)進行通訊以進行遠端訪問,它允許系統管理員遠端執行自動化管理任務,例如遠端啟動服務或執行命令......

由於上一點中提到的原因,psexec無情隕落,所以轉向了wmi的利用。wmi相比psexec隱蔽性更強,無檔案,無記錄,操作多

當然,使用wmi橫向還是有條件的:

(1)目標機開啟了135,445埠(135管理口,445傳回顯)

(2)可以使用WMI(廢話)

單單wimc這個命令,就可以做很多事情,如

遠端查程序資訊

遠端建立程序

wmic /node:192.168.200.10 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig >C:\1.txt"

目標機器中會將ipconfig的結果儲存在生成的1.txt中(啊,當然我這個操作又被殺軟攔截了)

但是這個wmic執行的命令沒有回顯,需要ipc$一下或者type \\192.168.200.10\C$\1.txt 檢視結果

還有很多操作可以嘗試

0x05 wmiexec

wmiexec可以當做是wmic高清重置加強版

當然你用py版本也可以

除了impacket裡的wmiexec之外,還有wmiexec.vbs這種通過VBS呼叫WMI來模擬psexec功能的指令碼,還有Invoke-WmiCommand.ps1指令碼(PowerSploit工具包中有)通過powershell呼叫WMI來執行遠端命令,還有Invoke-WMIMethod也是這種功能(也在PowerSploit中有)

(另:像這種型別的工具,往往不拘泥於明文連線,hash也可以使用)

再比如有人推薦的結合cscript半互動式地執行一些命令如

cscript.exe //nologo wmiexec.vbs /shell 192.168.200.10 administrator password

什麼的

0x06 winrm

winrm即windows remote management --windows遠端管理服務,遠端連線winrm模組可以操作windows命令列,預設監聽埠5985(HTTP)和5986 (HTTPS),有些windows系統不是自動啟動的需要手動啟動

所以說,要用winrm的使用條件:

(1)目標機器開了winrm(廢話)

(2)目標主機防火牆不攔截winrm需要的埠(廢話*2)

我電腦win7是沒開的    winrm quickconfig 看一下可以開啟

winrm e winrm/config/listener 檢視一下監聽情況

可見成功開啟5985埠且用HTTP傳輸,listeningon監聽的是自身IP

這是服務端配置,如果這時候你充當一個客戶端去連線我這臺服務端會報錯,因為存在一個叫信任主機列表的東西,只有在信任主機列表中的主機才可以連線

於是在服務端中 winrm set winrm/config/client @{TrustedHosts="*"}

之後在攻擊機的powershell中執行 Test-WsMan 服務端IP

看看要遠端的服務端是不是開了winrm,有回顯證明OK

開了就可以搞了,用winrm成對出現的winrs命令(windows remote shell)

服務端=目標主機用來監聽; 客戶端=攻擊機用來連線

在攻擊機上執行命令連目標機

winrs -r:http://目標IP:5985 -u:administrator -p:password cmd 開啟互動cmd(此處IP變了是因為機器崩了換了連線目標,無所謂)

或者

winrs -r:http://目標IP:5985 -u:administrator -p:password ”ipconfig” 執行命令

0x07 PTH

PTH--pass the hash即雜湊傳遞,顧名思義,可以在不知道目標明文密碼的情況下,通過傳遞雜湊值(目標機的NTLM HASH 也好,LM HASH也罷),來進行遠端連線登入目標機或進行別的操作

嗯。。。鑑於mimikatz會被殺軟“一剪沒”或系統不支援,要麼免殺要麼換工具要麼改登錄檔,先不討論免殺,在此演示下預設可以使用mimikatz且是免殺的

PTH有前提是在跳板機上抓到的NTLM HASH得是有用的,即抓到的這個雜湊密碼是可以登入目標機器的,通常抓域管理員賬號密碼(不然你抓個啥,巧婦難為無米之炊),或者說內網中至少存在有一臺機器可以使用當前跳板機上抓到的這個雜湊密碼

本次演示我使用mimikatz以管理員許可權進行PTH(實際上,PTH只是一種想法不侷限於工具種類,與明文傳遞對應;可以像我用單獨的mimikatz工具PTH,自然也可以用CS、msf呼叫mimikatz,可以用msf模組,可以用上文提到的smbexec、wmiexec來PTH,可以用powershell指令碼PTH......隨你喜歡)

之後執行

sekurlsa::pth /user:要用的域使用者名稱 /domain:IP或者域名 /ntlm:要用的域賬號的Hash值

執行成功會反彈一個shell,在這個shell上用IPC$啥的連線目標機器就不需要使用者名稱密碼了

PTH如果要用本地管理員賬號,最好用sid為500的賬號進行橫向移動,這樣會排除一些補丁的影響導致訪問失敗的問題

不用mimikatz的話,還有一款叫kekeo的工具可以用來PTH

0x08 PTT

票據傳遞---pass the ticket 即票據傳遞,之所以說票據傳遞,傳遞的票據是指kerberos中與身份驗證相關的票據,通過偽造票據獲得目標機的訪問許可權

如果說PTH是基於NTLM的,則PTT是基於kerberos的;

關於PTT繞不開的三個方法:ms14068、golden ticket 、silver ticket

有名的ms14068漏洞(我之前的文章有演示過ms14068,可以翻翻,就不多說了)主要產生原因是允許經過身份驗證的使用者在其TGT中插入任意PAC,這就有大問題,改變了PAC的TGT獲得的票據會獲取和原來不一樣的許可權

利用ms14068還是需要工具的: https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

如果目標機器沒打相關補丁kb3011780,就能用ms14068一波帶走(手頭沒有沒打補丁的域控了,口述)

攻擊機上 whoami /all 看一下當前域使用者的sid

MS14-068.exe -u 域成員名@域名 -s 域成員sid -d 域控制器ip地址 -p 域成員密碼

如果正常執行成功後會在MS14-068.exe工具當前目錄下生成票據

然後用mimikatz把生成的票據(寫絕對路徑)注入到攻擊機記憶體中 kerberos::ptc 票據檔案

完事之後,提升到域控許可權,攻擊機即可連線到域中所有機器,net use \\機器名

之前的文章說過kerberos認證過程,簡單提了一下金銀票據

金銀票據與其說是橫向移動,不如說是拿下域控後,在目標機上留的有域管理員全部或部分許可權的後門,也算另一種意義上的橫向吧

白銀票據抓的是域控上計算機賬號的ntlm hash(SERVER為域控計算機名),在原本不能訪問域控共享目錄的機器上執行相關命令,就可以使這臺機器訪問域控共享目錄(選cifs服務時)

還有,利用金銀票據時,需要的域的SID填的是像紅框部分這種格式的內容,後面具體的id不需要填

關於命令什麼的就不在這寫了,網上有好多大佬的文章有寫,可能在後期想寫許可權維持的時候再整理吧

隨便轉載,請標明作者出處