调试 Hydra 攻击

HydraHydraBeginner
立即练习

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

简介

在本次实验中,你将学习如何通过搭建 Telnet 服务器并分析 Hydra 的调试输出来调试 Hydra 攻击。本实验重点在于通过详细的调试信息来了解 Hydra 在攻击过程中的行为。

首先,你将使用 xinetd 在 LabEx 虚拟机上搭建一个 Telnet 服务器,以管理 Telnet 服务。这包括安装 telnetdxinetd,配置 xinetd 来管理 Telnet 连接,以及重启 xinetd 服务。然后,你将使用 -d 标志以调试模式运行 Hydra,以生成详细的输出。最后,你将分析这些调试输出,以了解攻击过程并识别潜在问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/installation("Installation and Setup") hydra/HydraGroup -.-> hydra/verbose_mode("Verbose Mode Usage") hydra/HydraGroup -.-> hydra/troubleshooting("Basic Troubleshooting") subgraph Lab Skills hydra/installation -.-> lab-550766{{"调试 Hydra 攻击"}} hydra/verbose_mode -.-> lab-550766{{"调试 Hydra 攻击"}} hydra/troubleshooting -.-> lab-550766{{"调试 Hydra 攻击"}} end

搭建 Telnet 服务器

在这一步中,我们将在 LabEx 虚拟机上搭建一个 Telnet 服务器。Telnet 是一种网络协议,用于通过虚拟终端连接提供双向交互式的面向文本的通信功能。虽然由于 Telnet 缺乏加密,通常被认为不安全,但在像我们的 LabEx 虚拟机这样的受控环境中,它可用于测试和演示目的。

由于 LabEx 虚拟机使用 Docker 容器,我们不能直接使用 systemctl 来管理服务。相反,我们将使用 xinetd 来管理 Telnet 服务。xinetd(扩展 Internet 守护进程)是一个超级服务器守护进程,它监听传入的网络连接并启动相应的服务。

首先,让我们安装 telnetdxinetd 软件包。在 LabEx 虚拟机中打开终端并执行以下命令:

sudo apt update
sudo apt install telnetd xinetd -y

此命令更新软件包列表并安装 telnetd(Telnet 服务器守护进程)和 xinetd 软件包。-y 标志会在安装过程中自动对任何提示回答“yes”。

接下来,我们需要配置 xinetd 来管理 Telnet 服务。在 /etc/xinetd.d/ 目录中为 Telnet 创建一个配置文件。使用 nano 来创建和编辑该文件:

sudo nano /etc/xinetd.d/telnet

将以下配置粘贴到 nano 编辑器中:

service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no
}

此配置告诉 xinetd 监听 Telnet 连接,以 root 用户身份运行 /usr/sbin/in.telnetd 服务器,并记录连接失败信息。disable = no 确保该服务已启用。

Ctrl+X,然后按 Y,再按 Enter 保存文件并退出 nano

现在,重启 xinetd 服务以应用更改。由于我们不能使用 systemctl,我们将通过向 xinetd 进程发送 HUP 信号来解决这个问题。首先,查找 xinetd 的进程 ID:

ps -ef | grep xinetd

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

root       1234  1     0 10:00 ?        00:00:00 /usr/sbin/xinetd -stayalive -pidfile /run/xinetd.pid
labex      5678  5600  0 10:01 pts/0    00:00:00 grep --color=auto xinetd

记下 xinetd 的进程 ID(在这个例子中是 1234)。在以下命令中,将 1234 替换为你实际输出中的进程 ID:

sudo kill -HUP 1234

此命令向 xinetd 进程发送 HUP 信号,使其重新加载配置。

最后,让我们验证 Telnet 服务器是否正在运行。你可以使用 telnet 命令从同一台机器尝试连接到它。由于 telnet 客户端可能默认未安装,我们将使用 netcat 来测试连接。

nc localhost 23

如果 Telnet 服务器正在运行,你应该会看到一个空白屏幕或 Telnet 提示符。然后,你可以通过输入 Ctrl+] 再输入 quit 来关闭连接。如果你收到“Connection refused”,请仔细检查上述步骤。

使用 -d 选项以调试模式运行

在这一步中,我们将配置 xinetd 以调试模式运行 Telnet 服务器。以调试模式运行可以提供有关服务器运行的有价值信息,这有助于故障排除和了解其工作原理。

要启用调试模式,我们需要修改上一步中创建的 Telnet 的 xinetd 配置文件。使用 nano 打开文件 /etc/xinetd.d/telnet

sudo nano /etc/xinetd.d/telnet

修改 server 行,以包含用于调试模式的 -d 选项。该行现在应如下所示:

        server          = /usr/sbin/in.telnetd -d

-d 选项告诉 in.telnetd 以调试模式运行,提供更详细的输出。

Ctrl+X,然后按 Y,再按 Enter 保存文件并退出 nano

