密码爆破与凭据攻击
凭据是渗透测试中最值钱的战利品——拿到一组有效账号密码,往往比挖一个复杂漏洞更直接。这篇区分两类密码攻击:针对在线服务的在线爆破(Hydra)和针对密码哈希的离线破解(John the Ripper、Hashcat),并讲清楚字典、规则、掩码这些提升命中率的关键手段。
仅对授权目标或自己的哈希进行破解。在线爆破会产生大量失败登录日志、可能触发账号锁定,未授权使用违法。所有示例针对自建靶场。
在线 vs 离线
| 维度 | 在线爆破 | 离线破解 |
|---|---|---|
| 攻击对象 | 活的登录服务(SSH、RDP、Web 表单等) | 已获取的密码哈希文件 |
| 速度瓶颈 | 网络往返、服务限速、账号锁定 | 本地算力(CPU/GPU) |
| 隐蔽性 | 差,留大量日志,易触发告警 | 好,完全本地,目标无感知 |
| 典型工具 | Hydra、Medusa、Patator | John the Ripper、Hashcat |
策略上:能拿到哈希就优先离线破解,又快又隐蔽;只有在没有哈希、只能打登录接口时才做在线爆破,并控制速率。
字典:一切爆破的基础
破解效果七分靠字典。Kali 自带 seclists(/usr/share/seclists/)和经典的 rockyou.txt:
# rockyou 在 Kali 中默认是压缩的,先解压
sudo gunzip /usr/share/wordlists/rockyou.txt.gz
ls -lh /usr/share/wordlists/rockyou.txt针对目标定制字典命中率更高,可用 cewl 爬取目标网站生成词表,或用 crunch 按规则生成。
Hydra:在线服务爆破
Hydra 支持几十种协议,命令结构统一为:hydra [登录项] [密码项] [选项] 目标 服务。
# SSH 单用户 + 字典爆破密码
hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.10
# 用户名字典 + 密码字典(-L 用户列表,-P 密码列表)
hydra -L users.txt -P pass.txt 192.168.1.10 ssh
# 控制线程并发与隐蔽性:-t 线程数,-W 每次尝试间隔
hydra -l admin -P pass.txt -t 4 -W 3 192.168.1.10 ssh
# RDP 爆破
hydra -l administrator -P pass.txt rdp://192.168.1.10爆破 Web 登录表单要用 http-post-form 模块,关键是描述请求格式和"失败标志":
hydra -l admin -P pass.txt 192.168.1.10 http-post-form \
"/login.php:username=^USER^&password=^PASS^:Login failed"^USER^/^PASS^是占位符,Hydra 会替换成字典内容。- 冒号分三段:路径 : POST 参数 : 失败标志。失败标志是登录失败时页面才出现的字符串,Hydra 据此判断是否爆破成功。
先用 Burp Suite 抓一次真实登录请求,照抄参数名和失败提示,再填进 Hydra,成功率最高。如果是登录成功才有的标志,把
:Login failed 换成 :S=success_keyword。John the Ripper:离线破解
John 擅长自动识别哈希类型,对 CPU 破解和各类格式支持极好。
# 把 /etc/passwd 和 /etc/shadow 合并成 John 能识别的格式
unshadow /etc/passwd /etc/shadow > hashes.txt
# 字典破解
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
# 字典 + 规则变形(在每个词上套大小写、加数字等变换,命中率大增)
john --wordlist=rockyou.txt --rules hashes.txt
# 查看已破解结果
john --show hashes.txt
# 指定哈希格式(自动识别不准时)
john --format=raw-md5 --wordlist=rockyou.txt md5.txt不带字典直接 john hashes.txt 会依次走 single、wordlist、incremental 三种模式,适合摸底。
Hashcat:GPU 高速破解
Hashcat 利用 GPU 并行,速度比 CPU 快几个数量级,是离线破解的主力。核心是两个参数:-m(哈希类型)和 -a(攻击模式)。
# 字典攻击:-m 0 表示 MD5,-a 0 表示字典模式
hashcat -m 0 -a 0 hashes.txt rockyou.txt
# NTLM 哈希(Windows,-m 1000)字典 + 规则
hashcat -m 1000 -a 0 ntlm.txt rockyou.txt -r rules/best64.rule
# 掩码攻击:-a 3,按固定模式穷举,如 8 位纯数字手机/密码
hashcat -m 0 -a 3 hashes.txt ?d?d?d?d?d?d?d?d
# 查看已破解
hashcat -m 0 hashes.txt --show常见哈希类型(-m):0=MD5,100=SHA1,1000=NTLM,1800=sha512crypt(Linux shadow),22000=WPA-PBKDF2(见 WiFi 章节)。掩码占位符:?d 数字、?l 小写、?u 大写、?s 符号、?a 全部。
忘了某种哈希对应哪个
-m?运行 hashcat --help | grep -i ntlm 或查官方 example_hashes 页面。Hashcat 在虚拟机里通常用不上 GPU,离线破解建议在物理机/有显卡直通的环境跑。防御视角
凭据攻击的防御几乎全在"账号体系"侧:
- 强密码 + 长度优先:长口令(passphrase)比复杂短密码更抗破解;禁用弱密码、检查是否在泄露库中。
- 多因素认证(MFA):即使密码被破,也无法仅凭密码登录,是性价比最高的防线。
- 登录限速与锁定:失败 N 次锁定账号或封禁 IP,直接废掉在线爆破。
- 哈希算法选型:存储密码用 bcrypt / Argon2 等慢哈希加盐,让离线破解的代价高到不可行;绝不用裸 MD5/SHA1。
- 监控异常登录:大量失败登录、异地/异常时间登录应触发告警。
最后更新于