跳到主要内容

Hydra 爆破实战与限速规避

Hydra 是常用的在线爆破工具,把用户名与密码候选批量送进目标服务的真实认证入口。决定成败的通常不是工具本身,而是三件事:失败判定标记是否准确、并发与节奏是否触发限速、字典是否贴合目标。

仅限授权环境

在线爆破会产生大量失败认证日志,可能触发锁定或影响业务。仅用于实验环境或明确授权的测试,并控制速率与并发。


适用场景与判断前提

前提判断方式
认证入口可达先用 Nmap 等确认服务与端口开放
协议受支持hydra 提供 ssh、http-get、http-post-form 等模块
失败响应可区分固定失败文案、状态码或响应状态差异
字典合理通用字典截断,或按线索定向生成小字典

SSH 爆破

hydra -l user -P rockyou.txt -t 8 -f <target> ssh
参数作用
-l / -L单个用户名 / 用户名字典
-P密码字典
-t 8并发任务数限制为 8,避免打爆 sshd
-f命中一组有效凭据后立即停止

HTTP 表单与 Basic Auth

表单模块按 路径:POST体:失败条件 用冒号分隔,^USER^^PASS^ 是占位符:

hydra -l admin -P passlist.txt <target> \
http-post-form "/login:username=^USER^&password=^PASS^:F=失败标记"

失败标记要选响应中固定出现的失败文案,或认证失败时的状态差异;标记选错会把失败响应误判为命中。

HTTP Basic 认证走 http-get 模块,格式为 路径:A=BASIC:失败标记

hydra -L users.txt -P rockyou.txt <target> \
http-get "/v2/_catalog:A=BASIC:F=UNAUTHORIZED"

限速规避

  • 对带速率限制的服务用 -t 1 -W 1 单线程慢打,牺牲速度换稳定性。
  • Flask/Werkzeug 开发服务器抗并发能力差,并发一高容易把服务整个打挂;对这类目标必须降并发并加等待,爆破前后都观察服务是否存活。

定向字典构造

通用大字典命中差时,按目标线索生成小字典往往更有效:

来源做法
GECOS 字段/etc/passwd 注释字段提取模板,如 To***21** 提示 Todd + 2 位数字的组合,枚举生成小字典
大小写变体首字母大小写、全大写等变体一并入字典
站点文案CeWL 主题词表 从页面内容生成候选词
规模控制截断通用字典控制爆破时长
head -n 50000 /usr/share/wordlists/rockyou.txt > /tmp/rockyou-top50k.txt

特殊场景

场景思路
前端 CSRF 固定 token 的表单wfuzz 更方便:固定 cookie,用 --filter 按响应差异判定成败
token 每次请求都刷新hydra 表达不了,写脚本取 token 后再提交
无 TTY 环境爆破 susu 要求终端,用 os.forkpty() 分配伪终端绕过 TTY 要求

复核要点

  • 命中后先做低影响的验证,不要直接执行破坏性动作。
  • 失败标记写错时 hydra 会产生假阳性,抽查一条命中记录人工复核。
  • 爆破期间持续确认目标服务仍正常响应,防止把服务打挂。

防御建议

  1. 部署 fail2ban,对同一来源的连续认证失败自动封禁。
  2. 启用账户锁定或指数退避,抬高在线爆破成本。
  3. 对 SSH、管理后台与 VPN 等入口启用 MFA。
  4. 对全部认证入口做统一限速,而不是只依赖单个服务的默认配置。
  5. 集中审计认证失败日志,关注分布式与低速爆破特征。