现在,重启 xinetd 服务以应用更改。和之前一样,我们将使用 kill -HUP 命令。首先,查找 xinetd 的进程 ID:

ps -ef | grep xinetd

记下 xinetd 的进程 ID(例如,1234)。在以下命令中,将 1234 替换为你实际输出中的进程 ID:

sudo kill -HUP 1234

此命令向 xinetd 进程发送 HUP 信号,使其重新加载配置,现在 Telnet 服务器将以调试模式运行。

要观察调试输出,我们需要将 xinetd 的标准输出重定向到一个文件。然而,xinetd 本身不会直接输出到文件。in.telnetd -d 的调试输出将被发送到系统日志。我们可以使用 tail -f 来监控这些日志。

打开一个新的终端窗口或标签页。在这个新终端中,运行以下命令来监控系统日志:

sudo tail -f /var/log/syslog

现在,切换回原来的终端,使用 netcat 尝试连接到 Telnet 服务器:

nc localhost 23

连接后(使用 Ctrl+] 然后输入 quit 断开连接),切换回运行 tail -f /var/log/syslog 的终端。你应该会看到与该连接相关的 in.telnetd 的调试输出。此输出将提供有关 Telnet 服务器活动的信息,例如连接的建立和终止。

分析调试输出

在这一步中,我们将分析 Telnet 服务器在调试模式下运行时生成的调试输出。理解这些输出有助于你诊断问题、了解 Telnet 协议,并可能识别出漏洞。

正如你在上一步中看到的,调试输出会写入系统日志(/var/log/syslog)。让我们来查看一些典型的调试输出及其含义。

首先,确保你仍在一个单独的终端窗口中监控系统日志:

sudo tail -f /var/log/syslog

然后,在原来的终端中使用 netcat 连接到 Telnet 服务器:

nc localhost 23

输入一些字符,然后通过输入 Ctrl+] 再输入 quit 断开连接。

现在,查看 syslog 终端中的输出。你应该会看到类似于以下的行(具体输出可能会有所不同):

Oct 26 14:30:00 labex in.telnetd[1234]: connect from ::1
Oct 26 14:30:00 labex in.telnetd[1234]: telnetd: sock_host_addr: ::1
Oct 26 14:30:05 labex in.telnetd[1234]: ttloop: client wrote 5 bytes
Oct 26 14:30:05 labex in.telnetd[1234]: recv: got IAC
Oct 26 14:30:05 labex in.telnetd[1234]: recv: IAC SB
Oct 26 14:30:05 labex in.telnetd[1234]: recv: got IAC SE
Oct 26 14:30:10 labex in.telnetd[1234]: ttloop: client wrote 6 bytes
Oct 26 14:30:10 labex in.telnetd[1234]: recv: got IAC
Oct 26 14:30:10 labex in.telnetd[1234]: recv: IAC SB
Oct 26 14:30:10 labex in.telnetd[1234]: recv: got IAC SE
Oct 26 14:30:15 labex in.telnetd[1234]: Exit on signal 15

让我们来分析其中一些行的含义:

  • connect from ::1:这表明从 IPv6 回环地址(::1)建立了一个连接,它相当于 IPv4 的 127.0.0.1
  • telnetd: sock_host_addr: ::1:这确认了连接的源地址。
  • ttloop: client wrote 5 bytes:这表明客户端(你的 netcat 会话)向服务器发送了 5 字节的数据。
  • recv: got IACIAC 代表“Interpret As Command”(解释为命令)。Telnet 使用特殊的控制代码,而 IAC 是这些代码的前缀。
  • recv: IAC SBrecv: got IAC SESB 代表“Subnegotiation Begin”(子协商开始),SE 代表“Subnegotiation End”(子协商结束)。这些行表明客户端和服务器正在协商选项。
  • Exit on signal 15:这表明 telnetd 进程在接收到信号 15 时退出,信号 15 是在不指定信号编号的情况下 kill 命令发送的默认信号。这发生在你关闭 netcat 连接时。

通过分析这些调试输出,你可以深入了解 Telnet 协议以及服务器如何处理连接和数据。这些信息对于安全分析、故障排除和理解网络通信非常有价值。

例如,如果你试图利用 Telnet 服务器中的漏洞,你可以使用这些调试输出来了解你的攻击是如何被处理的,并识别潜在的弱点。

总结

在本次实验中,我们首先在 LabEx 虚拟机上使用 xinetd 来管理 telnetd 服务,从而搭建了一个 Telnet 服务器。这包括安装必要的软件包(telnetdxinetd),并配置 xinetd 以监听 Telnet 连接并运行 Telnet 服务器守护进程。

我们创建了配置文件 /etc/xinetd.d/telnet,并在其中填充了相关设置,以启用 Telnet 服务、指定服务器可执行文件以及处理连接日志。最后,重启了 xinetd 服务以应用配置更改,为测试 Telnet 服务器做好准备。