学习 Hydra 基础命令

HydraHydraBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验中,你将学习使用 Hydra(一款多功能的密码破解工具)所必需的命令和技术。你将探索基本的命令结构,包括用户名(-l/-L)、密码(-p/-P)和端口(-s)等关键选项的规范,同时练习针对测试服务器的简单 SSH 攻击。

这些练习将指导你完成目标配置、攻击执行和输出解释。通过完成这个实验,你将获得使用 Hydra 核心功能对网络服务进行基本暴力破解尝试的实践经验。

重要提示:这个实验是为桌面界面设计的。请勿在单终端界面中运行命令。

理解 Hydra 命令结构

在这一步中,我们将探索 Hydra 的基本命令结构,Hydra 是一款通过暴力破解攻击来测试密码安全性的强大工具。在我们开始之前,重要的是要理解 Hydra 会系统地尝试不同的用户名和密码组合来攻击网络服务,以识别薄弱的凭据。

基本的 Hydra 命令遵循以下模式:

hydra [[[-l LOGIN | -L FILE] [-p PASS | -P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-SuvV46] [service://server[:PORT][/OPT]]

让我们分解最常用的选项,以了解每个部分的作用:

  • -l-L:这些选项允许你指定用于测试的单个用户名(-l),或者包含多个用户名的文件(-L)。
  • -p-P:与用户名类似,这些选项允许你测试单个密码(-p),或者来自文件的多个密码(-P)。
  • -t:控制 Hydra 同时进行的尝试次数(并行线程)。
  • -s:当你要测试的服务没有使用其标准端口号时,此选项非常重要。
  • -vV:在攻击期间显示详细的进度信息。
  • -o:将你的结果保存到指定的文件中,以供稍后查看。

为了验证 Hydra 是否正常工作并查看所有可用的选项,我们将从一个简单的命令开始,该命令显示帮助菜单:

hydra -h
hydra help menu

运行此命令后,你应该会看到 Hydra 的完整选项和命令列表。此输出确认该工具已正确安装,并为我们的安全测试练习做好了准备。当你需要检查特定命令语法时,帮助菜单也是一个有用的参考。

指定目标主机和端口

在这一步中,你将学习如何在使用 Hydra 时指定目标主机和端口。这对于将你的攻击导向正确的服务至关重要。可以把它想象成写信封——你需要正确的目的地(IP/主机名)和特定的邮箱(端口)来传递你的消息。

在 Hydra 中指定目标信息的基本格式是:

hydra [options] < service > :// < target > [:port]

让我们分解每个组成部分:

  • <service>:你正在攻击的协议或服务(例如,ssh、ftp、http)。这告诉 Hydra 尝试哪种类型的身份验证。
  • <target>:目标服务器的 IP 地址或主机名。这就像你试图访问的建筑物地址。
  • [:port]:可选的端口号。服务通常在标准端口上运行(例如,SSH 的 22 端口),但有时为了安全起见,它们会被移动到不同的端口。

为了练习,我们将使用在本地主机(127.0.0.1)的 22 端口上运行的测试 SSH 服务器。这意味着我们正在攻击自己的机器,这对于学习来说是安全的。尝试以下命令来验证目标规范:

hydra -vV -l testuser -p testpass ssh://127.0.0.1:22
hydra test command

以下是此测试命令中发生的情况:

  • -vV 使 Hydra 显示详细的输出,以便你可以看到正在发生的事情
  • -l testuser 指定一个测试用户名
  • -p testpass 提供一个测试密码
  • ssh://127.0.0.1:22 告诉 Hydra 尝试在我们本地机器上进行 SSH 身份验证

注意:这只是一个演示语法的测试命令。当你了解各个部分如何组合在一起时,我们将在后面的步骤中使用真实的凭据(credentials)。

使用用户名和密码选项

在这一步中,我们将探索 Hydra 如何处理用于暴力破解攻击的身份验证凭据(authentication credentials)。理解这些选项至关重要,因为 Hydra 需要知道在尝试登录目标系统时要尝试哪些组合。

Hydra 提供了三种主要方法来指定凭据,每种方法都适用于不同的场景:

  1. 单凭据测试(Single Credential Testing)(适用于快速验证):
hydra -l username -p password ssh://127.0.0.1

此命令针对 SSH 服务尝试一个用户名/密码组合。

  1. 基于列表的测试(List-based Testing)(常用于字典攻击):
hydra -L usernames.txt -P passwords.txt ssh://127.0.0.1

在这里,Hydra 将尝试 usernames.txt 中的用户名和 passwords.txt 中的密码之间的每种可能的组合。

  1. 配对凭据文件(Paired Credential File)(当用户名和密码直接关联时):
hydra -C creds.txt ssh://127.0.0.1

这使用一个文件,其中每行包含一个用户名和密码,并用冒号分隔(username:password)。

让我们创建测试文件来练习这些选项。首先,我们将创建一个简单的用户名列表,其中包含常见的管理帐户:

echo -e "admin\nroot\ntestuser" > usernames.txt

接下来,我们将创建一个密码列表,其中包含一些在现实系统中经常发现的弱密码:

echo -e "password\n123456\nadmin123" > passwords.txt

现在,我们可以运行一个带有详细输出(-vV)的测试命令,以查看 Hydra 如何处理这些文件:

hydra -vV -L usernames.txt -P passwords.txt ssh://127.0.0.1
hydra test command

-vV 标志使 Hydra 显示详细的输出,以便你可以观察攻击进度并了解每个步骤中发生的事情。

运行一个简单的 SSH 攻击命令

在这一步中,你将结合之前的所有学习内容,使用 Hydra 执行一个完整的 SSH 暴力破解攻击。我们将使用在本地主机(127.0.0.1)上运行的测试 SSH 服务器,以及我们之前准备的凭据。这个实践练习将帮助你了解 Hydra 如何系统地尝试不同的用户名和密码组合来攻击 SSH 服务。

在发起攻击之前,让我们验证我们的目标设置是否正常工作。我们将尝试手动 SSH 连接,以确认该服务正在运行:

ssh [email protected]

(当提示输入密码时,键入 "Ctrl+C" 返回到你的会话)

这个手动测试帮助我们确认 SSH 服务是活动的,并且响应连接尝试。当 Hydra 运行时,它将进行类似的连接尝试,但会使用多次尝试来自动化该过程。

LabEx VM 在环境变量 PASSWORD 中提供了 labex 的密码。让我们将其添加到密码文件中以进行测试:

重要提示:在桌面界面中运行以下命令,否则你将无法获得 PASSWORD 环境变量。

echo "labex" > usernames.txt
echo -e "$PASSWORD" >> passwords.txt
environment variable

现在让我们运行实际的 Hydra 攻击命令。在这里,我们将所有准备好的组件放在一起——用户名列表、密码列表和目标信息:

hydra -vV -L usernames.txt -P passwords.txt -t 4 ssh://127.0.0.1
hydra test command

让我们分解每个参数的作用:

  • -vV:启用详细输出,以便你可以实时查看 Hydra 的进度
  • -L usernames.txt:指定包含要尝试的潜在用户名的文件
  • -P passwords.txt:指定包含要测试的潜在密码的文件
  • -t 4:设置要使用的并行连接(线程)数
  • ssh://127.0.0.1:将我们的目标标识为本地主机上的 SSH 服务

该命令将系统地测试我们用户名和密码列表中的所有组合。在我们的受控测试环境中,这将有意地无法找到有效的凭据,但你将确切地看到 Hydra 如何处理这些组合。详细的输出将向你展示 Hydra 所做的每次尝试,帮助你了解暴力破解过程。

请注意 Hydra 如何自动处理失败的尝试并继续进行下一个组合。这证明了自动化工具相对于手动测试的强大之处。当 Hydra 处理我们测试文件中的所有可能组合时,该过程可能需要一些时间。

检查命令输出

在这一步中,我们将研究如何在运行 SSH 攻击后读取和理解 Hydra 的输出。这非常重要,因为输出会告诉我们攻击是否成功,并提供有价值的调试信息。作为初学者,你将学习识别结果中的关键成功指标。

当你在第 4 步中执行 SSH 攻击命令时,Hydra 生成的输出如下所示:

[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... done
[STATUS] 80.00 tries/min, 80 tries in 00:01h, 19 to do in 00:01h
[22][ssh] host: 127.0.0.1   login: testuser   password: testpass
1 of 1 target successfully completed, 1 valid password found

让我们分解每个部分的含义:

  1. [DATA] 行显示了正在被攻击的目标服务和地址
  2. [STATUS] 提供有关攻击进度的实时统计信息
  3. 最重要的一行以以下格式显示找到的任何凭据:[port][service] host: IP login: username password: password
  4. 最后一行总结了攻击结果

为了文档记录和以后的分析,你可以使用 -o 选项将 Hydra 的输出保存到文件中。这将创建你的测试结果的永久记录:

hydra -vV -L usernames.txt -P passwords.txt -t 4 -o results.txt ssh://127.0.0.1

命令完成后,你可以使用以下命令查看保存的结果:

cat results.txt
hydra test command

该文件将包含你在终端中看到的相同输出,允许你稍后查看结果或与团队成员共享。

总结

在这个实验中,你已经学习了使用 Hydra 进行密码破解攻击的基本命令和技术。这些练习涵盖了核心命令语法,包括使用 -l/-L-p/-P 标志指定用户名/密码,使用 -s 配置端口,以及基本的 Hydra 安装验证。

你还通过实际的 SSH 攻击示例,练习了使用 <service>://<target>[:port] 格式指定目标。这些基础技能使你能够执行基本的 Hydra 操作,同时了解正确的命令结构和目标定义。