Hydra 攻击中循环密码

HydraHydraBeginner
立即练习

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

简介

在本实验中,你将学习 Hydra 如何在 SSH 攻击期间迭代用户名和密码。你将创建用户名和密码列表,然后运行默认的 SSH 攻击,以观察 Hydra 的默认行为。

首先,你将准备包含用户名和密码列表的 usernames.txtpasswords.txt 文件。然后,你将使用这些列表执行基本的 Hydra SSH 攻击,以演示 Hydra 如何尝试不同的组合。最后,你将探索 -u 选项对 Hydra 尝试用户名和密码组合顺序的影响。

准备用户名和密码列表

本步骤中,你将创建两个必要的文件:用户名列表和密码列表。这些列表将由 Hydra 用于尝试 SSH 登录。创建这些列表允许你系统性地测试各种用户名和密码组合,以针对你的目标进行测试。

首先,打开你的终端。你当前位于 /home/labex/project 目录下(也可以访问为 ~/project)。你将在该目录中创建文件。

使用 nano 文本编辑器创建一个名为 usernames.txt 的文件:

nano ~/project/usernames.txt

现在,将以下用户名添加到文件中。这些只是示例;你可以根据需要自定义它们。

root
admin
test
user
ubuntu

添加内容后,按 Ctrl + O 保存文件,然后按 Enter 确认文件名,最后按 Ctrl + X 退出 nano

接下来,你将创建密码列表。同样,使用 nano 创建一个名为 passwords.txt 的文件:

nano ~/project/passwords.txt

将以下密码添加到文件中。记住,这些只是示例。

password
123456
qwerty
secret
ubuntu

Ctrl + O 保存文件,然后按 Enter 确认文件名,最后按 Ctrl + X 退出 nano

为了验证文件已正确创建,你可以使用 cat 命令显示其内容。

显示 usernames.txt 的内容:

cat ~/project/usernames.txt

你应该看到类似于此的输出:

root
admin
test
user
ubuntu

类似地,显示 passwords.txt 的内容:

cat ~/project/passwords.txt

你应该看到类似于此的输出:

password
123456
qwerty
secret
ubuntu

现在,usernames.txtpasswords.txt 文件已准备好用于后续步骤中的 Hydra。

运行默认 SSH 攻击

本步骤中,你将使用 Hydra 执行基本的 SSH 攻击,使用你在上一步创建的用户名和密码列表。这将演示 Hydra 的默认行为,即迭代用户名和密码。

Hydra 命令的基本语法是:

hydra [options] <target> <service> [additional options]
  • hydra: 调用 Hydra 工具的命令。
  • [options]: 用于自定义攻击的各种选项,例如指定用户名和密码列表。
  • <target>: 目标 SSH 服务器的 IP 地址或主机名。在本实验中,你将使用 127.0.0.1(本地主机)作为目标。
  • <service>: 要攻击的服务(例如,sshftphttp)。在本例中,它是 ssh
  • [additional options]: 服务特定的选项。

现在,运行默认的 SSH 攻击。你将使用 -L 选项指定用户名列表,使用 -P 选项指定密码列表,并使用 -V 选项查看详细输出,显示每次尝试。

hydra -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh

这条命令指示 Hydra 执行以下操作:

  • -V: 启用详细模式,显示每次登录尝试。
  • -L ~/project/usernames.txt: 使用 ~/project 目录中的 usernames.txt 文件作为用户名列表。
  • -P ~/project/passwords.txt: 使用 ~/project 目录中的 passwords.txt 文件作为密码列表。
  • 127.0.0.1: 攻击在本地主机上运行的 SSH 服务。
  • ssh: 指定你正在攻击 SSH 服务。

在你的终端中执行该命令。Hydra 将尝试使用 usernames.txt 中的每个用户名和 passwords.txt 中的每个密码登录 127.0.0.1 上的 SSH 服务。默认情况下,Hydra 首先迭代用户名,在尝试下一个用户名之前,先尝试单个用户名的每个密码。

输出将显示正在进行的尝试。你将看到有关每次登录尝试的详细信息。由于你使用的是弱密码并针对本地主机,登录可能成功,但大多数尝试都将失败。

输出将类似于此(实际输出可能有所不同):

Hydra vX.X (c) XXXX by van Hauser/THC & David Maciejak - 请勿在军事或秘密服务组织或用于非法目的中使用(这并非强制性,这些***无论如何都忽略法律和道德)。

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "qwerty" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "secret" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "ubuntu" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
...

请注意,Hydra 首先尝试“root”用户的所有密码,然后转到“admin”,依此类推。这是默认行为。

使用 -u 选项优先循环密码

本步骤中,你将使用 Hydra 的 -u 选项来更改登录尝试的顺序。默认情况下,Hydra 首先迭代用户名,在尝试完每个用户名的所有密码后才继续。-u 选项反转了这种行为,导致 Hydra 首先迭代密码,在尝试完所有用户名的每个密码后才继续到下一个密码。

这在怀疑多个帐户使用相同密码的情况下很有用。

