尽早停止 Hydra 攻击

HydraBeginner
立即练习

简介

在本实验中,我们将学习如何利用 Hydra 的相关选项限制尝试次数,从而尽早停止攻击。首先,我们会使用 vsftpd 搭建 FTP 服务器,并配置多个用户账户:testuser1testuser2,为每个账户设置独立密码。通过这一配置,我们可以模拟 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)"

请确认输出内容与刚才添加的配置一致。

现在,创建多个用户账户。我们将创建两个用户:testuser1testuser2,并分别为其设置密码。这些账户将供 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.txtpasswords.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.comftp2.example.comftp3.example.com

  • 如果你使用 -f 针对 ftp1.example.com,Hydra 会在该主机上找到第一组有效凭据后停止。如果之后还要检查 ftp2.example.com,就必须为它单独运行一条 Hydra 命令。

  • 如果将这三台服务器全部写入 hosts.txt 文件并使用 -F,Hydra 会开始检查 ftp1.example.com。一旦在那里找到有效凭据,它就会立即停止整个操作,甚至不会尝试连接 ftp2.example.comftp3.example.com

总结如下:

  • 当你专注于单个目标,并希望为其找到至少一组有效凭据时,使用 -f
  • 当你扫描多个目标,并希望在任意目标上找到有效凭据后立即停止整个操作时,使用 -F

本实验到此结束。你已经成功搭建了 FTP 服务器,配置了多个用户账户,并使用 Hydra 对这些账户进行了破解测试,同时探索了用于控制 Hydra 攻击行为的 -f-F 选项。

总结

在本实验中,你学习了如何使用 -f-F 选项控制 Hydra 的攻击行为。首先,你使用 vsftpd 搭建了本地 FTP 服务器,并配置了多个用户账户(testuser1testuser2)来模拟现实场景,同时准备了供 Hydra 使用的 users.txtpasswords.txt 文件。

随后,你使用 -f 选项,让 Hydra 在单个目标上找到第一组有效用户名和密码后停止,演示了如何高效地发现一个存在安全风险的账户。接着,你配合多主机列表(hosts.txt)探索了 -F 选项,了解 Hydra 如何在列出的任意主机上找到一组有效凭据后,立即停止整个多目标攻击。

最后,你比较了 -f-F 的不同表现,理解了它们各自的适用场景:-f 用于在单个目标上首次成功后停止,-F 用于在多个目标中的任意目标首次成功后停止。掌握这些知识对于优化暴力破解测试和有效管理资源至关重要。