一,動態主機配置協議DHCP
1,DHCP簡介
DHCP(Dynamic Host Configuration Protocol),動態主機配置協議,是一個應用層協議。當我們將客戶主機ip地址設置爲動態獲取方式時,DHCP服務器就會根據DHCP協議給客戶端分配IP,使得客戶機能夠利用這個IP上網。
DHCP的前身是BOOTP協議(Bootstrap Protocol),BOOTP被創建出來爲連接到網絡中的設備自動分配地址,後來被DHCP取代了,DHCP比BOOTP更加複雜,功能更強大。後面可以看到,在用Wireshark過濾顯示DHCP包,需要輸入過濾條件BOOTP,而不是DHCP,但或許是因爲我使用的Wireshark版本是比較舊的1.12.9,沒有在新版本中嘗試過,也許可以輸入DHCP讓其只顯示DHCP包。
2,DHCP的實現
DHCP的實現分爲4步,分別是:
第一步:Client端在局域網內發起一個DHCP Discover包,目的是想發現能夠給它提供IP的DHCP Server。
第二步:可用的DHCP Server接收到Discover包之後,通過發送DHCP Offer包給予Client端應答,意在告訴Client端它可以提供IP地址。
第三步:Client端接收到Offer包之後,發送DHCP Request包請求分配IP。
第四步:DHCP Server發送ACK數據包,確認信息。
二,利用Wireshark抓取DHCP包
1,分析
要想抓取到DHCP包,先要保證有可用的DHCP服務器,然後將主機IP地址獲取方式設置爲自動獲取。如果主機在抓包之前已經聯網,需要先斷開主機的網絡連接,然後再連接網絡。在cmd下使用命令ipconfig來完成網絡斷開與連接的過程:
<code class=”hljs dos has-numbering” style=”display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: “Source Code Pro”, monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;”> <span class=”hljs-winutils” style=”color: rgb(0, 0, 136); box-sizing: border-box;”>ipconfig</span> /release 斷開主機當前的網絡連接 <span class=”hljs-winutils” style=”color: rgb(0, 0, 136); box-sizing: border-box;”>ipconfig</span> /renew 請求連接網絡 </code><ul class=”pre-numbering” style=”box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);”><li style=”box-sizing: border-box; padding: 0px 5px;”>1</li><li style=”box-sizing: border-box; padding: 0px 5px;”>2</li><li style=”box-sizing: border-box; padding: 0px 5px;”>3</li></ul>
在cmd中可以使用ipconfig /?查看各參數的含義:
(1)ipconfig /release
斷開當前的網絡連接,主機IP變爲0.0.0.0,主機與網絡斷開,不能訪問網絡。
(2)ipconfig /renew
更新適配器信息,請求連接網絡,這條命令結束之後,主機會獲得一個可用的IP,再次接入網絡。
2,開始抓包
實驗環境:Win10,Wireshark1.12.9,有線連接
(1)在Wireshark中點擊start開始抓包,在過濾欄輸入bootp,使其只顯示DHCP數據包。
(2)在cmd中輸入ipconfig /release 斷開網絡連接。
可以看到此時所有的網卡都已經斷開。以太網處於斷開狀態。
Wireshark中截獲到一個DHCP Release數據包。
(3)在cmd中輸入ipconfig /renew 請求網絡連接。
此時,可以看到在Wireshark中新增了4個DHCP數據包:
數據包1:DHCP Discover
數據包2:DHCP Offer
數據包3:DHCP Request
數據包4:DHCP ACK
等待這條命令執行完畢之後,在cmd中可以看到主機被分配了IP,主機成功連入網絡中。
(4)爲了後續分析使用,我們再執行一次ipconfig /renew:
可以看到Wireshark中新增了3個數據包:DHCP ACK;DHCP Request;DHCP ACk。
如果再次使用ipconfig /renew,每執行一次會新增2個數據包:DHCP Request;DHCP ACk。
三,DHCP包分析
下面着重來分析當執行,ipconfig /renew這條命令產生的4個DHCP數據包,這4個數據包代表了客戶機和DHCP服務器的交互過程,也是IP動態分配的過程。
1,DHCP Discover數據包
(1)Client端使用IP地址0.0.0.0發送了一個廣播包,可以看到此時的目的IP爲255.255.255.255。Client想通過這個數據包發現可以給它提供服務的DHCP服務器。
(2)從下圖可以看出,DHCP屬於應用層協議,它在傳輸層使用UDP協議,目的端口是67。
2,DHCP Offer包
當DHCP服務器收到一條DHCP Discover數據包時,用一個DHCP Offerr包給予客戶端響應。
(1)DHCP服務器仍然使用廣播地址作爲目的地址,因爲此時請求分配IP的Client並沒有自己ip,而可能有多個Client在使用0.0.0.0這個IP作爲源IP向DHCP服務器發出IP分配請求,DHCP也不能使用0.0.0.0這個IP作爲目的IP地址,於是依然採用廣播的方式,告訴正在請求的Client們,這是一臺可以使用的DHCP服務器。
(2)DHCP服務器提供了一個可用的IP,在數據包的Your (client) IP Address字段可以看到DHCP服務器提供的可用IP。
(3)除此之外,如圖中紅色矩形框的內容所示,服務器還發送了子網掩碼,路由器,DNS,域名,IP地址租用期等信息。
3,DHCP Request包
當Client收到了DHCP Offer包以後(如果有多個可用的DHCP服務器,那麼可能會收到多個DHCP Offer包),確認有可以和它交互的DHCP服務器存在,於是Client發送Request數據包,請求分配IP。
此時的源IP和目的IP依然是0.0.0.0和255.255.255.255。
4,DHCP ACK包
服務器用DHCP ACK包對DHCP請求進行響應。
在數據包中包含以下信息,表示將這些資源信息分配給Client.
Your(client) IP address:分配給Client的可用IP。
後面有許多項option信息,前兩項是DHCP服務器發送的消息類型(ACK)和服務器的身份標識,後面幾項是:
Subnet Mask:Client端分配到的IP的子網掩碼;
Router:路由器
Domain Name Server:DNS,域名服務器
Domain Name:域名
IP Address Lease Time:IP租用期。
四,DHCP starvation attack
1,DHCP starvation attack,DHCP飢餓攻擊
其實各種各樣的攻擊技術總是會讓人覺得興奮。拋卻道德不談,必須承認的是,製造這些攻擊的人都是高智商。
有許多中攻擊DHCP的技術,這裏介紹其中一種,有點類似於SYN 洪範攻擊。
DHCP starvation attack,中文即DHCP飢餓攻擊,可以顧名思義一下,飢餓攻擊,就是大量地進食,把可以吃的食物全部吃完,然後讓其他人沒得吃,最後給其他人提供一些毒藥,把人家毒死,姑且可以這樣淺顯地認爲。
下面來說這種攻擊是如何實現的。一些不法分子,僞造合法的MAC地址,不斷地向DHCP服務器發出DHCP Request包,最後耗盡服務器的可用IP,於是原有的這臺DHCP服務器便不能夠給客戶端分配IP了,此時不法分子再僞造一臺DHCP服務器,給客戶端分配IP,將客戶端的默認網關和DNS都設置成自己的機器,於是便可以對客戶端進行中間人攻擊。