WPA2破解教程(詳細步驟)
本部落格內容旨在技術學習交流,僅供學習參考之用,請勿用於任何非法用途,否則後果作者概不負責。
一、前言
本人前段時間在研究WiFi破解(WPA2)的相關原理和具體步驟,期間在網上搜索了很多資料,也走了不少坑。最後發現網上大部分的資源都是利用Aircrack工具來破解的,其中某些具體的細節並沒有提及,如抓包過程、比對過程等。用工具破解的方法和具體步驟直接百度就可以找到了,很多。下面主要講手動破解的流程,即自己程式設計實現,不利用Aircrack工具。
在這裡本人將研究結果記錄下來,一是為了方便以後回顧查閱,二是為了給有類似問題的同胞們提供一些資料和參考。由於本人水平有限,如發現有任何錯漏之處,歡迎批評指出。
二、WPA2認證過程
要想破解wpa2,就要先了解其認證過程,還有一些基礎知識。
首先要了解一種加密演算法:雜湊演算法(hash),雜湊是一類演算法的統稱,包括MD5,SHA-1等等,這是一種不可逆運算,即你不可能通過運算結果來反向推出原來的值。
然後是握手過程,建議大家可以先網上搜索一些別人寫的部落格,瞭解下四次握手過程是怎樣的,心裡有個大概的框架,然後再詳細研究《802.11-2012.pdf》這個官方文件的第11章“11. Security”,以官方文件為主,而且要非常仔細地研究官方文件,非常仔細,非常仔細! 當研究完這個文件的第11章,你就徹底明白握手過程的具體步驟了。這點很重要,否則後面破解過程會有很多地方不能理解,無法進行。
三、破解過程
實驗環境:
目標機作業系統:openwrt
伺服器作業系統:Ubantu 14.04
終端:小米6 MIUI10
在目標機上進行抓包、解析資料報、提取有用資訊,然後通過Socket傳給伺服器,伺服器上進行最後的破解工作。
抓包,提取有用資訊 ---> 計算pmk、ptk等值 ---> 計算mic,進行比對 ---> 比對成功,得出WiFi密碼。
使用密碼字典破解wpa2的大概流程就如上面所示,比較難的部分應該是提取資訊以及演算法,下面將對流程進行詳細的講解。
1) 抓包
首先將用於抓包的網絡卡設定為monitor模式(有些網絡卡是不支援monitor模式的,本人實驗時用的是高通AR9331),然後用tcpdump命令或者libpcap庫進行抓包,只要能抓到包就可以,具體通過什麼方法並不重要。這一部要抓的其實只是4次握手包,其它包都不需要(用Aircrack工具抓包時會將所有的802.11的包都存到一個cap檔案裡,這個檔案又是要傳到伺服器端進行破解用的,所以會導致流量很大,這也是我為什麼不想利用工具,而要自己程式設計實現的原因)。
一般為了儘快抓到握手包,採取主動發Death攻擊包的方法,迫使終端斷開連線後自動重連,這樣就能很快抓到握手包了。發攻擊包可以使用aireplay-ng命令:
aireplay-ng -0 2 -a AA:BB:CC:DD:EE:FF wlan1
2)提取資訊
這一步是比較難的,要對抓到的資料包進行解析,篩選出四次握手包,再從握手包中提取出這些資訊,具體怎麼解析和篩選,這裡就不展開了,不是本文的重點。那四次握手包中有哪些我們需要的資訊呢?看下面:
Handshake 1:
AP將自己的隨機數ANonce、AMac發給Station。
Handshake 2:
Station收到了ANonce、AMac,然後將自己的隨機數SNonce、SMac發給AP,同時該包的eapol frame還包含KEY DATA和MIC。
注意:KEY DATA是後面計算MIC時需要用到的;該包裡的MIC是明文,是用ptk中的TK和KEY DATA進行雜湊運算後得到的,後面計算出來的MIC就是和這個MIC進行比對的。
Handshake 3:
包含ANonce、AMac、KEY DATA、MIC。
這裡的KEY DATA、MIC與H2(Handshake 2)的不一樣,H2的KEY DATA是沒有加密的,這個是加密過後的(使用PTK中的KEK進行加密);MIC也是不一樣,是分別進行雜湊運算得到的。
Handshake 4:
包含SNonce、MIC
上面紅色部分是我們需要的資訊,KEY DATA和MIC是在eapol frame中的。原理上講,eapol frame用H2或者H3的都是可以的,我用的是H2的,H3的沒試驗過。H4就沒有有用的資訊了,SNonce已經在H2拿到了。
3)計算pmk、ptk
AMac + Password ----> pmk
ANonce + SNonce + AMac + SMac + pmk ----> ptk
第一、二步在目標機上實現,目標機將第二步提取到的引數傳送給伺服器,由伺服器進行引數計算和比對。我這裡是用VMware上的Ubantu做虛擬伺服器的,你想都在目標機或虛擬機器上實現也可以,只要你的flash夠大就行(字典佔空間很大,幾個G的字典都算小的)。
問題來了,計算時每一步分別使用什麼演算法?我在網上居然搜不到!最後無奈之下只好去看Aircrac-ng的原始碼。。下面直接把演算法貼出來,需要用到openssl庫,include一些標頭檔案:
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <openssl/sha.h>
#include <openssl/aes.h>
#include <openssl/md5.h>
//計算pmk:
PKCS5_PBKDF2_HMAC_SHA1(pwd, strlen(pwd), ap_mac, strlen(ap_mac), 4096, LEN_PMK, pmk);
//計算ptk:
HMAC(EVP_sha1(), pmk, 32, data, 100, result, &result_len);
此時pmk、ptk已經算出來了,再提取ptk的前16位元組,得到kck。kck用於後續mic的計算。
4)計算mic、比對
這裡就要用到eapol frame了,將上面得到的kck與整個eapol幀進行HMAC_SHA1運算,得到mic。這裡不是用HMAC_MD5運算,網上有人說是HMAC_MD5,是錯的。
HMAC(EVP_sha1(), kck, LEN_PTK_KCK, eapol_frame, len_eapol, mic, NULL);
將計算出來的mic和握手包中的mic進行比對,如果一致,則說明用於計算pmk的Password是正確的,這個Password就是WiFi的密碼,反之則Password錯誤,繼續嘗試下一個Password。上面說到eapol frame用H2或者H3的都可以,如果你計算mic時是用H2的eapol,那就將結果與H2中的mic比對,如果是用H3的,就和H3的mic比對。
四、結束語
本人是剛入行Linux,對很多東西都是邊學邊用,研究這個花了3個星期左右的時間,包括前期的蒐集資料、確定方案、制定軟體框架、設計破解流程,中間的程式設計實現,以及後期的無數次軟體優化與測試,中間確實遇到了很多問題,然後不停地查資料,諮詢大神,最後終於是把整個破解過程都整完了。感謝那些給予了我幫助的人兒,謝謝!