原文:https://daiker.gitbook.io/windows-protocol/ntlm-pian/5
0x08 NBNS和LLMNR
windows 解析域名的順序是
- Hosts
- DNS (cache / server)
- LLMNR
- NBNS
如果Hosts文件里面不存在,就會使用DNS解析。如果DNS解析失敗,就會使用LLMNR解析,如果LLMNR解析失敗,就會使用NBNS解析
1. LLMNR
LLMNR 是一種基於協議域名系統(DNS)數據包的格式,使得兩者的IPv4和IPv6的主機進行名稱解析為同一本地鏈路上的主機,因此也稱作多播 DNS。監聽的端口為 UDP/5355,支持 IP v4 和 IP v6 ,並且在 Linux 上也實現了此協議。其解析名稱的特點為端到端,IPv4 的廣播地址為 224.0.0.252,IPv6 的廣播地址為 FF02:0:0:0:0:0:1:3 或 FF02::1:3。
LLMNR 進行名稱解析的過程為:
- 檢查本地 NetBIOS 緩存
- 如果緩存中沒有則會像當前子網域發送廣播
- 當前子網域的其他主機收到並檢查廣播包,如果沒有主機響應則請求失敗
也就是說LLMNR並不需要一個服務器,而是采用廣播包的形式,去詢問DNS,跟ARP很像,那跟ARP投毒一樣的一個安全問題就會出現。
當受害者訪問一個不存在的域名的時候。比如 hhhhhhhhhhhhhhhhhhhh
受害者在Hosts 文件里面沒有找到,通過DNS解析失敗。就會通過LLMNR協議進行廣播。
這個時候攻擊者就發個響應包 hhhhhhhhhhhhhhhhhhhh對應的IP是x.x.x.x(這個ip是攻擊者IP)進行LLMNR投毒。
這一步可以通過Responder 實現。
這個時候hhhhhhhhhhhhhhhhhhhh映射的ip就是攻擊者的IP,當受害者訪問hhhhhhhhhhhhhhhhhhhh就會訪問攻擊者的IP,攻擊者就能拿到net-ntlm hash.
2. NBNS
全稱是NetBIOS Name Service。
NetBIOS 協議進行名稱解析的過程如下:
- 檢查本地 NetBIOS 緩存
- 如果緩存中沒有請求的名稱且已配置了 WINS 服務器,接下來則會向 WINS 服務器發出請求
- 如果沒有配置 WINS 服務器或 WINS 服務器無響應則會向當前子網域發送廣播
- 如果發送廣播后無任何主機響應則會讀取本地的 lmhosts 文件
lmhosts 文件位於C:\Windows\System32\drivers\etc\
目錄中。
NetBIOS 協議進行名稱解析是發送的 UDP 廣播包。因此在沒有配置 WINS 服務器的情況底下,LLMNR協議存在的安全問題,在NBNS協議里面同時存在。使用Responder也可以很方便得進行測試。這里不再重復展示。