要使用 -u 选项,只需将其添加到你之前的 Hydra 命令中。你还会再次使用 -V 选项来查看详细的尝试。

hydra -u -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh

这条命令指示 Hydra 执行以下操作:

  • -u: 优先循环密码。
  • -V: 启用详细模式,显示每次登录尝试。
  • -L ~/project/usernames.txt: 使用 ~/project 目录中的 usernames.txt 文件作为用户名列表。
  • -P ~/project/passwords.txt: 使用 ~/project 目录中的 passwords.txt 文件作为密码列表。
  • 127.0.0.1: 攻击在本地主机上运行的 SSH 服务。
  • ssh: 指定你正在攻击 SSH 服务。

在你的终端中执行该命令。Hydra 将尝试登录 127.0.0.1 上的 SSH 服务。这次,它将在尝试下一个密码之前,先尝试 passwords.txt 中的第一个密码与 usernames.txt 中的每个用户名。

观察输出。你应该注意到尝试顺序与上一步不同。Hydra 现在将依次尝试相同密码与多个用户名。

输出将类似于此(实际输出可能有所不同):

Hydra vX.X (c) 2021 by van Hauser/THC & David Maciejak - 请勿在军事或秘密服务组织或用于非法目的中使用(这并非强制性,这些 *** 忽略法律和道德 anyway)。

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "user" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "ubuntu" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "123456" - X of X [child X] (X/X)
...

请注意,Hydra 现在首先尝试“password”与所有用户名,然后尝试“123456”与所有用户名,依此类推。这是使用 -u 选项时的行为。

通过比较此命令的输出与前一步命令的输出,你可以清楚地看到登录尝试顺序的差异。这有助于理解 Hydra 的工作原理,并在特定情况下选择最有效的攻击策略。

分析攻击模式和性能

本步骤中,你将分析两种攻击方法的实际差异,并了解每种方法在何时可能更有效。你还会探索如何在不同场景下优化 Hydra 攻击。

理解策略差异

默认模式和 -u 模式之间的选择会显著影响攻击效率:

  • 默认模式(用户名优先): 当你怀疑特定用户可能拥有弱密码时效果更好
  • 密码优先模式 (-u): 当你怀疑多个帐户使用相同密码时效果更好

让我们通过更针对性的方法来演示这一点。首先,创建一个更精简、更集中的测试,以便清晰地看到差异:

echo -e "admin\ntest" > ~/project/small_users.txt
echo -e "password\n123456" > ~/project/small_passwords.txt

现在,运行两种攻击,并限制输出,以便清晰地看到模式:

默认攻击(用户名优先):

hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh

-t 1 选项限制 Hydra 每次只使用一个任务,使序列更容易跟踪。

密码优先攻击:

hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh

性能分析

现在,让我们分析时间和效率。创建一个简单的计时测试:

echo "Testing default mode timing..."
time hydra -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
echo "Testing -u mode timing..."
time hydra -u -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1

真实应用场景

了解何时使用每种模式:

  1. 何时使用默认模式:

    • 你掌握了关于特定高价值帐户的情报
    • 你想快速测试管理员帐户是否拥有弱密码
    • 你正在针对少量特权用户
  2. 何时使用 -u 模式:

    • 你怀疑多个帐户重复使用密码
    • 你拥有先前违规事件中常见密码的列表
    • 你想找到任何拥有常见弱密码的帐户

验证攻击模式

为了清晰地看到攻击模式的差异,让我们创建一个简单的演示:

echo "=== Default Mode Pattern ==="
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
echo "=== Password-First Mode Pattern ==="
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4

这将清晰地显示:

  • 默认模式:admin/password, admin/123456, test/password, test/123456
  • 密码优先模式:admin/password, test/password, admin/123456, test/123456

当处理帐户锁定策略或尝试在多个帐户之间传播尝试以避免被检测时,这种差异变得至关重要。

总结

在本实验中,你学习了如何为 Hydra SSH 攻击准备必要的文件,方法是创建 ~/project 目录下的用户名和密码列表。你使用 Hydra 执行了 SSH 攻击,并使用了详细输出,以观察详细的攻击尝试,并理解 Hydra 的迭代行为。

你探索了 Hydra 的默认模式(用户名优先迭代)和 -u 选项(密码优先迭代)之间的关键区别。通过实践,你发现了:

  • 默认模式: 在尝试下一个用户名之前,先尝试每个用户名的所有密码 - 适用于针对特定高价值帐户
  • 密码优先模式 (-u): 在尝试下一个密码之前,先尝试每个密码与所有用户名的组合 - 更适合查找使用常见弱密码的帐户

你还在实践中学习了在选择这些模式时需要考虑的实际因素,包括性能影响以及每种方法在哪些真实场景中最为有效。这种理解使你能够根据特定的目标环境和目标优化你的渗透测试策略。

该实验演示了在处理帐户锁定策略或尝试通过在多个帐户之间分发登录尝试来避免被检测时,不同的攻击模式如何至关重要。