
做无线安全测试这些年我经常被问到“Kali能不能爆破WiFi密码”。老实说这个问题背后藏着一半好奇、一半误解。很多人以为打开Kali、敲几条命令就能像电影里那样几秒钟弹出一个密码实际根本不是那么回事。WiFi密码爆破的本质是一场离线字典攻击靠的是“抓握手包”加“本地跑字典”整个过程需要网卡支持、协议理解、字典质量和一点运气。这篇文章我就把整套流程从头拆到尾包括原理、工具、实操命令、字典制作、常见坑和防御视角全部是实测过的经验希望能让刚接触Kali的朋友少走弯路。先说明一个底线问题下面的所有操作仅适用于测试自有设备、或者获得明确书面授权的目标网络。没有授权就去爆破别人的WiFi在任何地方都是违法行为。这篇文章的目的是帮助你理解无线安全测试的原理以及在合法场景下完成密码评估不是教你去做坏事。1. 先搞清楚原理你准备“爆”的到底是什么1.1 WPA/WPA2握手包里藏着什么WiFi密码爆破不是真的在路由器上“试密码”。家用路由器一般用的是WPA2-PSK预共享密钥模式手机、电脑连WiFi时会和路由器执行四次握手4-way handshake用来确认双方都持有同一个“主密钥”PMK即Pairwise Master Key。PMK由WiFi密码PSK、SSID名称、以及一个SSID长度散列值计算而来整个过程是确定的也就是说只要我知道了密码和SSID就能在本地算出同样的PMK。四次握手过程中路由器会发送一个随机数Anonce客户端也会回应一个随机数Snonce双方由此派生出一个会话密钥。最关键的是握手包里的某一个帧EAPOL帧带有发送方对某段固定文本计算出来的MIC消息完整性校验码。这个MIC是用PMK、Anonce、Snonce等参数经过PBKDF2和HMAC计算得到的。所以攻击思路就清晰了我抓到你完整握手包之后根本不需要去碰路由器只需要在本地拿一本密码字典把字典里的每一个候选密码都算一遍PMK再用包里的Anonce、Snonce去验证MIC能不能对上。能对上密码就出来了。这就是大家常说的离线字典攻击。1.2 爆破成立的三个前提条件想把上面这个过程跑通三个条件缺一不可。第一必须能抓到“完整”的四次握手包。如果只抓到一半缺少某个关键帧MIC校验就无从谈起。第二目标路由器必须还在用WPA/WPA2-PSK这类可离线验证的协议。如果你的目标已经是WPA3SAE握手或者开了802.1X企业认证离线字典攻击基本失效得走完全不同的路线。第三你得有一本“差不多能命中”的字典。WiFi密码爆破的本质是猜谜密码空间越大、复杂度越高越不可能靠纯字典撞出来。1.3 现实一点的期望管理我最常给新手泼的一盆冷水是Kali爆破WiFi密码远没有网上短视频里那么“一键化”。它成功率的高低几乎完全取决于密码本身的强度。如果目标密码是“12345678”、“88888888”、手机号、生日组合这类字典跑几分钟就能出来。如果对方用的是20位随机大小写字母加数字符号哪怕是GPU集群也要跑到海枯石烂。所以建议你心里有个底这套技术适合测试“默认密码、弱口令、规律密码”不适合去碰强密码。不是工具不行是数学规律就摆在那。2. 环境准备网卡选型、Kali安装和监听模式2.1 网卡是硬门槛芯片比品牌重要Kali装好之后第一道坎不是软件而是无线网卡。普通笔记本自带的Intel无线网卡、手机热点共享都没法直接用来抓包因为它们不支持监听模式Monitor Mode和数据包注入Packet Injection。刷WiFi密码必须让网卡进入监听模式才能接收到空中所有的802.11帧否则驱动层面就过滤掉了。买网卡时别只看品牌重点看芯片。市面上比较常用的是这几类芯片系列常见型号支持频段监听/注入个人评价Atheros AR9271许多杂牌USB网卡2.4GHz支持兼容性好便宜但仅有2.4GRalink RT3070部分老款USB网卡2.4GHz支持稳定适合新手入门Realtek RTL8812AU各种双频USB网卡2.4G/5G支持双频覆盖很多Kali网卡是它Realtek RTL8814AU双频高增益2.4G/5G支持更强价格也高一些Intel AX200/AX210笔记本内置2.4G/5G/6G不支持或受限日常上网行测试就别想了我自己的主力是一块RTL8812AU芯片的双频USB网卡闲置的笔记本加一块USB网卡就能组成合格的测试环境。如果你是虚拟机跑Kali记得把USB网卡直通到虚拟机里VMware或VirtualBox都有USB设备透传功能。这里有个小坑Windows宿主机往往会先识别网卡并试图加载驱动所以建议先把网卡断开连接让虚拟机独占设备避免驱动抢占。2.2 Kali环境与工具套件Kali本身是一个基于Debian的渗透测试发行版集成了大量无线测试工具。你可以用虚拟机镜像也可以直接实体机安装二者对无线测试的影响主要是网卡直通和信号质量。虚拟机里做练习没问题但如果你要到现场做合法评估实机加一块双频网卡信号更稳定少一层USB直通的变量。Kali装好后先换一个速度合适的软件源然后更新系统顺手把无线工具装全sudo apt update sudo apt upgrade -y sudo apt install aircrack-ng reaver hashcat -yaircrack-ng套件是无线测试的核心里面包含airmon-ng网卡监听模式切换、airodump-ng扫描和抓包、aireplay-ng注入/攻击、aircrack-ng密码爆破等工具。reaver主要用于WPS PIN攻击hashcat是更专业的GPU密码爆破工具后面会提到。2.3 监听模式验证插上网卡后先用iwconfig确认系统认到了无线网卡iwconfig正常情况下你会看到类似wlan0或者wlx...这样的接口。接着检查无线网卡的驱动是否支持监听直接用根权限执行sudo airmon-ng这个命令会列出支持的无线网卡以及是否有进程会干扰监听模式。如果有NetworkManager之类的进程被检测到通常按提示做sudo airmon-ng check kill这条命令会停掉可能干扰无线网卡的进程比如NetworkManager。然后再把你的网卡切到监听模式sudo airmon-ng start wlan0切成功后会多出一个wlan0mon接口。再用iwconfig确认一下看到Mode:Monitor就说明环境就绪了。此时你的网卡就像一个“无线电信号接收器”可以看到周边所有WiFi的信号帧。注意在测试过程中NetworkManager被停掉可能会让虚拟机断网。如果你是用SSH连Kali的断开后会失联建议要么用物理终端要么提前规划好网络不要等到一半把网断了。3. 从扫描到抓包完整爆破流程实操3.1 第一步把网卡切到监听模式接上一节监听模式确认没问题后我通常先记录一下原始网卡名然后再切。切换命令前面已经写了这里再补充一个细节airmon-ng现在有一种新式用法就是直接指定接口名称sudo airmon-ng start wlan0执行后如果提示(mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)说明新接口名是wlan0mon。如果你的网卡驱动特殊可能不会新建接口而是直接让wlan0变成监听模式这时候iwconfig里也能看出来。3.2 第二步扫描周边无线网络监听模式下用airodump-ng扫描附近的无线网络sudo airodump-ng wlan0mon界面会实时刷新上半部分是周围的AP接入点列表下半部分是连接中的客户端列表。我需要关注这些字段BSSID是AP的MAC地址CH是信道ENC是加密方式WPA2、WPA3等PWR是信号强度越接近0信号越强写着-1的表示可能离得太远或不在当前信道。扫描过程中有几个实用操作按CtrlC停止扫描如果看到目标加密方式是WPA2并且有兴趣继续测试就记下它的BSSID和信道。顺便说一句现在很多路由器有“隐藏SSID”选项但隐藏SSID只是不广播名字BSSID、加密方式、信道这些信息照样会被扫描出来所以它拦不住专业测试连普通防爆破都算不上。3.3 第三步锁定目标并抓取握手包光扫描到AP还不够我得抓到一个完整的四次握手包。这一步最关键因为爆破的对象就是这个包。针对目标AP用airodump-ng指定信道和BSSID把捕获结果写入文件sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w capture wlan0mon-c 6指定信道为6--bssid指定目标MAC-w capture是输出文件前缀。这时候屏幕上就只显示你选中的那个AP和它的客户端了。抓包要抓到“某个设备正在进行连接”的瞬间如果你的终端已经连着这个WiFi那很好断开重连一次就能抓到。如果目标WiFi暂时没人连接就需要发送去认证包Deauthentication强制踢掉一个客户端它就会自动重新连上从而产生完整的握手包。发送去认证包的命令是sudo aireplay-ng -0 5 -a AA:BB:CC:DD:EE:FF wlan0mon其中-0 5表示发送5个去认证帧-a是指向目标AP的BSSID。如果你要定向踢某个客户端可以加-c参数指定客户端的MACsudo aireplay-ng -0 5 -a AA:BB:CC:DD:EE:FF -c 11:22:33:44:55:66 wlan0mon执行之后马上回头盯airodump-ng的界面如果右上角出现WPA handshake: AA:BB:CC:DD:EE:FF说明握手包已经抓到了。这时先按CtrlC停止抓包去检查文件。抓包目录下会生成capture.cap文件用aircrack-ng快速确认一下这个握手包aircrack-ng capture.cap它会列出这个cap文件里包含哪些AP的握手数据有多少个有效的EAPOL帧。这一步非常亲切因为它告诉你手里的“材料”是否完整。踩坑提醒deauth攻击虽然只是空中一个小帧但在法律上属于对网络的干扰行为不授权就发很容易惹麻烦。测试自家路由器或者你明确有授权的网络才可以用。另外有些新路由器开了802.11wPMF管理帧保护deauth帧就没那么好使了这属于后面要单独聊的问题。3.4 第四步离线字典爆破拿到握手包之后爆破就可以完全离线进行了。这时候理论上可以把网卡拔了、Kali断网都不影响爆破因为计算全在本地。先用自带字典试随便翻到/usr/share/wordlists/目录里面通常有一个rockyou.txt.gz先解压sudo gunzip /usr/share/wordlists/rockyou.txt.gzrockyou.txt是当年从真实泄露数据里整理出来的弱密码集合大概1400万条属于入门必备字典。用它跑capture.capaircrack-ng -w /usr/share/wordlists/rockyou.txt capture.cap-w指定字典文件回车后它就开始逐个尝试。屏幕上会看到一个进度条每秒钟能测试多少密码取决于CPU性能。如果密码运气好排在字典靠前的位置很快就能看到KEY FOUND! [ 密码内容 ]的结果如果字典跑完还没有结果就说明弱口令字典没覆盖到这个密码需要换更大的字典或者定制字典。这里需要解释一个细节很多新手以为aircrack-ng是在“一直用密码去连接路由器”其实不是。它是从capture.cap里读取握手包把每一个候选密码代入计算MIC纯本地CPU计算跟路由器的防暴力破解机制没关系。所以即使路由器设了密码错误次数限制也完全不耽误离线爆破这就是离线攻击最“狠”的地方。3.5 一条命令串起来的自动化思路实操的时候手动操作抓包和爆破分成两个阶段还可以但如果要批量评估多个网络效率太低。我习惯写一个简单的bash脚本把扫描、抓包、爆破串起来。思路是先扫描出候选AP再对每个目标依次开启airodump-ng、触发deauth、等待握手文件生成、然后调用aircrack-ng爆破。核心流程大概长这样#!/bin/bash INTERFACEwlan0mon TARGET_BSSID$1 TARGET_CHANNEL$2 WORDLIST$3 sudo airodump-ng -c $TARGET_CHANNEL --bssid $TARGET_BSSID -w tmp_capture $INTERFACE AIRODUMP_PID$! sleep 5 sudo aireplay-ng -0 3 -a $TARGET_BSSID $INTERFACE sleep 15 kill $AIRODUMP_PID aircrack-ng -w $WORDLIST tmp_capture-01.cap这只是一个最简思路实际用的时候还要处理超时重试、文件清理、多个客户端的目标选择等问题。但它能帮你把所有命令串起来批量测试时省很多时间。4. 字典决定成功率如何准备一把称手的“钥匙串”4.1 自带字典与公开字典怎么用爆破WiFi密码90%的成败在字典。rockyou.txt只是开胃菜因为它是很多年前泄露数据整理出来的覆盖了大量弱口令但对“中文用户习惯”照顾不够。比如手机号、生日、姓名拼音加数字这些模式rockyou.txt里虽然有但不全。所以测试他家网络的时候我通常会从这几个方向准备字典系统自带字典/usr/share/wordlists/下面的各种txt针对性的社工字典从目标路由器管理后台、家人社交信息、常见习惯出发把可能的姓名、生日、手机号、纪念日组合做成字典按地区运营商定制的密码列表不同地区的光猫默认WiFi密码格式不同网上有公开整理这里就不展开了需要特别提醒的是公开字典下载下来后不要直接拿去跑先看一眼字典大小。如果只有几十KB能覆盖的密码空间非常有限基本等于浪费时间。一般我测试一个普通家庭WiFi先跑rockyou.txt大概几十分钟没结果再上定制字典。4.2 用crunch按目标习惯定制字典知道目标密码大概长什么样时用crunch生成一个限定格式的字典会高效得多。这个命令常被用来生成纯数字、生日、固定前缀加数字的密码组合。看几个例子。生成8位纯数字字典crunch 8 8 0123456789 -o digits8.txt生成以138开头的11位手机号字典crunch 11 11 0123456789 -t 138%%%%%%%% -o phone138.txt生成8位密码要求第一位是字母后面是数字crunch 8 8 abcdefghijklmnopqrstuvwxyz 0123456789 -t %%%%%%% -o mix8.txtcrunch的-t参数支持一些占位符表示小写字母,表示大写字母%表示数字^表示特殊字符。结合前缀和后缀能生成非常贴合习惯的字典。不过要记住字典越大爆破越慢。不要一上来就生成几十GB的字典那会把你自己的CPU和磁盘先跑死。4.3 更高级的玩法规则、掩码和GPUaircrack-ng自带了一些密码变换规则你可以在字典基础上加-r参数。比如把字典里的每个单词做大小写变形、加数字后缀aircrack-ng -w base.txt -r /usr/share/hashcat/rules/best64.rule capture.cap不过适用范围有限很多人后来转向了hashcat因为它支持GPU加速而且掩码攻击、规则攻击更灵活。hashcat跑WPA2握手包的思路是先把cap文件转成hccapx格式或者用新格式hc22000然后用GPU疯狂计算。把capture.cap转成hashcat格式cap2hccapx capture.cap capture.hccapx再用hashcat跑hashcat -m 22000 capture.hccapx -a 3 ?d?d?d?d?d?d?d?d-a 3表示掩码攻击?d?d?d?d?d?d?d?d表示8位纯数字。如果密码真是这种格式GPU跑起来比CPU快几十倍可能几秒就出来了。但代价是hashcat对显卡驱动有要求而且你自己得有NVIDIA或AMD独立显卡纯CPU用hashcat反而没优势。个人心得如果你不为跑大型字典aircrack-ng已经完全够用了。GPU加速属于进阶玩法不要一上来就折腾驱动先把基本流程跑通再说。5. 防爆破视角怎么让测试目标“扛得住”5.1 密码策略决定一半胜负站在防御方的角度看WiFi抗爆破能力的第一道关卡永远是密码强度。这部分我要说得很直接只要你的密码是“随机生成的16位大小写数字符号混合”不管谁拿到握手包用任何字典、任何GPU集群在可预见的未来都很难跑出来。反过来如果你的密码是家庭成员姓名的拼音加生日比如“zhangsan1990”那爆破只是时间问题。密码这块有几个实操建议不要用纯数字哪怕12位纯数字8位以上纯数字在GPU下仍然容易被撞出来不要用姓名拼音、英文单词、键盘连续键如qwerty、日期、手机号优先用随机密码管理器生成16位以上随机密码然后把WiFi密码贴到路由器标签上或存到密码管理器里如果路由器支持WPA3/WPA2混合模式优先用WPA3因为WPA3的握手机制SAE让离线字典攻击变得极其困难5.2 路由器和协议层面的加固密码策略之外路由器的配置也能明显提高抗爆破门槛。我整理了一个自用的加固清单按优先级排序关闭WPSWiFi Protected Setup。WPS PIN只有8位而且可暴力破解很多路由器爆破WPS PIN的难度远低于WPA2密码一旦被reaver跑出PIN密码直接暴露。开启WPA3或WPA2/WPA3混合模式前提是终端设备兼容。开启管理帧保护PMFProtected Management Frames能显著削弱deauth攻击的有效性让攻击者不容易抓到握手包。关闭“允许旧设备连接”之类的兼容模式因为向下兼容Wi-Fi协议往往会带来弱算法。隐藏SSID属于“防君子不防小人”可做可不做别指望它有多大的防御价值。还有一个更彻底的思路如果你特别在意安全可以考虑WPA2-Enterprise802.1X企业认证方案每个用户单独账号密码即使一个终端泄露也不影响整个网络。但这需要搭建RADIUS服务器普通家庭用不上小型企业或极客玩家可以尝试。5.3 被攻击后如何发现爆破本身是离线行为攻击者抓包的过程几乎不会在你路由器日志里留下痕迹所以很难通过“有人爆破”来发现。但deauth攻击是会留下痕迹的因为每个设备会突然断线重连。如果你发现家里的智能设备频繁掉线重连、摄像头偶尔断流可以登录路由器后台查看无线日志重点看有没有大量的Deauthentication事件。更实用的方法是定期查看路由器管理界面里的“已连接设备”列表发现未知设备立刻拉黑并改密码。另外不要把路由器管理后台的密码和WiFi密码设成同一个否则爆破出一个WiFi密码后台也一并沦陷了。市面上一些路由器管理App会在新设备接入时推送提醒强烈建议开启。6. 常见问题与排查技巧实录6.1 网卡识别不到或不支持监听很多新手第一步就卡住插上USB网卡Kali里看不到wlan0或者看到了但airmon-ng start报错。这种问题90%是驱动问题。处理思路是先查看网卡芯片型号lsusb然后搜对应芯片在Linux下的驱动情况。Realtek系列网卡如果默认驱动不工作往往需要装realtek-rtl88xxau-dkms这类驱动包或者从GitHub对应仓库编译安装。Atheros和Ralink的老芯片基本开箱即用所以我一向推荐新手第一块测试网卡选AR9271或RT3070芯片省心。6.2 抓到握手包却跑不出来跑字典跑很久都没有结果先别急着加大字典。先检查你的capture.cap到底是几个AP的握手包有没有损坏。用aircrack-ng capture.cap确认如果显示只有1个EAPOL帧也可能包抓得不全。这时候重新抓一次确保看到WPA handshake提示再停止。其次检查字典文件是否有权限问题、路径是否写错。最后再想想目标密码可能性如果对方密码是20位随机字符老实说别白费力气直接放弃比硬跑更理性。6.3 5G频段扫描不到目标很多双频路由器会把2.4G和5G分开广播5G信号在扫描里经常只能看到一个BSSID。而且airodump-ng默认只扫2.4GHz频段得用--band abg或者-b参数扩展。比如sudo airodump-ng --band abg wlan0mon这样它会同时扫2.4G和5G。另外5G信号穿墙能力弱如果你离路由器远扫到也大概率抓不到完整握手包尽量靠得近一点。6.4 爆破过程中断 / 虚拟机脱网执行airmon-ng check kill之后NetworkManager被停了虚拟机如果没有独立物理网卡直通就是完全断网状态。这本身不是错误但如果你是通过SSH远控Kali就会瞬间掉线。建议要么用VMware的虚拟网卡桥接一个有线网络上外网要么直接在Kali本机操作。在虚拟机里做无线测试务必确认无线网卡是USB直通状态否则你在虚拟机里看到的wlan0可能是虚拟网卡监听能力几乎为零。6.5 常见问题速查表现象常见原因处理思路airmon-ng start后无mon接口驱动不支持或驱动被占用换芯片/安装对应驱动先airmon-ng check kill扫描列表里看不到目标AP信道不同、信号太弱、5G频段靠近目标--band abg扫描全部频段只看到AP没有客户端无人连接或客户端在别的信道等待或使用deauth定向踢客户端抓包一直不出握手客户端未重连、PMF干扰多试几次deauth检查目标加密方式字典跑完没啥结果字典覆盖不全或密码过强换定制字典、规则攻击或放弃爆破速度太慢CPU性能有限关掉其他进程或改用GPU的hashcat最后再分享一个小技巧整个流程里最容易被忽略的其实是“抓包质量”。我见过很多人在同一个AP上重复抓了十几次都抓不到握手包折腾到最后发现是网卡离路由器太远、信号太差导致EAPOL帧丢失过多。所以我现在的习惯是先花一分钟看airodump-ng里目标的PWR值低于-70就直接挪位置不要抱着侥幸心理死等。信号是无线测试的灵魂这句话在爆破WiFi密码这件事上体现得淋漓尽致。另外平时练习不需要非得找个“靶子”完全可以拿自己的路由器当测试对象拿一个不用的手机连接断开反复练习扫描、抓包和爆破。等这套流程闭着眼睛都能跑通了再去思考更复杂的字典策略和自动化脚本。技术在合法前提下才有价值先把自己的网络测明白了比什么都强。