介绍
在本实验中,我们将探索如何利用 Hydra 工具的选项限制尝试次数,从而尽早阻止 Hydra 攻击。我们将首先使用 vsftpd 设置一个 FTP 服务器,并配置多个用户帐户,例如 testuser1 和 testuser2,每个帐户都有其自己的密码。此设置将允许我们模拟 Hydra 同时尝试破解多个帐户的情况。
该实验将指导你使用 -f 选项在首次成功登录后停止 Hydra,以及使用包含多主机列表的 -F 选项。最后,我们将比较 -f 和 -F 的行为,以了解如何利用它们来减轻 Hydra 攻击。
设置包含多个凭据的 FTP 服务器
本步骤中,我们将设置一个 FTP 服务器并配置多个用户凭证。这将使我们能够测试 Hydra 同时破解多个帐户的能力。我们将使用 vsftpd (Very Secure FTP Daemon) 作为我们的 FTP 服务器。
首先,让我们安装 vsftpd。打开你的终端并执行以下命令:
sudo apt update
sudo apt install vsftpd -y
接下来,我们需要配置 vsftpd。我们将首先备份原始配置文件。在更改任何系统配置文件之前,这是一个良好的实践。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
现在,让我们使用 nano 编辑配置文件 /etc/vsftpd.conf。此文件控制 FTP 服务器的行为。
sudo nano /etc/vsftpd.conf
在 nano 编辑器中,添加或修改以下行。这些设置将禁用匿名访问,启用本地用户登录,允许写入访问,并强制本地用户登录到其主目录以提高安全性。
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO
要在 nano 中保存文件:
- 按
Ctrl + X退出。 - 按
Y确认保存。 - 按
Enter确认文件名。
保存文件后,使用以下命令检查配置文件,确保更改已正确应用:
sudo cat /etc/vsftpd.conf | grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|listen)"
确保输出显示与我们添加的配置相同的配置。
现在,让我们创建多个用户帐户。我们将创建两个用户:testuser1 和 testuser2,并为它们设置密码。Hydra 将使用这些用户尝试登录。
创建 testuser1 并指定其主目录:
sudo useradd -m testuser1
使用非交互式命令设置 testuser1 的密码:
echo 'testuser1:password123' | sudo chpasswd
创建 testuser2 并指定其主目录:
sudo useradd -m testuser2
使用非交互式命令设置 testuser2 的密码:
echo 'testuser2:password456' | sudo chpasswd
这些命令是非交互式的,将直接创建用户,无需提示输入,使其在自动化环境中更可靠。
现在,我们需要修复 chroot 配置的主目录权限。启用 chroot_local_user=YES 后,出于安全原因,用户的 home 目录必须不可由用户写入:
sudo chmod 755 /home/testuser1
sudo chmod 755 /home/testuser2
为每个用户创建可写入的子目录,以便他们可以上传文件:
sudo mkdir /home/testuser1/files
sudo mkdir /home/testuser2/files
sudo chown testuser1:testuser1 /home/testuser1/files
sudo chown testuser2:testuser2 /home/testuser2/files
接下来,重启 vsftpd 服务,以应用我们对配置文件所做的更改并识别新用户。
sudo service vsftpd restart
现在,让我们测试 FTP 服务器以确保它运行正常,并且我们的新用户可以登录。你可以使用 ftp 命令行客户端连接到服务器。由于我们是在本地运行服务器,我们可以连接到 localhost。
ftp localhost
系统将提示你输入用户名。输入 testuser1,然后输入密码 password123。如果一切配置正确,你应该会看到一条登录成功的消息。
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:labex): testuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
你可以键入 bye 退出 FTP 客户端。
ftp> bye
221 Goodbye.
现在,让我们准备 Hydra 将用于攻击的文件。导航到你的 ~/project 目录,这是你的默认工作目录。
cd ~/project
在 ~/project 目录中创建一个名为 users.txt 的文件。此文件将包含 Hydra 将尝试使用的用户名。
nano users.txt
将以下用户名添加到 users.txt:
testuser1
testuser2
保存文件并退出 nano。
接下来,在 ~/project 目录中创建一个名为 passwords.txt 的文件。此文件将包含密码列表,包括我们测试用户的正确密码以及一些常见的错误密码。
nano passwords.txt
将以下密码添加到 passwords.txt:
password123
password456
password
123456
qwerty
保存文件并退出 nano。
现在,我们已设置了一个具有多个用户帐户的 FTP 服务器,以及 Hydra 可用于尝试破解帐户的用户和密码列表。
使用 -f 选项在第一次匹配后停止
本步骤中,我们将使用 Hydra 的 -f 选项。-f 选项指示 Hydra 在找到目标的第一个有效用户名/密码组合后停止。当只需要在特定服务上找到一个有效帐户,并且不想在成功登录后 Hydra 继续尝试其他组合时,此选项非常有用。
确保你位于 ~/project 目录。
cd ~/project
现在,让我们使用我们在上一步中创建的用户名和密码列表,对我们的 FTP 服务器运行 Hydra。我们将包含 -f 选项。
hydra -L users.txt -P passwords.txt localhost ftp -f
让我们分解这个命令:
hydra: 用于暴力破解的命令行工具。-L users.txt: 指定包含用户名列表的文件 (users.txt在当前目录中)。-P passwords.txt: 指定包含密码列表的文件 (passwords.txt在当前目录中)。localhost: 目标 FTP 服务器的地址。ftp: 要攻击的服务协议 (在本例中为 FTP)。-f: 这是关键的选项,指示 Hydra 在找到第一个有效的用户名/密码组合后停止。
观察终端中的输出。Hydra 将尝试使用列表中的用户名和密码进行登录。一旦找到有效的组合 (例如,testuser1:password123),它将显示成功登录信息,然后停止操作。
输出应类似于以下内容:
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - 请谨慎使用!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:41:46
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://localhost:21/
[21][ftp] host: localhost login: testuser1 password: password123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:41:47
请注意,Hydra 在找到第一个有效组合 (testuser1:password123) 后立即停止。如果没有 -f 选项,Hydra 将继续尝试 passwords.txt 文件中 testuser1 的所有其他组合,然后继续 testuser2 并尝试该用户的全部密码。
当你在测试特定服务,并且只需要验证至少一个帐户是否易受攻击时,此选项特别有用,可以节省大量时间和资源。
使用 -F 选项测试多主机列表
本步骤中,我们将探索 Hydra 的 -F 选项。与 -f 选项不同,-f 选项在找到单个主机的第一个有效凭据对后停止,而 -F 选项则是在找到列表中所有主机上的第一个有效凭据对后停止。当目标是多个系统,并且只需要找到其中一个易受攻击的入口时,此选项特别有用。
为了演示这一点,我们将模拟多主机场景。由于我们只有一个虚拟机,我们将多次使用 localhost 作为主机列表中的项,以模拟不同的目标。
首先,确保你位于 ~/project 目录。
cd ~/project
现在,让我们在你的 ~/project 目录中创建一个名为 hosts.txt 的文件。此文件将包含目标主机的列表。
nano hosts.txt
将以下行添加到 hosts.txt:
localhost
localhost
保存文件并退出 nano。通过两次列出 localhost,我们告诉 Hydra 将其视为两个独立的目标,即使它们指向同一台机器。
现在,我们将使用 -F 选项运行 Hydra,以攻击 hosts.txt 文件中指定的宿主列表。
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
让我们分解这个命令:
-L users.txt: 指定包含用户名列表的文件。-P passwords.txt: 指定包含密码列表的文件。-M hosts.txt: 这是新的选项。它指定包含目标主机列表的文件 (hosts.txt在当前目录中)。ftp: 要攻击的服务协议。-F: 这是关键的选项,指示 Hydra 在列表中所有主机上找到第一个成功登录后停止。
观察终端中的输出。Hydra 将尝试使用列表中的用户名和密码登录 hosts.txt 文件中的每个主机。一旦在任何一个主机上找到有效的组合,它将显示成功登录信息,然后停止攻击 hosts.txt 中列出的所有主机。
输出应类似于以下内容:
Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - 请谨慎使用!
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:42:10
[DATA] max 10 tasks per 2 servers, overall 20 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://(2 targets):21/
[21][ftp] host: localhost login: testuser1 password: password123
[STATUS] attack finished for localhost (valid pair found)
2 of 2 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:42:11
即使 hosts.txt 中有两个 localhost 条目,Hydra 在找到第一个 localhost 实例的第一个成功登录后也会停止。它不会继续尝试查找第二个 localhost 条目的凭据,这演示了 -F 选项的作用。
当目标是多个系统,并且只需要找到一个易受攻击的系统来实现目标时,-F 选项非常有用。它可以通过在任何列出的目标上发现漏洞时立即停止攻击来显著节省时间和计算资源。
比较 -f 和 -F 的行为
本步骤将直接比较 -f 和 -F 选项的行为,以加深你对它们差异的理解。我们将使用与之前步骤相同的设置:在 localhost 上运行的 FTP 服务器,users.txt 和 passwords.txt 文件,以及包含两个 localhost 条目的 hosts.txt 文件。
首先,让我们重新运行使用 -f 选项的命令。此命令针对单个主机 (localhost),并在找到该特定主机的第一个有效凭据后停止。
hydra -L users.txt -P passwords.txt localhost ftp -f
正如我们在步骤 2 中观察到的那样,Hydra 将找到 testuser1:password123,然后停止。它不会尝试为 localhost 找到 testuser2:password456。
现在,让我们重新运行使用 -F 选项的命令。此命令针对主机列表 (hosts.txt),并在找到该列表中任何主机的第一个有效凭据后停止。
hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F
正如我们在步骤 3 中观察到的那样,Hydra 将在 hosts.txt 中第一个 localhost 条目上找到 testuser1:password123,然后停止。它不会继续检查 hosts.txt 文件中的第二个 localhost 条目。
关键区别在于 Hydra 如何解释目标以及何时决定停止:
-f(单个目标): 当你指定单个目标 (例如,localhost) 时,-f指示 Hydra 在找到该特定目标的任何有效用户名/密码对后立即停止。它不会继续搜索同一目标的其他有效凭据。-F(多主机列表): 当你使用-M指定目标列表时,-F指示 Hydra 在该列表中的任何主机上找到任何有效用户名/密码对后立即停止。它不会继续搜索同一主机的其他有效凭据,也不会继续检查列表中的后续主机。
为了进一步说明差异,考虑一个假设场景,你正在扫描具有多个 FTP 服务器的网络:ftp1.example.com、ftp2.example.com 和 ftp3.example.com。
如果使用
-f并针对ftp1.example.com,Hydra 将在ftp1.example.com上找到第一个有效凭据并停止。如果然后你想检查ftp2.example.com,你需要为它运行一个单独的 Hydra 命令。如果将所有三个服务器放入
hosts.txt文件中并使用-F,Hydra 将开始检查ftp1.example.com。如果它在那里找到有效凭据,它将立即停止整个操作,甚至无需尝试连接到ftp2.example.com或ftp3.example.com。
总结:
- 当你专注于单个目标并想要找到其至少一个有效凭据时,使用
-f。 - 当你扫描多个目标并希望在任何目标上找到任何有效凭据时立即停止整个操作时,使用
-F。
本实验到此结束。你已成功设置 FTP 服务器,配置了多个用户帐户,并使用 Hydra 破解了帐户,探索了 -f 和 -F 选项以控制 Hydra 的攻击行为。
总结
在本实验中,你学习了如何使用 -f 和 -F 选项控制 Hydra 的攻击行为。你首先使用 vsftpd 设置了一个本地 FTP 服务器,并使用多个用户帐户 (testuser1 和 testuser2) 配置它,以模拟真实场景。你还在为 Hydra 准备了 users.txt 和 passwords.txt 文件。
然后,你使用 -f 选项指示 Hydra 在找到单个目标的第一个有效用户名/密码对后停止,演示了如何有效地找到单个易受攻击的帐户。接下来,你使用包含多主机列表 (hosts.txt) 的 -F 选项,学习了 Hydra 如何在找到任何列出主机上的单个有效凭据后停止整个多目标攻击。
最后,你比较了 -f 和 -F 的不同行为,理解了它们各自的使用场景:-f 用于在单个目标上首次成功后停止,-F 用于在多个目标上首次成功后停止。这些知识对于优化暴力破解攻击和有效管理资源至关重要。


