網絡掃描:DHCP被動掃描
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個局域網的網絡協議,主要作用就是給內部網或網絡服務供應商自動分配IP地址。當一個客戶端需要獲取一個IP地址時,將會向DHCP服務器發送廣播包,收到請求的服務器會提供一個可用的IP地址給客戶端,所以可以監聽該協議的包。本文介紹實施DHCP被動掃描的方法。
1. DHCP工作機制
DHCP協議采用UDP作為傳輸協議,主機發送請求消息到DHCP服務器的67號端口,DHCP服務器回應應答消息給主機的68號端口。DHCP協議的具體工作流程如圖1所示。

圖1 DHCP工作流程
DHCP工作流程的詳細交互過程如下:
1)DHCP客戶端以廣播的方式發出DHCP Discover報文。
2)所有的DHCP服務器都能夠接收到DHCP客戶端發送的DHCP Discover報文,所有的DHCP服務器都會給出響應,向DHCP客戶端發送一個DHCP Offer報文。DHCP Offer報文中Your(Client)IP Address字段就是DHCP服務器能夠提供給DHCP客戶端使用的IP地址,且DHCP服務器會將自己的IP地址放在Option字段中以便DHCP客戶端區分不同的DHCP服務器。DHCP服務器在發出此報文后會存在一個已分配IP地址的記錄。
3)DHCP客戶端只能處理其中的一個DHCP Offer報文,一般的原則是DHCP客戶端處理最先收到的DHCP Offer報文。DHCP客戶端會發出一個廣播的DHCP Request報文,在選項字段中會加入選中的DHCP服務器的IP地址和需要的IP地址。
4)DHCP服務器收到DHCP Request報文后,判斷選項字段中的IP地址是否與自己的地址相同。如果不相同,DHCP服務器不做任何處理只清除相應IP地址分配記錄。如果相同,DHCP服務器就會向DHCP客戶端響應一個DHCP ACK報文,并在選項字段中增加IP地址的使用租期信息。
5)DHCP客戶端接收到DHCP ACK報文后,檢查DHCP服務器分配的IP地址是否能夠使用。如果可以使用,則DHCP客戶端成功獲得IP地址,并根據IP地址使用租期自動啟動續延過程。如果DHCP客戶端發現分配的IP地址已經被使用,則DHCP客戶端向DHCP服務器發出DHCP Decline報文,通知DHCP服務器禁用這個IP地址。然后,DHCP客戶端將開始新的地址申請過程。
6)DHCP客戶端在成功獲取IP地址后,隨時可以通過發送DHCP Release報文釋放自己的IP地址。DHCP服務器收到DHCP Release報文后,會回收相應的IP地址并重新分配。
2. 被動掃描
通過對DHCP協議的工作流程進行分析可知,當客戶端請求獲取IP地址時,會發送一個DHCP Discover廣播包,此時,局域網中的所有主機都可以收到該數據包。所以,通過監聽方式,即可實現DHCP被動掃描。下面介紹實施DHCP被動掃描的方法。
(1)使用Nmap工具
在Nmap中,提供了一個broadcast-dhcp-discover腳本能夠用來發送一個DHCP Discover廣播包,并顯示響應包的具體信息。通過對響應包的信息進行分析,能夠找到可分配的IP地址。使用broadcast-dhcp-discover腳本實施被動掃描的語法格式如下:
nmap --script broadcast-dhcp-discover
使用broadcast-dhcp-discover腳本向局域網中發送DHCP Discover廣播包。執行命令如下:
root@daxueba:~# nmap --script broadcast-dhcp-discover
Starting Nmap 7.70 ( https://nmap.org ) at 2021-07-07 17:30 CST
Pre-scan script results:
| broadcast-dhcp-discover:
| Response 1 of 1:
| IP Offered: 192.168.33.156 #提供的IP地址
| DHCP Message Type: DHCPOFFER #DHCP消息類型
| Server Identifier: 192.168.33.254 #服務器標識符
| IP Address Lease Time: 30m00s #IP地址釋放時間
| Subnet Mask: 255.255.255.0 #子網掩碼
| Router: 192.168.33.2 #路由地址
| Domain Name Server: 192.168.33.2 #域名服務
| Domain Name: localdomain #域名
| Broadcast Address: 192.168.33.255 #廣播地址
| NetBIOS Name Server: 192.168.33.2 #NetBIOS名稱服務
| Renewal Time Value: 15m00s #更新時間值
|_ Rebinding Time Value: 26m15s #第二次選擇時間值
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.32 seconds
從以上輸出信息中可以看到,可以提供的IP地址為192.168.33.156。
(2)使用dhcpdump工具
dhcpdump是一個命令行格式的DHCP流量嗅探工具,可以捕獲DHCP的請求/回復流量,并以用戶友好的方式顯示解碼的DHCP協議消息。使用dhcpdump工具實施被動掃描的語法格式如下:
dhcpdump -i [interface]
其中,-i[interface]表示指定監聽的網絡接口。
在Kali Linux中,默認沒有安裝dhcpdump工具。如果要使用該工具,則必須先安裝。執行命令如下:
root@daxueba:~# apt-get install dhcpdump
執行以上命令后,如果沒有報錯,則說明安裝成功。
使用dhcpdump工具實施被動掃描。執行命令如下:
root@daxueba:~# dhcpdump -i eth0
TIME: 2021-07-07 17:33:29.634 #時間
IP: 0.0.0.0 (0:c:29:fd:58:4b) > 255.255.255.255 (ff:ff:ff:ff:ff:ff) #IP地址
OP: 1 (BOOTPREQUEST) #報文類型
HTYPE: 1 (Ethernet) #客戶端的網絡硬件地址類型
HLEN: 6 #客戶端的網絡硬件地址長度
HOPS: 0 #跳數
XID: 5a162962 #事務ID
SECS: 0 #秒數
FLAGS: 0 #標志
CIADDR: 0.0.0.0 #客戶端自己的IP地址
YIADDR: 0.0.0.0 #你的IP地址
SIADDR: 0.0.0.0 #服務器的IP地址
GIADDR: 0.0.0.0 #中繼代理IP地址
CHADDR: 00:0c:29:fd:58:4b:00:00:00:00:00:00:00:00:00:00 #客戶端硬件地址
SNAME: . #服務器的主機名
FNAME: . #啟動文件名
OPTION: 53 ( 1) DHCP message type 3 (DHCPREQUEST) #選項
OPTION: 12 ( 7) Host name daxueba
OPTION: 55 ( 16) Parameter Request List 1 (Subnet mask)
28 (Broadcast address)
2 (Time offset)
3 (Routers)
15 (Domainname)
6 (DNS server)
119 (Domain Search)
12 (Host name)
44 (NetBIOS name server)
47 (NetBIOS scope)
26 (Interface MTU)
121 (Classless Static Route)
42 (NTP servers)
249 (MSFT - Classless route)
33 (Static route)
252 (MSFT - WinSock Proxy Auto Detect)
----------------------------------------------------------
TIME: 2021-07-07 17:33:29.634 #時間
IP: 192.168.33.254 (0:50:56:f7:d0:3e) > 192.168.33.152 (0:c:29:fd:58:4b) #IP地址
OP: 2 (BOOTPREPLY) #報文類型
HTYPE: 1 (Ethernet) #客戶端的網絡硬件地址類型
HLEN: 6 #客戶端的網絡硬件地址長度
HOPS: 0 #跳數
XID: 5a162962 #事務ID
SECS: 0 #秒數
FLAGS: 0 #標志
CIADDR: 0.0.0.0 #客戶端自己的IP地址
YIADDR: 192.168.33.152 #你的IP地址
SIADDR: 192.168.33.254 #服務器的IP地址
GIADDR: 0.0.0.0 #中繼代理IP地址
CHADDR: 00:0c:29:fd:58:4b:00:00:00:00:00:00:00:00:00:00 #客戶機硬件地址
SNAME: . #服務器的主機名
FNAME: . #啟動文件名
OPTION: 53 ( 1) DHCP message type 5 (DHCPACK) #選項
OPTION: 54 ( 4) Server identifier 192.168.33.254
OPTION: 51 ( 4) IP address leasetime 1800 (30m)
OPTION: 1 ( 4) Subnet mask 255.255.255.0
OPTION: 28 ( 4) Broadcast address 192.168.33.255
OPTION: 3 ( 4) Routers 192.168.33.2
OPTION: 15 ( 11) Domainname localdomain
OPTION: 6 ( 4) DNS server 192.168.33.2
OPTION: 44 ( 4) NetBIOS name server 192.168.33.2
--------------------------------------------
以上輸出的信息,就是一個DHCP請求及響應包信息。通過對以上輸出結果的分析,可知道第一個包為BOOTPREQUEST(請求),第二個包為BOOTPREPLY(響應)。