我最早认真折腾Kali Linux,是从一片Atheros USB无线网卡开始的。当时手上的任务很直接:验证办公区无线网络在WPA/WPA2加密方案下,是否存在弱口令、配置疏忽或者协议层面的可利用点。那段时间把渗透测试从主机侧一路做到无线侧,踩了不少文档里查不到的坑。如果你正准备入门无线渗透测试,或者想把Kali Linux在无线方向上的能力摸透,这篇文章能帮你少走一段弯路。下文所有内容都围绕一个前提展开:只允许对你自己拥有、或者已经获得书面授权的网络进行测试,这是底线,后面不再重复。
1. 先别急着敲命令,把试验环境搭对
1.1 无线网卡怎么选,才不会白折腾一晚上
Kali Linux本身是工具集合,真正决定无线渗透测试能不能做下去的,往往是那一张网卡。很多新手上来就用笔记本内置Intel无线网卡,结果airmon-ng start wlan0一执行就报错,或者能进监听模式但完全抓不到包。原因不复杂:不是所有无线网卡都支持monitor mode(监听模式)和packet injection(数据包注入),而这两个能力恰恰是无线攻击的基础。
我前后试过几类芯片,给你一个可以直接参考的选型结论:
| 芯片方案 | 代表网卡 | 监听模式 | 注入能力 | 说明 |
|---|---|---|---|---|
| Atheros AR9271 | TP-Link TL-WN722N V1 | 支持良好 | 支持良好 | 经典入门选择,驱动开箱即用,价格便宜 |
| Ralink RT3070 | 多种杂牌USB网卡 | 支持良好 | 支持良好 | 老芯片兼容性好,二手市场常见 |
| Realtek RTL8812AU | 华硕USB-AC56等 | 支持良好 | 支持良好 | 同时支持2.4G/5G,速度更高,驱动需要额外编译 |
| Realtek RTL8188EUS | 部分迷你网卡 | 部分支持 | 不稳定 | 抓包可以,注入容易出问题,不推荐入门 |
| Intel内置 | 笔记本自带 | 多数不支持 | 不支持 | 建议直接放弃,省下时间干别的 |
判断一块网卡能不能用,还有两个更稳的方法。先插上网卡执行lsusb看芯片型号,然后运行iw list,找到Supported interface modes一栏,里面如果明确列出monitor,基本就过关了。如果是Intel芯片但这里没有monitor字样,后面所有抓包和注入命令都白搭,这是硬件层面的限制,不是软件能绕过的。
另外提一句,市面上所谓"Kali官方推荐网卡"的说法并不严谨,Kali官网列出的只是社区测试过的型号。我实测下来,AR9271和RTL8812AU是最少出幺蛾子的。如果嫌USB网卡占地方,也可以考虑树莓派加外置网卡组成随身测试机,但驱动编译流程不一致,新手先别碰这条线。
1.2 Kali系统的三种落地方式对比
网卡定了之后,就是怎么把Kali Linux跑起来。市面上常见的落地方式有实体机、虚拟机和ARM设备,我分别说下实际体验:
- 物理机安装:无线渗透测试最省心的方式,网卡直通系统,驱动和固件加载不会多一层虚拟化干扰。缺点是日常使用不方便,毕竟Kali不是为办公设计的,桌面稳定性也一般。
- 虚拟机(VMware/VirtualBox):日常学习和Web渗透测试完全没问题,但做无线测试时必须把USB无线网卡透传给虚拟机。这里有个反复出现的坑:虚拟机服务偶尔会把USB设备抢回宿主,或者网卡透传后Kali识别到了,但
airmon-ng启动监听模式时提示Device or resource busy。解决方法是在宿主机的USB设置里调整优先级,并且尽量用VMware而不是VirtualBox,实测VMware的USB穿透对无线网卡更友好。 - 树莓派/迷你主机:适合便携侦察场景,但无线模块和驱动需要额外调,功耗和散热也要考虑,我不建议把它作为第一套环境。
我的建议很简单:如果你有闲置笔记本,直接物理机装Kali。没有的话,虚拟机先把语法和流程跑熟,真正做现场测试前再切换到物理机。跑通全流程用虚拟机没问题,但不要拿着虚拟机去验证网卡性能,无线信号在虚拟化层会被削弱,结果不准。
2. WPA/WPA2到底哪一步可以被“攻击”
2.1 从四次握手看攻击切入点
WPA2-Personal的加密体系里,最核心的是四次握手(4-way handshake)。连接过程大致是这样:路由器(AP)和客户端(STA)都知道同一个预共享密钥PSK,这个PSK通过PBKDF2算法生成一个256位的PMK(成对主密钥)。双方再交换随机数ANonce和SNonce,各自计算出PTK(成对临时密钥),最后用PTK对握手消息计算MIC校验值,确认对方确实知道正确密码。
我把这个过程理解为两个人对暗号:你和我都知道同一个暗号(PSK),但我们不能直接喊出暗号,所以通过交换随机数生成一组临时暗号(PTK),再用这组临时暗号验证彼此身份。正常连接时,这一套流程发生在几百毫秒内,用户感知不到。
攻击者能插手的位置就在这几次交换中。如果我能捕获到完整的四次握手报文,就拿到了ANonce、SNonce和带有MIC的认证帧。虽然我没法直接反推密码,但我可以在本地离线枚举字典里的每一个候选密码,用同样的PBKDF2算法生成PMK,再计算对应的PTK和MIC,与抓到的MIC比对。比对一致,说明候选密码就是真正的PSK。整个过程完全不碰目标AP,所以叫离线攻击。
这一点是理解WPA2破解的关键:不是实时去猜路由器密码,而是把握手包带回本地“跑字典”。所以你经常看到有人说“抓包一小时,破解五分钟”,指的就是这种离线暴力破解。抓包是否顺利决定时间上限,跑字典速度决定时间下限。
2.2 破解成功率的本质是密码强度
既然攻击是离线字典枚举,破解成功率就完全取决于密码的复杂度和字典覆盖率。WPA2加密算法本身没有被直接攻破,真正被攻破的是“弱密码”这个人类问题。用8位纯数字做密码的网络,即使开了WPA2,在GPU加持下可能几分钟内就被枚举完;而用了20位大小写加符号的随机密码,破解时间会指数级增长。
这里补充一个很多人忽略的细节:PMK计算依赖SSID作为盐值。也就是说,即使两个网络密码完全一样,只要SSID不同,PMK就不同,hashcat必须按不同网络分别跑。这也是生成彩虹表不划算的原因,SSID组合空间太大,预计算根本覆盖不过来。
所以做无线渗透测试时,判断一个网络是否安全,不要只看它是不是WPA2,还要看密码长度和复杂度。我见过不少企业用了WPA2-Enterprise+RADIUS,却把访客网络设成8位纯数字,结果整个内网边缘形同虚设。WPA2是加密工具的选项,不是安全结果的保证。
3. 完整实操:捕获四次握手并离线爆破
3.1 启动监听模式
进入实操阶段。先把外置网卡插到Kali物理机或透传到虚拟机,确认Kali识别到了无线接口。通常接口名是wlan0或者wlan1,用iwconfig看一下。然后启动监听模式:
sudo airmon-ng check kill sudo airmon-ng start wlan0第一行check kill会杀掉干扰网卡监听的进程,尤其是NetworkManager。执行后系统会提示你禁用NetworkManager,这没问题,测试完再手动启回来。第二行如果成功,会输出类似wlan0mon的监听接口名,后面所有命令都用这个接口名。
这里有个很常见的坑:airmon-ng start之后,原来的wlan0变成了wlan0mon,但部分虚拟机里USB网卡会被重新枚举成另一个接口名,比如wlx001122334455。解决办法不是死记接口名,而是每次执行iwconfig看一眼当前活跃的无线接口,确认哪个处于Mode:Monitor。
3.2 扫描目标并锁定信道
监听模式起来之后,开始扫描周围网络:
sudo airodump-ng wlan0mon屏幕会不断刷新,列出周围所有AP的信息,包括BSSID、信道、加密方式、信号强度和SSID。目标信息确认后,按Ctrl+C停止扫描,然后记住目标AP的BSSID和信道CH。
有个细节要提醒:如果目标网络在5GHz频段,你的网卡必须支持5GHz监听,很多入门USB网卡只支持2.4GHz,扫描结果里会少一大片。我自己一开始用AR9271扫不到公司5G网络,还以为是Kali配置问题,后来换了RTL8812AU才看到。网卡只支持2.4GHz,扫描5GHz信号源包含一个安静但有结果的成长期。
3.3 主动Deauth,逼客户端重连
大多数情况下,目标AP已有客户端连接。不能指望客户端刚好在你扫描时主动重连,所以要做一次Deauth攻击,把已连接设备踢下线,强制它重新走四次握手流程:
sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w capture wlan0mon另开一个终端,执行:
sudo aireplay-ng -0 3 -a AA:BB:CC:DD:EE:FF -c 00:11:22:33:44:55 wlan0mon-0表示发送Deauth包,后面的数字3表示发送次数;-a指定目标AP的BSSID,-c指定客户端MAC。不加-c时会对所有客户端广播Deauth包,效果更猛,但干扰也更大,测试时建议先定向。
这里的关键是让第一个终端始终保持监听,等待客户端重新连接时捕获握手。如果你的网卡离AP太远,信号弱,Deauth后客户端可能没有立刻重连,所以执行完攻击后要回到第一个终端盯屏幕,看到右上角出现WPA handshake: AA:BB:CC:DD:EE:FF才说明捕获成功。
3.4 确认抓到握手包,准备离线破解
看到WPA handshake提示后,不用急着停止。按Ctrl+C停止airodump-ng,然后检查生成的cap文件:
ls -lh capture-01.cap如果文件大小只有几百字节,多半没抓到完整握手。可以用Wireshark打开,或者用aircrack-ng快速验证:
aircrack-ng capture-01.cap命令会显示该cap文件里是否包含有效的WPA握手,并列出目标AP信息。很多新手在这一步急着开hashcat,结果hashcat报错说文件格式不对,原因就是cap文件里没有完整握手。确认握手存在,比急着破解更重要。
3.5 用hashcat做GPU加速爆破
小规模字典可以用aircrack-ng直接跑:
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b AA:BB:CC:DD:EE:FF capture-01.cap但aircrack-ng只跑单线程CPU,速度有限。想要真正跑得快,推荐用hashcat配合GPU做离线枚举。先把cap文件转成hashcat 22000模式支持的格式:
hashcat -m 22000 capture-01.cap --show更标准的做法是用hcxpcapngtool工具转换:
hcxpcapngtool -o hash.hc22000 capture-01.cap得到hash.hc22000后,用hashcat跑字典:
hashcat -m 22000 hash.hc22000 /usr/share/wordlists/rockyou.txt如果目标密码在字典里,就会直接输出破解结果。如果没有,还可以加规则做变异,或者用--increment做纯暴力枚举。
实测下来,一张中端NVIDIA显卡做WPA2的PBKDF2计算,每秒大概能跑30万到100万次候选,比CPU快一到两个数量级。但要注意,hashcat对驱动和OpenCL环境比较挑剔,Kali默认不带NVIDIA驱动,需要先装好驱动再跑。别在驱动没装好的情况下怀疑hashcat命令写错了。
4. 进阶方向:PMKID、WPS与钓鱼测试
4.1 PMKID攻击:不再需要等待任何客户端
四步握手方案有个尴尬前提:目标AP周围至少有一个客户端在活动,否则Deauth半天也等不到重连。PMKID攻击正好解决了这个问题。PMKID是RSN信息元素里的一个字段,部分AP在收到客户端的关联请求时会主动计算并发送PMKID。它计算公式是:
PMKID = HMAC-SHA1(PMK, "PMK Name" + MAC(AP) + MAC(STA))攻击者不需要等客户端,只要拿到这个PMKID,就能在本地枚举字典,方法和破解四步握手完全一样。工具方面,Kali里常用的hcxdumptool可以扫描并捕获PMKID:
sudo hcxdumptool -i wlan0mon -o pmkid.pcapng --enable_status=1扫描一段时间后,把pcapng转成hashcat格式:
hcxpcapngtool -o pmkid.hc22000 pmkid.pcapng hashcat -m 22000 pmkid.hc22000 rockyou.txt不是所有AP都支持发送PMKID,实测老路由器支持率较高,新设备部分会关闭这个行为。但它的价值在于即使整个信道里没有任何客户端,也有可能完成离线破解,在红队评估和网络巡检里非常实用。
4.2 WPS、Evil Twin与“破密码之外”的测试思路
如果你带着“只要破出密码才叫成功”的想法,会错过无线渗透测试里更常见的测试面。
WPS PIN攻击针对的是开启了WPS功能的路由器。WPS的PIN只有8位数字,且最后一位是校验位,实际有效空间只有7位,大约10的7次方量级。通过工具如reaver或bully,可以尝试PIN来恢复WPA/WPA2密码。现在很多路由器默认关闭WPS,但不少老设备开着。测试方法很简单,扫描时看网卡是否报告WPS状态。如果开着,用reaver跑一轮:
sudo reaver -i wlan0mon -b AA:BB:CC:DD:EE:FF -vv -K 1不过我不建议把它列为无线渗透的默认流程,因为在线爆破PIN速度慢,还可能触发AP锁定机制,一旦把AP锁定,整个测试就要中断。
Evil Twin(邪恶双子星)则完全是另一个思路:你不去破解目标密码,而是伪造一个同名的AP,诱导用户主动连接,从而收集用户输入的凭据或直接观察流量。这个技术对WPA2-Personal网络的密码恢复没什么帮助,但在企业级渗透测试里非常有用,尤其是配合portal认证页面做钓鱼测试。操作流程大致是:用airbase-ng创建同名AP,再配合iptables和dnsmasq搭建一个伪认证页面,诱使用户输入账号密码。整个过程涉及网络层配置,比单纯跑字典复杂得多,但测试价值更高。
如果你正在学习渗透测试,不要只盯着“破解WPA2”这一个点。无线渗透测试的核心是评估无线边界是否可以被绕过、被干扰、被欺骗,密码破解只是其中一种手段。
5. 故障排查与效率优化速查
5.1 常见问题速查表
我把自己反复遇到的几类问题整理成了表格,按“现象、原因、解法”排列:
| 现象 | 原因 | 解法 |
|---|---|---|
| airmon-ng启动监听失败 | 网卡芯片不支持监听模式 | 换Atheros/Ralink/RTL8812AU芯片网卡 |
| NetworkManager干扰 | 未先执行check kill | airmon-ng check kill |
| 扫不到目标AP | 网卡不支持5GHz / 信道被过滤 | 更换支持5GHz网卡,检查airodump-ng过滤参数 |
| 一直抓不到握手 | 没有客户端 / 客户端离线 | 耐心等待或使用PMKID攻击替代 |
| 抓到握手但aircrack验证失败 | 抓包时不完整 | 重新Deauth并等待WPA handshake提示 |
hashcat报No hashes loaded | 转换工具/格式不对 | 用hcxpcapngtool重新转换,确认文件非空 |
| GPU跑不起来 | 缺NVIDIA驱动/OpenCL | 安装对应显卡驱动,运行hashcat -I确认设备 |
这个表格是我在实际操作中一点点沉淀下来的,比教科书式排查更有用。遇到问题时,先按表格定位是硬件、驱动还是流程,再做对应操作,能省大量时间。
还有个小经验:Kali系统升级后,aircrack-ng套件版本变化可能导致参数不兼容。老教程里的命令有时在新版本已经废弃。遇到命令不存在或参数不对时,直接看airmon-ng --help和aireplay-ng --help,以工具自带帮助为准。
5.2 提高破解效率的几个细节
跑字典时,效率峰值取决于三件事:字典质量、规则变体、硬件加速。
字典不是越大越好。rockyou.txt虽然经典,但它适合抓“常见弱密码”,对于企业随机生成的密码命中率很低。我会准备一份基础字典,再配合hashcat的规则做变异,比如把password变成Password123或admin@2024。--rule-based攻击模式可以在不增加字典体积的情况下覆盖更多变体。
硬件方面,如果手上的电脑没有独立显卡,破解效率会受很大限制。不用急着买卡,先评估测试目标:一个随机的12位强密码即使给你顶级GPU也需要相当长时间,不值得等。渗透测试的目标不是破解一切目标,而是快速识别出哪些网络有低垂果实。在授权范围内,把时间花在容易被击穿的目标上,比耗在硬骨头上更符合测试逻辑。
另外提醒一下,跑hashcat时温度控制很关键。笔记本GPU在长时间满负荷下会降频,影响速度。可以打开nvidia-smi监控温度,如果超过85摄氏度,最好停一会或者改用CPU跑小字典,别把设备烧了。
结尾
说了这么多,最后分享一点个人习惯。做完无线渗透测试之后,我一般不会只把命令行记录贴进报告,而是专门留一栏“密码强度评估”和“改进建议”,比如提醒对方把密码改成随机生成的长口令、关闭WPS、访客网络设置独立VLAN。技术能力只有落到修复方案上才有价值,否则就是自嗨。
还有一个小技巧:测试过程中把所有抓到的cap文件、hash文件和命令日志按日期归档。过了一段时间再回顾,能清楚看到当时判断为什么正确、哪里走了弯路。做渗透测试,尤其无线方向,经验积累靠的不是记住几个命令,而是把每次操作的上下文和结果完好保存下来。这套方法我沿用至今,也推荐给正在往这个方向走的你。