Kali Linux 密码破解实战:从字典生成到 GPU 暴力破解全流程

⚠️ 法律与伦理声明:本文所述技术仅适用于您拥有或获得明确书面授权的系统,包括个人实验环境、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 位纯数字),掩码攻击是最高效的选择。混合攻击(字典+掩码)适合"单词+数字后缀"的常见模式,但需注意字典规模对总时间的影响。