前置知识: 网络安全

hashcat 密码破解

2 min入门

hashcat 命令实操:哈希模式识别(-m)、字典/掩码/规则攻击、GPU 调优、授权测试与字典构建注意事项

hashcat 基本用法

基本写法:字典攻击 hashcat -m <模式> <哈希文件> <字典>

# 使用字典破解 MD5 哈希
hashcat -m 0 hashes.txt rockyou.txt

基本写法:指定哈希模式 hashcat -m <模式> <哈希> <字典>

# 破解 SHA-256 哈希
hashcat -m 1400 sha256hashes.txt rockyou.txt

基本写法:显示破解结果 hashcat -m <模式> <哈希文件> <字典> --show

# 显示已破解的哈希和明文
hashcat -m 0 hashes.txt --show

基本写法:指定攻击模式 hashcat -a <模式> -m <哈希模式> <哈希文件> [参数]

# 使用攻击模式 0(字典攻击)
hashcat -a 0 -m 0 hashes.txt rockyou.txt

哈希模式

基本写法:常见哈希模式

`0     - MD5
100   - SHA1
1400  - SHA256
1700  - SHA512
1000  - NTLM
1800  - sha512crypt ($6$)
500   - md5crypt ($1$)
3200  - bcrypt ($2a$/$2b$)`
# 查看所有支持的哈希模式
hashcat --help | grep -i "hash-type"

基本写法:查看所有哈希模式 hashcat --help

# 列出所有支持的哈希类型
hashcat --help

基本写法:破解 NTLM 哈希 hashcat -m 1000 <哈希文件> <字典>

# 破解 Windows NTLM 哈希
hashcat -m 1000 ntlm_hashes.txt rockyou.txt

基本写法:破解 bcrypt 哈希 hashcat -m 3200 <哈希文件> <字典>

# 破解 bcrypt 哈希(速度较慢)
hashcat -m 3200 bcrypt_hashes.txt rockyou.txt

攻击模式

基本写法:字典攻击(模式 0) hashcat -a 0 -m <模式> <哈希文件> <字典>

# 标准字典攻击
hashcat -a 0 -m 0 hashes.txt rockyou.txt

基本写法:组合字典攻击(模式 1) hashcat -a 1 -m <模式> <哈希文件> <字典1> <字典2>

# 组合两个字典
hashcat -a 1 -m 0 hashes.txt dict1.txt dict2.txt

基本写法:掩码暴力破解(模式 3) hashcat -a 3 -m <模式> <哈希文件> <掩码>

# 暴力破解 8 位数字密码
hashcat -a 3 -m 0 hashes.txt ?d?d?d?d?d?d?d?d

基本写法:基于规则的攻击(模式 6) hashcat -a 6 -m <模式> <哈希文件> <字典> <掩码>

# 字典 + 掩码组合攻击
hashcat -a 6 -m 0 hashes.txt rockyou.txt ?d?d?d?d

基本写法:混合攻击(模式 7) hashcat -a 7 -m <模式> <哈希文件> <掩码> <字典>

# 掩码 + 字典组合攻击
hashcat -a 7 -m 0 hashes.txt ?d?d?d?d rockyou.txt

掩码字符集

基本写法:内置字符集

`?l - 小写字母 a-z
?u - 大写字母 A-Z
?d - 数字 0-9
?s - 特殊字符
?a - 所有字符
?b - 二进制
?h - 十六进制小写
?H - 十六进制大写`
# 查看掩码字符集说明
hashcat --help | grep "Built-in"

基本写法:自定义字符集 hashcat -<数字> <字符集> -a 3 -m <模式> <哈希文件> <掩码>

# 自定义字符集只包含 abc123
hashcat -1 abc123 -a 3 -m 0 hashes.txt ?1?1?1?1?1

基本写法:常见密码模式

`# 8 位数字密码
?d?d?d?d?d?d?d?d
# 6-8 位小写字母
?l?l?l?l?l?l?l?l
# 大写开头 + 小写 + 数字
?u?l?l?l?l?d?d`
# 8 位小写字母密码
hashcat -a 3 -m 0 hashes.txt ?l?l?l?l?l?l?l?l

规则文件

基本写法:使用规则文件 hashcat -m <模式> <哈希文件> <字典> -r <规则文件>

# 使用最佳 64 规则
hashcat -m 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule

基本写法:组合多个规则 hashcat -m <模式> <哈希文件> <字典> -r <规则1> -r <规则2>

# 组合多个规则文件
hashcat -m 0 hashes.txt rockyou.txt -r rules1.rule -r rules2.rule

基本写法:常用规则文件

`/usr/share/hashcat/rules/best64.rule
/usr/share/hashcat/rules/rockyou-30000.rule
/usr/share/hashcat/rules/d3ad0ne.rule
/usr/share/hashcat/rules/toggles5.rule`
# 使用 rockyou-30000 规则
hashcat -m 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/rockyou-30000.rule

