wpa2破解代碼思路(教你寫poc)
作者:kaikaix
來源:i春秋社區
1、前言
由於我在學校,所以沒有電腦,只能寫一篇偽代碼了
我會介紹關於
1、wpa2協議漏洞的產生原因
2、scapy這個數據包庫的基礎
3、最後講解代碼思路,讓你們從偽代碼可以直接寫成代碼
大家可以先看看官方文檔
如果不是很熟悉scapy,推薦看一下我這篇文章的代碼https://bbs.ichunqiu.com/thread-18592-1-1.html ,http://pan.baidu.com/s/1boVAf63
ps:要會wireshark和Python基礎 這很重要。
2、wpa2漏洞
當用戶要連接AP(WIFI)將會和AP有四次握手:
前2次不需要關注主要是後2次
(3)AP向用戶發送一個密鑰,用來加密用戶數據的密鑰
(4)用戶發送ack,表示自己接受到了
那麼漏洞是怎麼產生的,那就要了解一下wpa2的mitm了(中間人攻擊)
1、先創建一個一模一樣的AP(ssid一樣),而且信號要好過真正的AP(應該也可以用mdk3,強制一直斷網)
2、用mdk3或者其他工具,斷了用戶的網路(mdk3的用法就不講了,你們可以自行百度,當然待會會用到fluxion,那裡自帶斷網功能)
3、用戶會重新連接,因為偽造AP信號強,所以連到偽造AP,向他發送四次握手
請看示意圖
好,接下來說一下wpa2的漏洞
1、AP向用戶發送一個密鑰,用來加密用戶數據的密鑰
2、用戶安裝密鑰,然後從內存把密鑰清0,發送ack數據包
3、攔截ack數據包
4、AP沒有收到ACK數據包,重新發送密鑰
5、用戶接收到密鑰,從清0的內存重新安裝了一個為0的密鑰
這樣真正AP就會重發密鑰,這裡可以看看360發的,比我講的好,或者直接看文檔 。
3、介紹一些關於scapy的用法 kali自帶scapy Linux安裝: https://github.com/secdev/scapy/archive/v2.3.2.zip 解壓後進入文件夾,輸入Python setup.py install 剩下的可以看看我的這篇文章 https://bbs.ichunqiu.com/thread-18592-1-1.html 要知道2個重要的函數 (1)sniff(prn=fun) 用於嗅探,把嗅探到的每個數據包都放入fun這個函數進行處理 (2)sendp(packet,iface="你的網卡名") 這個函數工作在osi第二層,wpa協議也是第二層的協議 packet是要發送的數據包 iface是網卡,網卡名就是類似wlan0那種 在Python解釋器導入庫 from scapy.all import 如果要查看有的數據包,可以用 ls() 這裡用到的數據包一般都是Dot的 如果要看數據包的有的參數,可以使用ls(名字) 比如:ls(TCP) 創建數據包可以看看我那篇WIFIDOS的代碼 4、創建熱點 我覺得用fluxion就可以了 https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=17554&highlight=fluxion 可以看這篇文章,來創建偽造AP。當你創建了熱點,有一些窗口是要關閉的,因為這會妨礙到程序的正常工作 如果fluxion不可以,那就用其他方法創建wifi,不知道hostapd行不行,我試不了,不知道在那種模式下能不能啟動網卡監聽模式,只能你們實驗了 如果也不可以 可以試一下http://xiao106347.blog.163.com/blog/static/215992078201463597381/ 這篇文章 記住,wifi名字要和真正的wifi名字相同5、攔截ack數據包攔截ack數據包只要不讓真正AP接受到ack數據包就可以了 我們需要用到scapy,如果對scapy不是很了解還是看一下我這篇文章https://bbs.ichunqiu.com/thread-18592-1-1.html比較好 導入庫 from scapy.all import * 因為你用fluxion創建熱點的時候已經啟動了監聽模式,這裡就不用開啟了。
直接嗅探
sniff(prn=catch_4,iface="wlan0")
把抓取的每個數據都丟進catch_4進行處理
這裡需要你們用wireshark進行分析數據包的結構,這樣才能判斷是不是ack數據包
def sniff(pkt): if i==0: if pkt.haslayer(EAPOL) and pkt.type ==2: #還需要進一步進行判斷是不是第四個ack數據包,這就需要你們抓到包自己分析了 i=i+1
pkt.haslayer(EAPOL)意思是是否存在EAPOL eapol=pkt.getlayer(EAPOL)就是取這一層的內容,也就是這一層的上面信息全部不取,比如 udp=pkt.getlayer(UDP)可以獲得udp的信息 http=udp.getlayer(HTTP)又從udp中讀取http的信息 分析數據包的思路就是wireshark肯定有標識是不是ack的,或者抓包直接分析最後一個eapol數據包 還要判斷準確性,也就是判斷他們目的地是不是那個真實AP 如果不滿足上面那些條件(i=0 and 是ack數據包),就把這個數據包調用sendp發送 sendp(pkt,iface="wlan0") 如果滿足上面那些條件就不發送數據包,相當於劫持下了ack數據包,而且i+=1 這樣可以防止第二次發送ack數據包的時候又被攔截下來,如果你想標識用戶的話可以用字典 {"用戶mac":次數}這樣就可以記錄是不是同一個用戶的ack請求了,提取mac的方法沒代碼和數據包不好說,所以還是你們自己分析吧
6、結語
密鑰就變成0了應該,我也不敢確定我的理解對不對,大致代碼思路就是這樣,如果我錯了,求指出我的錯誤 http://pan.baidu.com/s/1qYHmK5u最後送上一本書,我從裡面學的scapy
推薦閱讀:
※挑戰4個任務:迅速上手Unicorn Engine
※黑客如何接管銀行的所有在線業務?
※Linux 防火牆技術
※刺風有道,吳翰清的雲端飛揚
※脫褲和撞褲