逆向工程实战手册 第 59 章

第 59 章 密码破解与认证攻击

认证是攻击面最密集的入口:弱口令、可爆破、哈希可逆、令牌可预测。本章系统覆盖:在线爆破(服务认证)、离线破解(哈希)、字典工程、以及认证绕过的高级手法。密码破解的核心不是"跑得快",而是"字典对"。

📍 知识点地图 | 主题:密码破解 | 前置:第58章 | 后续:— | 核心概念:在线/离线、字典工程、hashcat、默认凭据

59.1 密码破解分类学(先选对路线)

在线爆破(Online): 直接打认证接口
  ├─ 服务爆破: SSH/RDP/FTP/Web 登录
  └─ Web 表单: 登录/验证码/重置
离线破解(Offline): 拿到哈希后本地破解
  ├─ 暴力: 全字符空间(慢)
  ├─ 字典: 常见密码列表(快,最实用)
  ├─ 规则: 字典+变换(密码规律)
  └─ 掩码: 已知格式(8 位数字等)
令牌攻击: JWT/重置 token/会话(第 58.7)

选型原则

有验证码/限速/锁定 → 优先离线(先拿哈希)
无限速弱口令 → 在线爆破(少而精的字典)
有哈希 → 离线破解(规则+掩码组合)

59.2 字典工程(破解效率的决定因素)

字典不是越大越好

正确姿势: 目标相关的"小而准"字典
  □ 默认密码表(厂商默认口令)
  □ 用户名+常见后缀组合
  □ 社工生成(目标员工的姓名/生日/工号组合,第 57.3 员工画像)
  □ 已泄露密码库(撞库思想: 用户习惯复用密码)
  □ 靶标技术栈的默认凭据(设备/中间件/数据库)

社工字典生成规则(员工画像 → 密码)

{姓名拼音}{年份}        → zhangsan2024
{姓名首字母}{部门缩写}   → zs_dev
{工号}@{域名}           → 10086@target.com
{姓名}{常见后缀}        → zhangsan@123, zhangsan!@#
{中文拼音}{键盘模式}     → qwe123, zhang123

信息来源: 脉脉/LinkedIn 部门架构、GitHub 用户名、邮箱命名规则

59.3 在线爆破工具链

# Hydra(多协议通用)
hydra -l admin -P pass.txt ssh://target
hydra -L users.txt -P pass.txt rdp://target
hydra -l admin -P pass.txt ftp://target

# Web 表单爆破(Hydra 或 Burp Intruder)
hydra -l admin -P pass.txt target http-post-form \
  "/login:user=^USER^&pass=^PASS^:F=incorrect"

# medusa / ncrack(备选)
medusa -h target -U users.txt -P pass.txt -M ssh

在线爆破的纪律

□ 先确认限速策略(锁定次数/封禁)→ 超限会断后路
□ 字典小而准(前 100 条覆盖大多数弱口令)
□ 记录每次尝试(审计要求)
□ 优先打: 服务默认端口 + 管理界面(不是用户面)
□ 打"第二入口": VPN/堡垒机/邮件系统(人们在这些地方用弱密码)

59.4 离线破解(拿到哈希之后)

哈希识别(先认类型)

haiti <hash>          # 自动识别哈希类型
# 常见: MD5/SHA1/SHA256(快速) bcrypt(慢) NTLM(Windows) 等

Hashcat(GPU 加速主力)

# 基础字典
hashcat -m 0 hashes.txt rockyou.txt          # MD5
hashcat -m 1000 hashes.txt rockyou.txt       # NTLM
hashcat -m 1800 hashes.txt rockyou.txt       # sha512crypt

# 规则攻击(字典+变换规则: 加数字/大小写/替换)
hashcat -m 0 hashes.txt rockyou.txt -r rules/best64.rule

# 掩码攻击(已知格式)
hashcat -m 0 hashes.txt -a 3 ?d?d?d?d?d?d   # 6 位数字
hashcat -m 0 hashes.txt -a 3 ?u?l?l?l?l?d?d # 大写+4小写+2数字

# 组合攻击(word1+word2)
hashcat -m 0 hashes.txt -a 1 dict1.txt dict2.txt

John the Ripper(备选,规则丰富)

john hashes.txt --wordlist=rockyou.txt
john hashes.txt --wordlist=dict.txt --rules      # 自动规则
john --show hashes.txt

破解优先级

1. 常见密码字典(rockyou 前 10 万条)—— 覆盖 50%+ 弱口令
2. 规则变换(大小写/数字后缀/替换)—— 覆盖用户习惯
3. 掩码(已知策略: 8 位/生日/手机号)
4. 撞库(已泄露库中匹配该用户名/邮箱的密码)—— 效率最高!

59.5 认证绕过(不破解也能进)

□ 默认凭据: admin/admin、admin/123456(设备/中间件第一优先试)
□ 万能密码: ' OR '1'='1(SQL 注入登录,第 58.2)
□ 响应差异: 用户名枚举("用户不存在" vs "密码错误")→ 先撞用户名
□ 会话固定/劫持: 检查 cookie 可预测性
□ 逻辑绕过: 改响应(前端校验)、直接跳转、API 直调
□ 密码重置链(第 58.7)
□ 并发竞态: 验证码同时使用(限速绕过,配合重放)

59.6 常见服务默认凭据速查

SSH: root/root, admin/admin
MySQL: root/(空), root/root
Redis: 无认证(直接打!)
MongoDB: 无认证(直接打!)
Tomcat: tomcat/tomcat, admin/admin
WordPress: admin/admin, admin/password
路由器: admin/admin, admin/1234
打印机/摄像头: admin/1234(IoT 默认口令表)

记住:很多系统的"认证"只是摆设——Redis/MongoDB 默认无认证、管理面板默认口令、IoT 设备出厂口令。枚举阶段发现这些服务 = 直接进。

59.7 破解检查清单

□ 判断路线: 在线 vs 离线 vs 绕过(先想后跑)
□ 目标字典: 默认口令+社工+泄露库(字典对才有效)
□ 在线爆破: 确认限速/锁定策略,小而准
□ 离线: 哈希识别 → hashcat 字典/规则/掩码
□ 撞库: 泄露库匹配(最高效)
□ 认证绕过: 默认凭据/逻辑/重置链
□ 记录: 尝试次数/成功凭据/来源(审计)

动手练习

  1. 在本地靶场搭一个 SSH 服务(弱口令),用 Hydra 完成一次"小而准"字典的爆破。
  2. 自己生成 MD5/NTLM 哈希,用 hashcat 分别跑字典、规则、掩码三种模式,对比时间。
  3. 用 haiti 识别 10 个不同类型的哈希,为每个选择正确的破解模式。
  4. 审计一个练习应用的认证流程:列出所有"绕过"候选点(默认凭据/响应差异/重置链)。

深入阅读

  • 仓库:skills/pentest-tools/SKILL.md(Hashcat/Hydra/John 工具链)
  • 仓库:skills/reverse-engineering/crypto-decode-tools.md(哈希识别与破解工具)
  • 仓库:skills/api-security/references/jwt-oauth-testing.md(JWT/OAuth 认证攻击)
  • 仓库:skills/attack-chain/SKILL.md(初始访问:VPN/堡垒机突破)