性能优化

基本写法:指定工作负载 hashcat -w <级别> -m <模式> <哈希文件> <字典>

# 设置工作负载为高(1-4)
hashcat -w 3 -m 0 hashes.txt rockyou.txt

基本写法:指定设备类型 hashcat -D <设备> -m <模式> <哈希文件> <字典>

# 使用 GPU 设备
hashcat -D 2 -m 0 hashes.txt rockyou.txt

基本写法:显示性能测试 hashcat -b -m <模式>

# 性能基准测试
hashcat -b -m 0

基本写法:限制 GPU 速度 hashcat --gpu-temp-abort=<温度> -m <模式> <哈希文件> <字典>

# GPU 温度超过 90 度时停止
hashcat --gpu-temp-abort=90 -m 0 hashes.txt rockyou.txt

基本写法:启用优化内核 hashcat -O -m <模式> <哈希文件> <字典>

# 启用优化内核提升性能
hashcat -O -m 0 hashes.txt rockyou.txt

会话管理

基本写法:恢复会话 hashcat --session <名称> --restore

# 恢复之前的破解会话
hashcat --session mysession --restore

基本写法:指定会话名称 hashcat --session <名称> -m <模式> <哈希文件> <字典>

# 启动命名会话
hashcat --session mysession -m 0 hashes.txt rockyou.txt

基本写法:自动恢复 hashcat --restore

# 恢复最近的会话
hashcat --restore

输出与结果

基本写法:查看破解结果 hashcat -m <模式> <哈希文件> --show

# 显示已破解的哈希
hashcat -m 0 hashes.txt --show

基本写法:输出到文件 hashcat -m <模式> <哈希文件> <字典> -o <输出文件>

# 将破解结果保存到文件
hashcat -m 0 hashes.txt rockyou.txt -o cracked.txt

基本写法:输出格式化 hashcat -m <模式> <哈希文件> <字典> -o <输出文件> --outfile-format <格式>

# 指定输出格式(2 = 哈希:明文)
hashcat -m 0 hashes.txt rockyou.txt -o cracked.txt --outfile-format 2

基本写法:显示状态 hashcat -m <模式> <哈希文件> <字典> --status

# 自动显示状态更新
hashcat -m 0 hashes.txt rockyou.txt --status

字典处理

基本写法:使用多个字典 cat <字典1> <字典2> > <合并字典>

# 合并多个字典文件
cat dict1.txt dict2.txt dict3.txt > combined.txt
hashcat -m 0 hashes.txt combined.txt

基本写法:从字典文件读取 hashcat -m <模式> <哈希文件> <字典>

# 使用 rockyou 字典
hashcat -m 0 hashes.txt /usr/share/wordlists/rockyou.txt

基本写法:解压 rockyou 字典 gunzip /usr/share/wordlists/rockyou.txt.gz

# 解压 rockyou 字典文件
gunzip /usr/share/wordlists/rockyou.txt.gz

实用破解组合

基本写法:常见密码模式破解 hashcat -a 3 -m <模式> <哈希文件> ?d?d?d?d?d?d?d?d

# 破解 8 位数字密码
hashcat -a 3 -m 0 hashes.txt ?d?d?d?d?d?d?d?d

基本写法:字典 + 规则破解 hashcat -m <模式> <哈希文件> <字典> -r <规则>

# 字典 + 规则组合攻击
hashcat -m 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule

基本写法:渐进式破解

`# 1. 先用常用字典
hashcat -m 0 hashes.txt rockyou.txt
# 2. 再用规则扩展
hashcat -m 0 hashes.txt rockyou.txt -r best64.rule
# 3. 最后暴力破解
hashcat -a 3 -m 0 hashes.txt ?a?a?a?a?a?a?a?a`
# 渐进式破解策略
hashcat -m 0 hashes.txt rockyou.txt
hashcat -m 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
hashcat -a 3 -m 0 hashes.txt ?a?a?a?a?a?a?a?a

John the Ripper 替代

基本写法:破解哈希文件 john --wordlist=<字典> <哈希文件>

# 使用 John the Ripper 破解
john --wordlist=rockyou.txt hashes.txt

基本写法:显示破解结果 john --show <哈希文件>

# 显示已破解的密码
john --show hashes.txt

基本写法:指定哈希格式 john --format=<格式> --wordlist=<字典> <哈希文件>

# 指定 MD5 格式破解
john --format=raw-md5 --wordlist=rockyou.txt hashes.txt

基本写法:破解 SSH 密钥密码 ssh2john <密钥> > <哈希文件>; john <哈希文件>

# 破解 SSH 私钥密码
ssh2john id_rsa > ssh_hash.txt
john ssh_hash.txt