跳至内容
密码爆破与凭据攻击

密码爆破与凭据攻击

凭据是渗透测试中最值钱的战利品——拿到一组有效账号密码,往往比挖一个复杂漏洞更直接。这篇区分两类密码攻击:针对在线服务的在线爆破(Hydra)和针对密码哈希的离线破解(John the Ripper、Hashcat),并讲清楚字典、规则、掩码这些提升命中率的关键手段。

仅对授权目标或自己的哈希进行破解。在线爆破会产生大量失败登录日志、可能触发账号锁定,未授权使用违法。所有示例针对自建靶场。

在线 vs 离线

维度在线爆破离线破解
攻击对象活的登录服务(SSH、RDP、Web 表单等)已获取的密码哈希文件
速度瓶颈网络往返、服务限速、账号锁定本地算力(CPU/GPU)
隐蔽性差,留大量日志,易触发告警好,完全本地,目标无感知
典型工具Hydra、Medusa、PatatorJohn 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。
  • 监控异常登录:大量失败登录、异地/异常时间登录应触发告警。
最后更新于