本博客内容旨在技术学习交流,仅供学习参考之用,请勿用于任何非法用途,否则后果作者概不负责。
本人前段时间在研究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
#include
#include
#include
#include
//计算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个星期左右的时间,包括前期的搜集资料、确定方案、制定软件框架、设计破解流程,中间的编程实现,以及后期的无数次软件优化与测试,中间确实遇到了很多问题,然后不停地查资料,咨询大神,最后终于是把整个破解过程都整完了。感谢那些给予了我帮助的人儿,谢谢!