⚠️ 法律与伦理声明:本文所述技术仅适用于您拥有或获得明确书面授权的系统,包括个人实验环境、CTF 比赛、TryHackMe/HackTheBox 等合法靶场。未经授权对他人系统进行密码破解属于违法行为。
一、Kali 自带字典资源:/usr/share/wordlists/
1.1 目录结构与核心字典
Kali 的字典主要存放在 /usr/share/wordlists/ 下,包含多个符号链接指向各工具的专用字典:
text
/usr/share/wordlists/
├── rockyou.txt.gz → 最核心的密码字典(压缩状态)
├── dirb/ → Web 目录扫描字典
├── dirbuster/ → 目录爆破字典
├── john.lst → John the Ripper 默认字典
├── nmap.lst → Nmap 密码字典
├── metasploit/ → Metasploit 默认凭据字典
├── seclists/ → SecLists 综合字典集
└── wfuzz/ → 参数模糊测试字典
1.2 解压 rockyou.txt(必做第一步)
RockYou 字典以压缩包形式提供,需要先解压才能使用。解压后包含约 1434 万条真实泄露密码,文件大小约 134MB:
bash
sudo gunzip /usr/share/wordlists/rockyou.txt.gz
wc -l /usr/share/wordlists/rockyou.txt
# 输出约 14344392 行
如后续需要按长度筛选(如仅保留 6 位密码),可使用:
bash
sudo awk 'length($0) == 6' rockyou.txt > rockyou-6.txt
如果字典不够用,可安装 seclists 扩展包:
bash
sudo apt install seclists
ls /usr/share/seclists/Passwords/
二、自定义字典生成:crunch + cewl + hashcat 规则
通用字典如 rockyou.txt 只能覆盖"懒人密码"。真实目标(尤其是企业环境)的密码往往与组织名称、地名、年份等上下文高度相关。构建针对性字典能大幅提升破解效率。
2.1 crunch:基于模式生成字典
crunch 的核心命令格式为 crunch <最小长度> <最大长度> <字符集>。Kali 自带 charset 文件位于 /usr/share/crunch/charset.lst。
示例 1:生成 8 位纯数字字典
bash
crunch 8 8 0123456789 -o ~/digits8.txt
示例 2:使用内置字符集生成 6 位混合字典
bash
crunch 6 6 -f /usr/share/crunch/charset.lst mixalpha-numeric -o ~/mix6.txt
示例 3:基于已知模式生成(如"公司名+4位数字")
bash
crunch 8 8 abcdefghijklmnopqrstuvwxyz -t @@@@@@@@ -o ~/company8.txt
-t 参数用 @ 占位符表示位置,适合生成有固定结构的密码(如 PLDTWIFI 路由器默认密码 PLDTWIFI@@@@@)。
注意:crunch 会生成完整组合,字典文件可能极大。建议先用 -b 限制输出文件大小,或用 -l 限制数量。
2.2 cewl:从目标网站抓取关键词
如果已掌握目标的网站信息,可用 cewl 抓取页面词汇生成基础字典:
bash
cewl -d 2 -m 5 -w ~/cewl_words.txt http://target-site.com
# -d 2: 爬取深度2层 -m 5: 最少5个字符的单词
2.3 hashcat 规则:对基础字典做变形扩展
Hashcat 的规则引擎能对字典中的每个词自动生成大量变体(大小写变换、追加数字/符号、替换等),不需要在磁盘上存储所有变体,效率远高于手工生成。
Kali 自带规则文件位于 /usr/share/hashcat/rules/,常用的有:
| 规则文件 | 说明 |
|---|---|
best64.rule |
最常用的 64 条精简规则,速度快 |
rockyou-30000.rule |
完整规则集,覆盖率高但耗时更长 |
d3ad0ne.rule |
综合规则集 |
创建自定义规则文件:
bash
# 规则语法示例:首字母大写(c) + 追加"123"($1$2$3)
echo 'c $1$2$3' > ~/my.rule
每条规则占一行,c 表示首字母大写、其余小写,$1 表示追加字符 1,^a 表示前置字符 a。
三、Hashcat:GPU 加速破解全流程
3.1 环境准备与 GPU 检测
Hashcat 在 Kali 中可通过 apt 直接安装:
bash
sudo apt update && sudo apt install -y hashcat
检测 GPU 是否可用:
bash
hashcat -I
如果输出中显示了 GPU 设备(如 NVIDIA CUDA 或 AMD OpenCL),则 GPU 加速已就绪。如果只显示 CPU,需要安装对应驱动。
NVIDIA GPU 驱动安装:
bash
sudo apt install nvidia-driver nvidia-cuda-toolkit
# 重启后验证
nvidia-smi
hashcat -I
AMD GPU 驱动安装:Kali 下 AMD 驱动配置较复杂,需要下载 AMD 官方 amdgpu-install 脚本并修改以适配 Kali 的软件源,或者安装 OpenCL 运行时。如果 GPU 检测失败,可先用 --force 参数强制以 CPU 模式运行(速度慢很多):
bash
hashcat -m 0 hash.txt rockyou.txt --force
3.2 哈希准备与识别
破解前需要确定哈希类型,Hashcat 用 -m 参数指定哈希模式。常见模式如下:
| 哈希类型 | Hashcat 模式 | 示例 |
|---|---|---|
| MD5 | 0 | 8743b52063cd84097a65d1633f5c74f5 |
| SHA-256 | 1400 | 5e884898da... |
| NTLM | 1000 | Windows SAM 哈希 |
| bcrypt | 3200 | $2y$12$... |
| NetNTLMv2 | 5600 | 网络捕获的响应 |
| SHA-512 crypt | 1800 | Linux /etc/shadow |
准备哈希文件时,每行一个哈希,不要包含用户名或其他前缀:
bash
echo -n "password123" | md5sum | awk '{print $1}' > ~/hash.txt
cat ~/hash.txt
# 输出: 482c811da5d5b4bc6d497ffa98491e38
对于 Linux shadow 文件,需要先用 unshadow 合并 passwd 和 shadow,再提取哈希部分。
3.3 字典攻击(Attack Mode 0)
字典攻击是最基础也最常用的模式。核心命令格式:
bash
hashcat -m <哈希模式> -a 0 <哈希文件> <字典路径>
实战示例:MD5 + rockyou:
bash
hashcat -m 0 -a 0 ~/hash.txt /usr/share/wordlists/rockyou.txt
NTLM + rockyou + 规则增强:
bash
hashcat -m 1000 -a 0 ~/ntlm_hashes.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule \
-o ~/cracked.txt
-r 指定规则文件,-o 指定破解结果输出文件。
3.4 掩码暴力破解(Attack Mode 3)
当已知密码的部分结构(如"4 位小写字母 + 2 位数字")时,掩码攻击比盲目暴力高效得多。
掩码占位符:
| 占位符 | 含义 |
|---|---|
?l |
小写字母 a-z |
?u |
大写字母 A-Z |
?d |
数字 0-9 |
?s |
特殊字符 |
?a |
所有可见字符 |
示例:破解"4 位小写字母 + 2 位数字"的 MD5:
bash
hashcat -m 0 -a 3 ~/hash.txt '?l?l?l?l?d?d'
示例:用 --increment 自动递增长度,从 1 位尝试到 6 位:
bash
hashcat -m 1000 -a 3 ~/ntlm_hashes.txt '?a?a?a?a?a?a' \
--increment --increment-min=1 --increment-max=6
这会把掩码拆分,先尝试 1 位、再 2 位......直到 6 位,避免一次性枚举完整的大空间。
3.5 混合攻击(Attack Mode 6/7)
混合攻击 = 字典 + 掩码,适合"常见单词 + 固定长度数字后缀"的模式。
字典 + 数字后缀(Mode 6):
bash
hashcat -m 1000 -a 6 ~/ntlm_hashes.txt /usr/share/wordlists/rockyou.txt ?d?d?d?d
这会对 rockyou 中的每个词追加 4 位数字。注意:完整的 rockyou 有 1400 万条,乘以 10000 种后缀 = 1400 亿候选,耗时极长。建议先用精简字典测试:
bash
head -n 10000 /usr/share/wordlists/rockyou.txt > ~/mini.txt
hashcat -m 1000 -a 6 ~/ntlm_hashes.txt ~/mini.txt ?d?d?d?d
3.6 结果查看与管理
Hashcat 会将破解结果保存在 potfile(默认 ~/.hashcat/hashcat.potfile)。查看已破解的哈希:
bash
hashcat --show -m 0 ~/hash.txt
恢复中断的会话:
bash
hashcat --restore
运行基准测试(评估 GPU 性能):
bash
hashcat -b
四、John the Ripper:字典与暴力破解
4.1 核心用法
John the Ripper(JtR)是另一款经典破解工具,Kali 预装的是 Jumbo 版本(功能更完整)。基本语法:
bash
john [选项] [哈希文件]
自动尝试(按 single → wordlist → incremental 顺序):
bash
john hashes.txt
4.2 字典模式
基本字典攻击:
bash
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
指定哈希格式(推荐,避免自动识别失败):
bash
# MD5
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
# Linux shadow (sha512crypt)
john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
字典 + 规则:
bash
john --wordlist=/usr/share/john/password.lst --rules unshadowed.txt
John 的规则系统会基于字典词生成变形,类似于 Hashcat 的 -r 规则。
4.3 暴力破解(Incremental 模式)
John 的 --incremental 模式是最强大的暴力破解方式,会尝试指定字符集内的所有组合:
bash
# 使用默认字符集
john --incremental hashes.txt
# 仅使用字母
john --incremental:alpha hashes.txt
# 仅使用数字
john --incremental:digits hashes.txt
指定格式:
bash
john --incremental --format=raw-sha256 hashes.txt
查看已破解结果:
bash
john --show hashes.txt
4.4 Linux Shadow 文件破解流程
从 Linux 系统中提取的 shadow 文件需要与 passwd 合并后交给 John:
bash
unshadow /etc/passwd /etc/shadow > ~/unshadowed.txt
john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt ~/unshadowed.txt
如果系统使用 crypt 格式(旧系统),可尝试:
bash
john --wordlist=/usr/share/wordlists/rockyou.txt --format=crypt ~/unshadowed.txt
4.5 Single Crack 模式
Single 模式利用用户名、GECOS 信息(全名、办公室等)生成猜测,适合快速尝试弱密码:
bash
john --single --format=sha512crypt hashes.txt
要求哈希文件中包含用户名前缀,格式为 mike:$6$...。
五、GPU 加速配置要点
5.1 确认 GPU 被正确识别
bash
hashcat -I
输出中应显示类似:
text
Device #1: NVIDIA GeForce RTX 3060
Type: GPU
Memory: 12288 MB
如果没有 GPU 设备显示,Hashcat 会回退到 CPU 模式,速度差异可达数十倍。
5.2 提升性能的关键参数
| 参数 | 作用 |
|---|---|
-O |
启用优化内核(限制密码最大长度,提升速度) |
-w 3 |
设置工作负载为高(0-4,越高越激进) |
--force |
强制运行(忽略警告,仅在不支持的环境下使用) |
-d 1 |
指定使用设备编号(多 GPU 时) |
推荐组合:
bash
hashcat -m 1000 -a 0 hashes.txt rockyou.txt -O -w 3
5.3 常见问题排查
-
OpenCL 错误:NVIDIA 用户需安装
nvidia-cuda-toolkit,AMD 用户需安装 ROCm 或 OpenCL 运行时 -
旧 GPU 性能受限:CUDA 计算能力低于 5.0(Maxwell 之前)的 GPU 性能会显著降低
-
Kali 虚拟机中 GPU 不可用:VM 通常无法直接访问物理 GPU,建议在宿主机运行或配置 GPU 直通
六、完整实战流程总结
以破解一个 NTLM 哈希为例:
bash
# 1. 准备哈希
cat > ~/ntlm.txt << 'EOF'
aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
EOF
# 2. 解压字典(如未解压)
sudo gunzip -k /usr/share/wordlists/rockyou.txt.gz 2>/dev/null
# 3. GPU 检测
hashcat -I
# 4. 字典攻击 + best64 规则
hashcat -m 1000 -a 0 ~/ntlm.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule \
-o ~/cracked.txt -O
# 5. 查看结果
hashcat --show -m 1000 ~/ntlm.txt
# 6. 如果字典未命中,尝试掩码暴力(1-6位)
hashcat -m 1000 -a 3 ~/ntlm.txt '?a?a?a?a?a?a' \
--increment --increment-min=1 --increment-max=6 -O
# 7. 用 John 交叉验证(可选)
john --format=nt --wordlist=/usr/share/wordlists/rockyou.txt ~/ntlm.txt
效率建议:优先使用字典攻击 + 规则;仅在字典穷尽后才进入暴力/掩码模式。对于已知格式的密码(如 WPA 的 8 位纯数字),掩码攻击是最高效的选择。混合攻击(字典+掩码)适合"单词+数字后缀"的常见模式,但需注意字典规模对总时间的影响。