一个客户端连接上一个无线热点时,它们之间会交换一些数据,如果我们能抓获这些数据,我们便有望得到这个无线热点的密码。看完这篇文章,您将会收获:
客户端使用正确的密码连接上无线热点的过程抓获它们连接时传输的数据并从中解析密码的手段在进行这篇文章的实验之前,请确定基本的环境已经准备好了:
无线网络安全第一步:在虚拟机上配置kali
以及,对Kali系统一些基本的命令行操作也已经有所了解,也已经准备好了一块今天实验所必需的无线网卡:
无线网络安全学习:网卡准备与常用的命令行操作
在学习的过程中,如果有疑问,可以私信作者,或者在文章下评论,我会竭尽全力为各位读者答疑解惑。
可能无聊但是请耐心听完的理论讲解在这一部分,我们会了解Wifi认证过程中的四次握手过程,这是我们接下来实验的知识储备。
首先,我们的数据通过无线的方式传输,也就是通过电磁波(也就是光)形式传输,是不如以有线的方式(电)传输安全的。因为电传播的介质是导线,有线网络的介质是网线,网线走到哪里数据传输到哪里,而无线网络是以光的形式向外辐射的,光能到达的地方数据都能到达。
所以,在无线传输中,一定要有一种可靠的加密算法来保护我们的数据,保护它不让它被不该知道的人知道。
最先被提出的加密方式是WEP,它是Wired Equivalent Privacy的简称。翻译过来,就是有线等效保密。它是在IEEE 802.11最初提出时,作为其一部分被一同提出的。提出这个算法的委员会认为,这个加密方式和有线传输一样安全,因此为它这样命名。
很遗憾的是,这个号称“与有线一样安全”的加密方式的寿命仅仅持续了不到5年(1999年9月提出的IEEE802.11,在2003年被WPA淘汰)。它的漏洞实在太严重了,能够解决它的安全问题的办法,只剩下更换更安全的WPA或者WPA2。
“……对 WEP 安全问题最广为推荐的解法是换到 WPA 或 WPA2,不论哪个都比 WEP 安全。”——百度百科
取而代之的是WPA,Wifi Protected Access,直译是Wifi保护访问。在2004年又发布了IEEE802.11i,它修订了之前的WPA,提出了更加可靠、安全的WPA2,这个加密方式被一直沿用至今,保护无线通讯的安全。下面,我们就来简要了解采取这个加密方式加密的无线热点的认证过程中,客户端与路由器之间发生的故事,也就是四次握手:
①路由器向客户端发送一个随机数(记为随机数1)。这是第一次握手。
②客户端收到了这个随机数1,自己再产生一个随机数(记为随机数2)然后客户端以随机数1、随机数2、输入的Wifi密码这三个参数,通过一种函数关系,生成一个密码(记为PTK)
随即,客户端将随机数2,它计算出来的这个PTK,发回给路由器。这是第二次握手。
③路由器收到了随机数2,它自己是知道自己的Wifi密码的,于是它也通过随机数1、随机数2、自己的Wifi密码这三个参数,通过客户端中同样的函数关系,生成一个PTK。
对比客户端发过来的PTK和自己的PTK,如果通过固定的函数关系,运算出来的结果是一样的,也就是发过来的PTK等于自己计算出来的PTK,说明三个参数(随机数1、随机数2、输入的密码)都是一样的,也就是客户端输入的密码正是自己的Wifi密码,通过认证。反之,握手结束。
在这里可能有的读者会问:一个输入只对应一个输出,但是一个输出却未必只对应一个输入?也就是说凭什么就这样认为输入的密码和正确的Wifi密码相同?也有可能是虽然不相同,但是函数运算出相同的结果呢?这是一个好问题,能够问出这个问题,就说明您已经确实地在思考了。生成PTK的这个算法,是我们软件运算中最常见的,Hash,也叫散列运算。它将不同长度的输入映射成长度相同、独一无二的输出,并且,没有办法从输出确定唯一的输入,因此,我们可以通过比较输出来在不知道输入的情况下比较输入。的确存在两个输入映射成同样的输出的情况出现,这也称为哈希碰撞。是有办法避免哈希碰撞的情形的,采取某种措施,可以将碰撞的几率降低到可以忽略的程度。有兴趣的读者可以在网上自行了解。因此,在这里,就认为输入的密码正是正确的Wifi密码。
认证成功后,路由器发送另外的一个密钥给客户端。这是第三次握手。
④客户端收到密钥后,发送消息给路由器,告诉对方已经收到密钥了。这是第四次握手。
四次握手的数据包都是以明文形式传输的,因此,我们可以通过捕获四次握手的数据包(简称为握手包),来得到随机数1、随机数2,以及PTK。
将可能的Wifi密码罗列出来,做成一个字典。我们将每个密码和两个随机数进行同样的运算,再和PTK作对比,如果相同,说明该密码就是正确的Wifi密码。
更加有趣的实际操作部分首先,我们设置一个Wifi,密码就随便设置成12345678.
然后,我们让我们的物理电脑连接上这个Wifi。
打开我们的Kali Linux,使用airodump-ng wlan0mon来扫描周围的Wifi
这个PWR最大的Wifi当然就是我设置的无线热点啦,因为离得最近,信号最好,所以PWR也最大。CH说明是在11信道。
使用airodump-ng --bssid **:**:**:**:**:** -c 11 -w test wlan0mon来指定嗅探的Wifi,并把抓到的握手包包保存在当前目录cap.cap里。当然如果你没有抓到握手包就不会有test.cap这样的文件。这样可以仅得到这个Wifi及连接上的客户端的信息。
现在就能清晰地看到,我的电脑是这个Wifi的唯一的客户端。我们已经得到了我手机网卡的Mac和我电脑的无线网卡的Mac了。(但其实你们并没有得到)
之前我们说过,握手包是只有在客户端和路由器认证的时候才会发送的数据包,除非我们等到第二个客户端连上我的热点,不然是抓不到握手包的。
但是,有一个办法能让我们更快地拿到这个握手包。那就是deauth攻击。
路由器有能力要求客户端和自己解除连接。当它要这样做的时候,它会发送一个deauth数据包给客户端。然后客户端就会和路由器断开连接。但是这并不是客户端网卡的意愿,它没有那么好打发,被踹掉之后会第一时间尝试重新连接上这个路由器。
而deauth攻击的原理就是模拟路由器发这个deauth数据包给客户端。如果你不想让你烦人的室友在寝室大声玩网络游戏,而他又恰好连着寝室的wifi,就一直对他使用deauth攻击吧。
我们新建一个窗口,使用aireplay-ng -0 2 -a **:**:**:**:**:** -c --:--:--:--:--:-- wlan0mon这个命令,使用wlan0mon网卡对mac地址为**:**:**:**:**:**的路由器的mac地址为--:--:--:--:--:--的客户端发送时长为2秒钟的deauth攻击。
发送了之后,就会在原来的airodump-ng那个窗口的右上角,出现一行
WPA handshake:你的WIFI的MAC地址
就说明已经抓到握手包了。如果没有抓到,可以增加攻击时间,或者调整无线网卡接收器的角度。
我们按ctrl c退出,输入ls,看到的确有cap文件了。
然后将含有12345678的字典文件(随便在网上找个字典都不可能没有12345678)passwd.txt也放到这里。执行命令
aircrack-ng -w passwd.txt cap-01.cap
提示KEY FOUND! [12345678],的的确确找到这个密码了。
虚拟机跑字典的速度比较慢,使用物理机结合GPU一起运算,跑字典的速度随着配置的提升速度最高可以达到几百万。
总结今天我们学习了wifi认证的四次握手,以及通过deauth攻击使已经连接的客户端与路由器重新连接来抓取握手包,并通过字典来套wifi密码的操作。
但不要以为学会这招就可以为所欲为地蹭网了。
诚然只要字典够大,跑得够快,理论上来说,wifi密码总能破解的。
但是,随便计算一下。假设我们采取10位的wifi密码,每一位有a-z,A-Z,0-9,26 26 10=62种可能,也就是62^10种密码的可能,每一密码的长度是10字节,那么我们的字典文件就至少有8*10^17字节,粗略换算,就是800000TB。还有特殊符号,以我们的普通电脑的运算速度……
但是,有规律的密码,比如说简单的拼音加上数字,比如说电话号码,比如说固话,比如说生日,这些信息列举出来的大小还是在可以接受的范围的。
反过来,使用这些有规律的密码,被破解出来的可能性就更大了。
但是,现在又出现了一种新的认证。像去肯德基麦当当这些公共wifi,它们都不设密码的。要求用手机号收验证码认证。
学习是永远都不能停下来的。一停止学习,就会落后于时代。
如果您在阅读的过程中产生了什么疑问,或者实际操作产生了什么问题,请在文章下方留言,我一定竭尽全力为您解答。
关注以获得更多资讯。