简介:这份超全爆破字典合集面向渗透测试初学者与安全从业者,用于口令爆破、弱密码审计及CTF竞赛中的字典攻击环节,帮助解决实战中字典覆盖不全、命中率低的问题。压缩包为rar格式,整体约14.41MB,解压后内容体量可达85M,涵盖常见用户名、弱口令、目录路径、子域名等多类字典,可分别用于登录爆破、后台扫描与路径枚举等场景。目前已有5471人学习下载,说明其在安全圈内具备一定认可度。资源以分类整理的方式组织,便于按目标类型快速定位所需字典,减少自行收集与去重的时间成本,适合在授权测试与学习研究环境中直接调用,也可作为构建个人字典库的基础素材,配合Burp Suite、Hydra等工具使用,提升测试效率。
1. 85M 的爆破字典合集,到底在解决什么问题
很多人第一次拿到「超全爆破字典合集85M.rar」这种资源时,第一反应是解压完往工具里一丢,然后发现跑一晚上啥也没出来。问题不在字典本身,而在于你根本没搞清楚这 85M 里装的是什么、该在什么场景下用哪一本、以及目标系统的口令策略长什么样。爆破字典不是万能钥匙,它是一组按人类设密码习惯排列的候选空间,命中率取决于你的目标是否落在这个空间里。
这个合集的核心价值在于「覆盖面」:它把常见弱口令、年份组合、姓名拼音、键盘路径、泄漏库高频词、规则变形产物打包在一起,省去你自己从零收集和生成的时间。适合谁?做授权渗透测试的、搞 CTF 的、做内部安全自查的、以及需要验证自己系统口令强度的运维。不适合谁?想拿它去碰任何未授权目标的人——那是另一条路,这里不讨论。
我见过太多人把字典当玄学,觉得换一本大的就能出结果。实际上 85M 解压后可能膨胀到几百 M 甚至上 G,里面大量文件是重复的、过时的、或者针对特定场景的。你需要做的是先分类、再裁剪、最后按目标特征组合,而不是无脑全量跑。
2. 拆开这 85M:字典分类与选型逻辑
2.1 先搞清楚压缩包里通常有哪些类别的字典
拿到一个「超全」合集,别急着解压到桌面。先看文件结构。常见做法是里面会按用途分目录,比如weak/、leaked/、chinese/、keyboard/、rules/、hybrid/这几类。如果作者没分类,你就得自己按文件名和大小判断。
我一般会先跑一遍清单,把文件按体积和行数排序,因为很多所谓「超全」其实是同一份基础字典套了不同规则生成的,体积大但信息熵低。下面这段脚本用来快速盘点一个目录下所有字典文件的行数、去重后行数、以及字符集分布,帮你判断哪些值得留。
import os import hashlib def profile_dict(filepath): """统计单个字典文件的行数、去重行数、平均长度""" with open(filepath, 'r', encoding='utf-8', errors='ignore') as f: lines = [line.strip() for line in f if line.strip()] total = len(lines) unique = len(set(lines)) avg_len = sum(len(l) for l in lines) / total if total else 0 return total, unique, round(avg_len, 2) def scan_dir(root): """遍历目录,输出每个字典的画像""" results = [] for dirpath, _, filenames in os.walk(root): for fn in filenames: if fn.endswith(('.txt', '.dic', '.lst')): fp = os.path.join(dirpath, fn) size_mb = os.path.getsize(fp) / 1024 / 1024 total, unique, avg_len = profile_dict(fp) results.append((fp, size_mb, total, unique, avg_len)) # 按去重后行数降序,信息密度高的排前面 results.sort(key=lambda x: x[3], reverse=True) for r in results: print(f"{r[0]} | {r[1]:.1f}MB | 总行数:{r[2]} | 去重:{r[3]} | 均长:{r[4]}") if __name__ == '__main__': scan_dir('./dicts')这段代码的逻辑很直接:profile_dict读文件、去空行、算总数和去重数,scan_dir递归找字典文件并按去重后行数排序。参数上你只需要改scan_dir的路径。重点看「去重后行数」这一列,如果某个 200M 的文件去重后只剩 50 万行,说明它大量重复,实际有效空间很小,优先级往后放。
2.2 按目标特征选字典,而不是按体积选
选字典的核心原则是「目标口令策略决定候选空间」。我一般把目标分成四类:
| 目标类型 | 典型特征 | 优先字典类别 | 理由 |
|---|---|---|---|
| 老旧系统/设备 | 默认口令、无复杂度要求 | 默认口令表、弱口令 top1000 | 厂商默认值命中率极高 |
| 国内业务系统 | 拼音、手机号、生日 | 中文拼音库、日期组合 | 用户习惯用姓名+年份 |
| 通用 Web 应用 | 8位以上、含大小写数字 | 泄漏库高频、规则变形 | 需要覆盖真实泄漏分布 |
| 高安全要求 | 长口令、随机 | 规则引擎生成、掩码 | 字典命中率低,需换策略 |
这张表不是拍脑袋,是我自己踩坑踩出来的。早期我拿纯英文泄漏库去打一个国内 OA 系统,跑了两天没结果,后来换成拼音+年份组合,十分钟就出了。不是字典不够大,是方向错了。
2.3 用规则引擎把基础字典放大,而不是堆文件
85M 里如果有rules/目录,那才是真正值钱的东西。规则文件(比如 hashcat 的.rule)能把一个基础词变成几百个变体。常见做法是拿一份 10 万行的高频词,配一套规则,生成千万级候选,比直接用一个 500M 的成品字典更灵活。
# 用 hashcat 的规则引擎演示:基础字典 + 规则 = 放大后的候选 # best64.rule 是常用规则集,对每个词做大小写、追加数字、替换字符等变形 hashcat --stdout base_words.txt -r rules/best64.rule > expanded.txt # 统计放大倍数 wc -l base_words.txt expanded.txt这里--stdout表示只输出候选不跑破解,-r指定规则文件。best64.rule会对每个词生成约 64 个变体,10 万行进去就是 640 万行出来。参数上你可以叠加多个规则文件,但注意组合爆炸——两个 64 规则叠加就是 4096 倍,内存和磁盘要提前算好。
提示:规则文件不是越多越好,先看目标是否有口令复杂度要求。如果目标只要求 6 位数字,你上复杂规则纯属浪费算力。
3. 把字典跑起来:从裁剪到执行的完整链路
3.1 裁剪:去掉不可能命中的部分
全量字典直接跑是效率最低的做法。我一般先做三件事:去重、按目标策略过滤、按长度截断。比如目标系统限制口令长度 6 到 12 位,那你把所有超过 12 位和少于 6 位的行删掉,候选空间可能直接砍掉一半。
# 去重 + 长度过滤 + 去除含特殊不可打印字符的行 # 假设目标要求 6-12 位,只保留可打印 ASCII awk 'length($0) >= 6 && length($0) <= 12' raw.txt \ | grep -P '^[\x20-\x7E]+$' \ | sort -u \ > filtered.txt # 查看裁剪前后对比 echo "裁剪前: $(wc -l < raw.txt) 行" echo "裁剪后: $(wc -l < filtered.txt) 行"awk那行按长度过滤,grep -P保留可打印字符,sort -u去重。三步下来通常能砍掉 40% 到 70% 的无效候选。参数上length的范围要根据目标实际策略改,别照抄。如果你不确定目标策略,先保留 6 到 16 位,跑一轮看结果再调整。
3.2 组合:用 hashcat 的 combinator 做交叉
有时候你需要把两个字典交叉组合,比如「姓氏拼音 + 常见年份」。hashcat 的 combinator 模式(-a 1)就是干这个的。
# -a 1 表示组合模式,左右两个字典做笛卡尔积 # 左字典放姓氏,右字典放年份和常见后缀 hashcat -a 1 -m 1000 hashes.txt surnames.txt years.txt --stdout > combined.txt # 如果只想看组合结果不跑破解,加 --stdout # -m 1000 是 NTLM,实际按目标哈希类型改-a 1会把surnames.txt每一行和years.txt每一行拼接。如果左字典 500 行、右字典 200 行,出来就是 10 万行。参数-m指定哈希类型,不同系统不一样,跑之前先确认。--stdout在调试阶段很有用,先看组合结果是否符合预期,再真正跑破解。
3.3 执行:控制速率、监控进度、保留现场
真正跑的时候,最怕的是跑了一半断了不知道跑到哪。hashcat 有--restore机制,但前提是你别乱删.restore文件。我一般会加--session指定会话名,方便恢复。
# 正式跑:指定会话名、输出文件、状态刷新间隔 hashcat -a 0 -m 1000 hashes.txt filtered.txt \ --session myrun \ --status \ --status-timer 30 \ -o cracked.txt \ --potfile-path ./my.potfile # 断了之后恢复 hashcat --session myrun --restore--session给这次任务起名,--status-timer 30每 30 秒刷一次进度,-o把已破解的明文写到文件,--potfile-path指定 potfile 位置避免污染全局。恢复时用--restore加会话名即可。参数上--status-timer别设太小,否则日志刷屏;30 到 60 秒比较合适。
注意:potfile 是「后悔药」,跑之前确认它的路径,别用默认的全局 potfile,否则不同任务之间会互相干扰,你以为没跑出来的其实早就被记录过了。
4. 避坑与排查:字典跑不出结果的五个真实原因
4.1 现象:跑了几小时,进度条几乎不动
原因通常不是字典太大,而是哈希类型选错了。比如目标明明是 bcrypt,你用了-m 1000(NTLM),那计算量差几个数量级,速度从每秒几十亿掉到几千,进度条当然不动。
解决:先确认哈希类型。拿一条哈希去在线识别或者用hashid工具判断,再选对应的-m值。bcrypt 对应-m 3200,速度慢是正常的,这时候要换策略而不是硬跑。
4.2 现象:字典里有明文,但就是没破出来
原因可能是编码问题。国内系统常见 GBK 编码的字典,而工具默认按 UTF-8 读,导致中文字符匹配不上。另一个可能是行尾有\r(Windows 换行),工具把\r也当成口令的一部分。
解决:统一转成 UTF-8 并去掉\r。
# 转编码 + 去 Windows 换行 iconv -f GBK -t UTF-8 raw_gbk.txt | tr -d '\r' > utf8_clean.txticonv做编码转换,tr -d '\r'删掉回车符。跑之前先file命令看一眼原文件编码,别瞎转。
4.3 现象:内存爆了,进程被系统杀掉
原因是一次性把整个大字典读进内存,或者规则叠加太多导致候选爆炸。85M 解压后如果全量加载加复杂规则,内存占用可能上 G。
解决:用流式处理,别一次性读。hashcat 本身是流式的,但如果你自己写脚本预处理,注意用生成器而不是列表。另外规则别无脑叠加,先算一下候选总数:基础行数 × 规则数,超过十亿就要考虑分片跑。
4.4 现象:同一份字典,别人能出结果我不能
原因可能是目标已经改过密码,或者你拿到的哈希是旧的。也可能是对方的 potfile 里已经有记录,而你的 potfile 是干净的。还有一种情况是对方用了分布式,你单机跑当然慢。
解决:先确认哈希的新鲜度,再检查自己的 potfile 和会话状态。如果是速度问题,考虑用 GPU 而不是 CPU,或者把字典按优先级分片,先跑高命中率的部分。
4.5 现象:跑出来的明文是乱码
原因通常是目标系统用了非标准编码,或者哈希本身对应的是二进制口令。也可能是你的输出文件编码和查看工具不一致。
解决:用xxd看一眼原始字节,确认是不是可打印字符。如果是中文,确认编码是 GBK 还是 UTF-8。别直接用文本编辑器打开就下结论。
5. 进阶:把静态字典变成动态生成策略
5.1 用目标泄露数据反向定制字典
如果你手上有目标相关的任何信息——比如公司名、产品名、员工邮箱前缀——可以拿这些做种子,用规则引擎生成针对性字典。这比通用字典命中率高得多。
# 用公司相关词做种子,套规则生成 echo -e "companyname\nproductname\nadmin\nroot" > seeds.txt hashcat --stdout seeds.txt -r rules/best64.rule > targeted.txt种子越贴近目标,效果越好。我一般会从目标官网、招聘信息、公开文档里提取关键词,去重后作为种子。参数上规则文件可以按需换,best64是通用起点,如果知道目标有特定后缀习惯,可以自己写规则。
5.2 用掩码策略覆盖字典盲区
字典再全也有盲区,比如纯随机生成的 8 位口令。这时候掩码(mask)比字典更有效。hashcat 的-a 3模式就是干这个的。
# 掩码攻击:?u 大写字母 ?l 小写 ?d 数字 ?s 特殊字符 # 下面这个掩码表示:大写+小写+数字+特殊,共 8 位 hashcat -a 3 -m 1000 hashes.txt '?u?l?l?l?l?d?d?s' --increment # --increment 表示从短到长递增尝试,避免一上来就全量?u大写、?l小写、?d数字、?s特殊字符。--increment让工具从 1 位开始逐步增加到 8 位,适合不确定长度的情况。参数上掩码越长候选空间越大,8 位混合字符集是 95^8 量级,单机跑不现实,通常配合分布式或者只跑已知前缀。
5.3 验证字典有效性的小技巧
跑之前先拿一个已知明文做自测:把明文用同样的哈希算法生成哈希,放进测试文件,用你的字典跑一遍,看能不能出。出不来说明字典或参数有问题,别急着上真实目标。
# 生成测试哈希(以 MD5 为例) echo -n "password123" | md5sum | awk '{print $1}' > test_hash.txt # 用字典跑测试 hashcat -a 0 -m 0 test_hash.txt filtered.txt --potfile-path ./test.potfile # 看 test.potfile 里有没有记录 cat test.potfile这个自测流程能帮你排除编码、格式、参数三类问题。-m 0是 MD5,实际按你的测试算法改。如果测试通过但真实目标不出,问题就在目标本身,不在你的字典。
我自己的习惯是:每次拿到新字典,先跑一遍自测,再跑一遍小规模真实目标验证方向,最后才全量。这样能避免「跑了一周发现方向错了」这种血泪教训。字典是工具,策略才是核心。希望帮到你。
本文还有配套的精品资源,点击获取