aireplay-ng -0 2 -a AA:BB:CC:DD:EE:FF wlan1
本文旨在分享关于WiFi破解(WPA2)的技术原理和步骤,仅供学习参考,请勿用于非法用途,否则后果自负。
一、引言
最近,我在研究WiFi破解(WPA2)的相关原理和具体步骤。在这个过程中,我发现大部分网络资源都是使用Aircrack工具进行破解,但其中的一些细节并没有详细说明,例如抓包过程和比对过程。因此,我决定自己编程实现手动破解的流程,而不使用Aircrack工具。
我将在这篇博客中记录下我的研究结果,一方面是为了方便日后回顾和查阅,另一方面也是为了为有类似问题的人提供一些资料和参考。鉴于我的能力有限,如果发现任何错误或遗漏之处,请随时指正。
二、WPA2认证过程
要破解WPA2,首先需要了解其认证过程和一些基础知识。首先,我们需要了解一种加密算法:哈希算法(hash)。哈希算法是一类算法的统称,包括MD5、SHA-1等等。它是一种不可逆运算,即无法通过运算结果反推出原始值。
其次,我们需要了解握手过程。我建议先在网上搜索一些其他人写的博客,了解四次握手过程的大致框架,然后再详细研究官方文档《802.11-2012.pdf》中的第11章“11. Security”。在研究官方文档时,要非常仔细地阅读,因为后面的破解过程会涉及到很多细节,如果对握手过程的具体步骤不理解,将无法进行破解。
三、破解过程
实验环境:
- 目标机操作系统:OpenWrt
- 服务器操作系统:Ubuntu 14.04
- 终端:小米6 MIUI10
破解过程分为以下几个步骤:
1)抓包
首先,将用于抓包的网卡设置为监控模式(请注意,不是所有网卡都支持监控模式,我在实验中使用的是高通AR9331)。然后,使用tcpdump命令或libpcap库进行抓包。只要能够抓到握手包即可,具体使用何种方法并不重要。在这一步中,我们只需要抓取四次握手包,其他包可以忽略(使用Aircrack工具抓包时,会将所有的802.11包存储在一个cap文件中,这个文件需要传输到服务器进行破解,导致流量很大。这也是我选择自己编程实现的原因)。
通常为了尽快抓到握手包,可以采用主动发起Deauth攻击包的方法,迫使终端断开连接后自动重新连接,从而快速抓取握手包。可以使用aireplay-ng命令来发送攻击包。
2)提取信息
这一步比较困难,需要对抓取到的数据包进行解析,筛选出四次握手包,并从中提取所需的信息。具体的解析和筛选方法在此不展开讨论,因为不是本文的重点。那么,四次握手包中有哪些我们需要的信息呢?请看下面:
- 握手1:AP将自己的随机数ANonce和AMac发送给Station。
- 握手2:Station收到ANonce和AMac后,将自己的随机数SNonce和SMac发送给AP。此外,该包的EAPOL帧还包含KEY DATA和MIC。
注意:KEY DATA是计算MIC时需要用到的;该包中的MIC是明文,是使用PTK中的TK和KEY DATA进行哈希运算得到的,后面计算出的MIC将与此进行比对。 - 握手3:包含ANonce、AMac、KEY DATA和MIC。
这里的KEY DATA和MIC与握手2中的不同,握手2中的KEY DATA是未加密的,而这里的KEY DATA经过加密(使用PTK中的KEK进行加密);MIC也不同,是分别进行哈希运算得到的。 - 握手4:包含SNonce和MIC。
上述红色部分是我们需要的信息,KEY DATA和MIC位于EAPOL帧中。理论上讲,使用握手2或握手3中的EAPOL帧都可以,我使用的是握手2的,握手3的我没有尝试过。
3)计算PMK和PTK
AMac + Password —-> PMK
ANonce + SNonce + AMac + SMac + PMK —-> PTK
前两步在目标机上实现,目标机将第二步提取到的参数发送给服务器,由服务器进行参数计算和比对。我在这里使用了VMware上的Ubuntu作为虚拟服务器,您也可以选择在目标机或虚拟机上实现,只要您的存储空间足够大(字典占用的空间很大,几个GB的字典都算是小的)。
问题来了,每一步计算时要使用什么算法?我在网上居然找不到相关信息!最后,我只好查看Aircrack-ng的源代码。下面是相关算法的代码,需要使用openssl库,包括一些头文件:
//计算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帧。将上述得到的KCK与整个EAPOL帧进行HMAC-SHA1运算,得到MIC。请注意,这里不是使用HMAC-MD5运算,有人在网上错误地说是HMAC-MD5。
将计算得到的MIC与握手包中的MIC进行比对,如果一致,则说明用于计算PMK的Password是正确的,这个Password就是WiFi的密码。反之,如果不一致,则说明Password错误,可以尝试下一个Password。如果您在计算MIC时使用的是握手2的EAPOL帧,则将结果与握手2中的MIC进行比对;如果使用的是握手3的EAPOL帧,则与握手3的MIC进行比对。
四、结束语
作为一个刚入门Linux的新手,我在学习和使用过程中遇到了很多问题。研究WiFi破解花费了我大约三个星期的时间,包括前期的资料收集、方案确定、软件框架设计、破解流程设计,以及后期的编程实现、软件优化和测试。期间遇到了很多问题,不断查阅资料并向专家请教,最终成功完成了整个破解过程。在此,我要感谢那些给予我帮助的人,谢谢你们!