內網橫向移動常見方法


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

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

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

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

(填坑:在windows中抓取hash小結

上   https://www.cnblogs.com/lcxblogs/p/13957899.html

下   https://www.cnblogs.com/lcxblogs/p/14002468.html

 

實際上,關於橫向移動,實際操作過程中可以分析的細節太多,有很多大佬說的非常詳細,可以去看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進行混淆免殺效果更好,我就不用這個演示了

 

 果不其然被目標機器干了,kali虛擬機,目標機器是本地物理機上有殺軟(另: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)(根據winrm版本不同默認監聽端口可能還有80 443的,不過這都是老版本),有些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不需要填

 

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

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM