1. 程式人生 > >WPA2破解教程(詳細步驟)

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 DATAMIC

        注意: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個星期左右的時間,包括前期的蒐集資料、確定方案、制定軟體框架、設計破解流程,中間的程式設計實現,以及後期的無數次軟體優化與測試,中間確實遇到了很多問題,然後不停地查資料,諮詢大神,最後終於是把整個破解過程都整完了。感謝那些給予了我幫助的人兒,謝謝!