Hashcat密码恢复
概览
Hashcat是世界上最快的密码恢复工具,支持超过300种哈希算法和多种攻击模式。这项技能涵盖了授权的密码审计、取证密码恢复和安全研究应用。 重要:密码破解只能在您被授权破解的哈希上执行。未经授权的密码破解是非法的。始终确保适当的授权和法律合规。
快速开始
基本密码破解:
# 确定哈希类型
hashcat --example-hashes | grep -i md5
# 对MD5哈希进行字典攻击
hashcat -m 0 -a 0 hashes.txt wordlist.txt
# 显示破解的密码
hashcat -m 0 hashes.txt --show
# 基准系统性能
hashcat -b
核心工作流程
密码破解工作流程
进度: [ ] 1. 验证密码破解的授权 [ ] 2. 确定哈希算法类型 [ ] 3. 准备哈希文件和词表 [ ] 4. 选择适当的攻击模式 [ ] 5. 执行破解操作 [ ] 6. 分析破解的密码 [ ] 7. 记录密码政策弱点 [ ] 8. 安全删除哈希文件和结果 系统地完成每个步骤。检查已完成的项目。
1. 授权验证
关键:在任何密码破解之前:
- 确认数据所有者的书面授权
- 验证破解捕获的哈希的法律权利
- 了解数据处理和保留要求
- 记录取证案例的保管链
- 确保破解密码的安全存储
2. 哈希识别
确定哈希算法:
# 显示所有支持的哈希类型
hashcat --example-hashes
# 常见哈希类型
hashcat --example-hashes | grep -i "MD5"
hashcat --example-hashes | grep -i "SHA"
hashcat --example-hashes | grep -i "NTLM"
# 使用hash-identifier(单独的工具)
hash-identifier
# 提示时粘贴哈希
# Hashcat模式数字(常见)
# 0 = MD5
# 100 = SHA1
# 1000 = NTLM
# 1400 = SHA256
# 1800 = sha512crypt
# 3200 = bcrypt
# 5600 = NetNTLMv2
# 13100 = Kerberos 5 TGS-REP
3. 哈希文件准备
准备哈希文件:
# 简单的哈希文件(每行一个哈希)
echo "5f4dcc3b5aa765d61d8327deb882cf99" > hashes.txt
# 带用户名的哈希(username:hash格式)
cat > hashes.txt <<EOF
admin:5f4dcc3b5aa765d61d8327deb882cf99
user1:098f6bcd4621d373cade4e832627b4f6
EOF
# 带盐的哈希(hash:salt格式,适用于某些算法)
echo "hash:salt" > hashes.txt
# 从/etc/shadow(Linux)
sudo cat /etc/shadow | grep -v "^#" | grep -v ":\*:" | grep -v ":!:" > shadow_hashes.txt
# 从NTDS.dit(Active Directory)
secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL > ad_hashes.txt
4. 攻击模式
选择合适的攻击模式: 字典攻击(模式0):
# 基本字典攻击
hashcat -m 0 -a 0 hashes.txt rockyou.txt
# 多个词表
hashcat -m 0 -a 0 hashes.txt wordlist1.txt wordlist2.txt
# 带规则
hashcat -m 0 -a 0 hashes.txt rockyou.txt -r rules/best64.rule
组合攻击(模式1):
# 从两个词表中组合单词
hashcat -m 0 -a 1 hashes.txt wordlist1.txt wordlist2.txt
暴力破解攻击(模式3):
# 所有小写字母,8个字符
hashcat -m 0 -a 3 hashes.txt ?l?l?l?l?l?l?l?l
# 混合大小写和数字,6个字符
hashcat -m 0 -a 3 hashes.txt ?1?1?1?1?1?1 -1 ?l?u?d
# 自定义字符集
hashcat -m 0 -a 3 hashes.txt ?1?1?1?1?1?1?1?1 -1 abc123
掩码攻击(模式3带模式):
# 密码格式:大写字母+6个小写字母+2位数字
hashcat -m 0 -a 3 hashes.txt ?u?l?l?l?l?l?l?d?d
# 年份模式:单词+4位数字(2019-2024)
hashcat -m 0 -a 3 hashes.txt password?d?d?d?d
# 常见模式
hashcat -m 0 -a 3 hashes.txt ?u?l?l?l?l?l?d?d?s # 大写字母+单词+数字+特殊字符
混合攻击(模式6和7):
# 词表+掩码(追加)
hashcat -m 0 -a 6 hashes.txt wordlist.txt ?d?d?d?d
# 掩码+词表(前置)
hashcat -m 0 -a 7 hashes.txt ?d?d?d?d wordlist.txt
字符集:
?l= 小写字母(abcdefghijklmnopqrstuvwxyz)?u= 大写字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)?d= 数字(0123456789)?s= 特殊字符(!@#$%^&*…)?a= 所有字符(l+u+d+s)?b= 所有可打印ASCII字符
5. 性能优化
优化破解性能:
# 使用GPU加速
hashcat -m 0 -a 0 hashes.txt wordlist.txt -w 3
# 工作负载配置文件
# -w 1 = 低(桌面可用)
# -w 2 = 默认
# -w 3 = 高(专用破解)
# -w 4 = 噩梦(最大性能)
# 指定GPU设备
hashcat -m 0 -a 0 hashes.txt wordlist.txt -d 1
# 显示性能基准
hashcat -b
# 优化内核
hashcat -m 0 -a 0 hashes.txt wordlist.txt -O
# 显示预计时间
hashcat -m 0 -a 0 hashes.txt wordlist.txt --runtime=3600
6. 规则和变异
应用密码变异规则:
# 使用规则文件
hashcat -m 0 -a 0 hashes.txt wordlist.txt -r rules/best64.rule
# 多个规则文件
hashcat -m 0 -a 0 hashes.txt wordlist.txt -r rules/best64.rule -r rules/leetspeak.rule
# 常见Hashcat规则
# best64.rule - 速度/覆盖率最佳的64条规则
# dive.rule - 深度变异
# toggles1.rule - 情况切换
# generated2.rule - 复杂变异
# 自定义规则示例
# : = 无操作
# l = 全部小写
# u = 全部大写
# c = 首字母大写,其余小写
# $1 = 追加"1"
# ^2 = 预置"2"
# sa@ = 将'a'替换为'@'
7. 会话管理
管理破解会话:
# 保存会话
hashcat -m 0 -a 0 hashes.txt wordlist.txt --session=mysession
# 恢复会话
hashcat --session=mysession --restore
# 显示状态
hashcat --session=mysession --status
# 删除会话
hashcat --session=mysession --remove
# 每60秒自动检查点
hashcat -m 0 -a 0 hashes.txt wordlist.txt --session=mysession --restore-file-path=/path/to/checkpoint
8. 结果和报告
查看和导出结果:
# 显示破解的密码
hashcat -m 0 hashes.txt --show
# 仅显示用户名和密码
hashcat -m 0 hashes.txt --show --username
# 导出到文件
hashcat -m 0 hashes.txt --show > cracked.txt
# 显示破解统计信息
hashcat -m 0 hashes.txt --show --status
# 左侧(未破解的哈希)
hashcat -m 0 hashes.txt --left
安全考虑
授权和法律合规
- 明确授权:所有密码破解都需要书面许可
- 取证保管链:维护证据完整性
- 数据保护:安全处理破解的密码
- 范围限制:仅破解特别授权的哈希
- 法律管辖区:了解适用法律(CFAA,GDPR等)
运营安全
- 安全存储:加密哈希文件和结果
- 离线破解:尽可能在隔离系统上执行
- 资源管理:在破解期间监控系统资源
- 温度:确保长时间GPU使用时的适当冷却
- 电源:使用浪涌保护硬件安全
审计日志
记录所有密码破解活动:
- 哈希来源和获取方法
- 授权文件
- 使用的哈希算法和攻击模式
- 破解开始和结束时间戳
- 成功率和破解时间
- 应用的词表和规则
- 密码复杂性分析
- 安全删除工件
合规性
- MITRE ATT&CK:T1110(暴力破解)
- T1110.002(密码破解)
- NIST SP 800-63B:数字身份指南密码
- PCI-DSS:密码安全要求
- ISO 27001:A.9.4 秘密认证信息管理
常见模式
模式1:Windows域密码审计
# 从NTDS.dit提取NTLM哈希
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL > ad_hashes.txt
# 破解NTLM哈希
hashcat -m 1000 -a 0 ad_hashes.txt rockyou.txt -r rules/best64.rule
# 显示破解的域管理员账户
hashcat -m 1000 ad_hashes.txt --show | grep -i "domain admins"
模式2:Linux密码审计
# 从/etc/shadow提取哈希
sudo unshadow /etc/passwd /etc/shadow > linux_hashes.txt
# 破解SHA-512 crypt哈希
hashcat -m 1800 -a 0 linux_hashes.txt rockyou.txt
# 分析密码复杂性
hashcat -m 1800 linux_hashes.txt --show | awk -F: '{print length($2), $2}'
模式3:Wi-Fi WPA2破解
# 将pcap转换为hashcat格式(使用cap2hccapx)
cap2hccapx capture.cap wpa.hccapx
# 破解WPA2握手
hashcat -m 22000 -a 0 wpa.hccapx rockyou.txt
# 对数字密码使用掩码攻击
hashcat -m 22000 -a 3 wpa.hccapx ?d?d?d?d?d?d?d?d
模式4:Web应用程序哈希破解
# 破解MD5哈希(Web应用程序数据库转储)
hashcat -m 0 -a 0 webapp_hashes.txt rockyou.txt -r rules/best64.rule
# 破解bcrypt哈希(慢但安全)
hashcat -m 3200 -a 0 bcrypt_hashes.txt wordlist.txt -w 3
# 带盐的SHA256
hashcat -m 1400 -a 0 salted_hashes.txt wordlist.txt
模式5:Kerberos TGT破解(Kerberoasting)
# 破解Kerberos 5 TGS-REP
hashcat -m 13100 -a 0 kerberos_tickets.txt rockyou.txt -r rules/best64.rule
# 专注于服务账户
hashcat -m 13100 -a 0 kerberos_tickets.txt wordlist.txt --username
集成点
密码政策分析
#!/bin/bash
# analyze_passwords.sh - 密码政策合规性检查
CRACKED_FILE="$1"
echo "密码长度分布:"
awk -F: '{print length($2)}' "$CRACKED_FILE" | sort -n | uniq -c
echo -e "
带有字典单词的密码:"
grep -f /usr/share/dict/words "$CRACKED_FILE" | wc -l
echo -e "
没有特殊字符的密码:"
grep -v "[!@#$%^&*]" "$CRACKED_FILE" | wc -l
echo -e "
常见密码模式:"
grep -E "^password|123456|qwerty" "$CRACKED_FILE" | wc -l
报告
# 生成密码审计报告
cat > audit_report.sh <<'EOF'
#!/bin/bash
TOTAL=$(wc -l < hashes.txt)
CRACKED=$(hashcat -m 1000 hashes.txt --show | wc -l)
PERCENT=$((CRACKED * 100 / TOTAL))
echo "密码审计报告"
echo "===================="
echo "总哈希数:$TOTAL"
echo "破解:$CRACKED"
echo "成功率:$PERCENT%"
echo ""
echo "建议:"
echo "- 实施至少12个字符的最小密码长度"
echo "- 要求复杂的密码(大写,小写,数字,特殊)"
echo "- 启用多因素认证"
echo "- 实施密码历史和轮换"
EOF
chmod +x audit_report.sh
故障排除
问题:破解速度慢
解决方案:
# 使用优化的内核
hashcat -m 0 -a 0 hashes.txt wordlist.txt -O
# 增加工作负载
hashcat -m 0 -a 0 hashes.txt wordlist.txt -w 3
# 检查GPU利用率
hashcat -m 0 -a 0 hashes.txt wordlist.txt --status
# 验证GPU驱动程序
nvidia-smi # 对于NVIDIA
rocm-smi # 对于AMD
问题:内存不足
解决方案:
# 减少词表大小
head -n 1000000 large_wordlist.txt > smaller_wordlist.txt
# 禁用优化
hashcat -m 0 -a 0 hashes.txt wordlist.txt(去掉-O标志)
# 分割哈希文件
split -l 1000 hashes.txt hash_chunk_
问题:哈希格式错误
解决方案:
- 验证哈希模式(-m)是否匹配哈希类型
- 检查哈希文件格式(删除额外的空格,新行)
- 确保带盐哈希的盐格式正确
- 如果哈希包含用户名,使用–username标志
防御性考虑
防止密码破解: 强密码政策:
- 最小长度:12+字符
- 复杂性要求(混合大小写,数字,特殊)
- 禁止常见密码
- 实施密码历史
- 定期轮换特权账户的密码 技术控制:
- 使用强哈希算法(bcrypt,scrypt,Argon2)
- 实施盐值和密钥扩展
- 使用自适应哈希函数
- 启用多因素认证
- 实施账户锁定策略
- 监控暴力破解尝试 哈希存储最佳实践:
- 从不存储明文密码
- 使用强,现代的哈希算法
- 实施每个密码的唯一盐
- 使用适当的迭代计数(bcrypt成本,PBKDF2轮次)
- 定期更新哈希参数