简介
在本实验中,我们将学习如何利用 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 后,出于安全原因,用户不能对自己的主目录执行写入操作:
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:针对单个目标找到第一组有效的用户名和密码后立即停止。当你只需要在某个特定服务上找到一个有效账户,不希望成功登录后继续尝试其他组合时,这个选项非常有用。
请确保当前位于 ~/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 - Please use caution!
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 会继续为 testuser1 尝试 passwords.txt 中的其他组合,然后继续处理 testuser2,并为该用户尝试所有密码。
当你测试某个特定服务,只需确认至少有一个账户存在安全风险时,这个选项尤其有用,可以节省大量时间和资源。
使用多主机列表测试 -F
在本步骤中,我们将探索 Hydra 的 -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 - Please use caution!
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 会在该主机上找到第一组有效凭据后停止。如果之后还要检查ftp2.example.com,就必须为它单独运行一条 Hydra 命令。如果将这三台服务器全部写入
hosts.txt文件并使用-F,Hydra 会开始检查ftp1.example.com。一旦在那里找到有效凭据,它就会立即停止整个操作,甚至不会尝试连接ftp2.example.com或ftp3.example.com。
总结如下:
- 当你专注于单个目标,并希望为其找到至少一组有效凭据时,使用
-f。 - 当你扫描多个目标,并希望在任意目标上找到有效凭据后立即停止整个操作时,使用
-F。
本实验到此结束。你已经成功搭建了 FTP 服务器,配置了多个用户账户,并使用 Hydra 对这些账户进行了破解测试,同时探索了用于控制 Hydra 攻击行为的 -f 和 -F 选项。
总结
在本实验中,你学习了如何使用 -f 和 -F 选项控制 Hydra 的攻击行为。首先,你使用 vsftpd 搭建了本地 FTP 服务器,并配置了多个用户账户(testuser1 和 testuser2)来模拟现实场景,同时准备了供 Hydra 使用的 users.txt 和 passwords.txt 文件。
随后,你使用 -f 选项,让 Hydra 在单个目标上找到第一组有效用户名和密码后停止,演示了如何高效地发现一个存在安全风险的账户。接着,你配合多主机列表(hosts.txt)探索了 -F 选项,了解 Hydra 如何在列出的任意主机上找到一组有效凭据后,立即停止整个多目标攻击。
最后,你比较了 -f 和 -F 的不同表现,理解了它们各自的适用场景:-f 用于在单个目标上首次成功后停止,-F 用于在多个目标中的任意目标首次成功后停止。掌握这些知识对于优化暴力破解测试和有效管理资源至关重要。


