使用 Hydra 进行额外的密码检查

HydraHydraBeginner
立即练习

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

简介

在本次实验中,我们将探索在流行的密码破解工具 Hydra 中使用额外的密码检查功能。本实验重点演示如何在 LabEx 虚拟机上设置 Telnet 服务,然后使用 Hydra 的 -e nsr 选项进行密码破解尝试,利用空密码、用户名和反转后的用户名作为潜在密码。

本实验包括安装和配置 Telnet 服务,为了演示目的修改 /etc/inetd.conf 文件以禁用身份验证,然后使用 -e nsr 标志运行 Hydra。最后,我们将查看输出结果,观察成功的检查情况,并将结果与 -e ns 选项进行比较,突出在密码破解尝试中加入额外密码检查的有效性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/installation("Installation and Setup") hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/single_password("Single Password Attack") hydra/HydraGroup -.-> hydra/verbose_mode("Verbose Mode Usage") hydra/HydraGroup -.-> hydra/success_detection("Login Success Detection") hydra/HydraGroup -.-> hydra/service_options("Service-Specific Options") subgraph Lab Skills hydra/installation -.-> lab-550776{{"使用 Hydra 进行额外的密码检查"}} hydra/single_username -.-> lab-550776{{"使用 Hydra 进行额外的密码检查"}} hydra/single_password -.-> lab-550776{{"使用 Hydra 进行额外的密码检查"}} hydra/verbose_mode -.-> lab-550776{{"使用 Hydra 进行额外的密码检查"}} hydra/success_detection -.-> lab-550776{{"使用 Hydra 进行额外的密码检查"}} hydra/service_options -.-> lab-550776{{"使用 Hydra 进行额外的密码检查"}} end

设置 Telnet 服务

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

首先,我们需要安装 Telnet 服务器。由于 LabEx 虚拟机使用 Docker 容器,我们不能直接使用 systemctl 来管理服务。相反,我们将使用一种变通方法在容器内启动 Telnet 服务。

  1. 安装 Telnet 服务器:

    ~/project 目录下打开终端,并执行以下命令:

    sudo apt update
    sudo apt install -y telnetd

    此命令会更新软件包列表并安装 telnetd 软件包,该软件包提供 Telnet 服务器功能。你应该会看到指示安装过程的输出。

    ...
    Setting up openbsd-inetd (0.20180617-1) ...
    ...
    Processing triggers for systemd (247.3-7ubuntu3.9) ...
    Processing triggers for man-db (2.9.1-1) ...
  2. 配置 Telnet 无需身份验证运行(仅用于演示目的——切勿在生产环境中这样做):

    编辑 /etc/inetd.conf 文件以禁用身份验证。使用 nano 编辑该文件:

    sudo nano /etc/inetd.conf

    找到以 telnet 开头的行,并在该行开头添加 # 来注释掉它。然后,在其下方添加一行以禁用身份验证。

    #telnet  stream  tcp nowait telnetd /usr/sbin/tcpd  /usr/sbin/telnetd
    telnet  stream  tcp nowait telnetd /usr/sbin/in.telnetd -i

    Ctrl+S 保存更改,按 Ctrl+X 退出 nano

  3. 重启 inetd 服务:

    由于我们不能使用 systemctl,我们将使用 /etc/init.d 脚本重启管理 Telnet 的 inetd 服务。

    sudo /etc/init.d/openbsd-inetd restart

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

     * Restarting internet superserver inetd

使用 -e nsr 检查运行 Hydra

在这一步中,我们将使用 Hydra 对在上一步中设置的 Telnet 服务进行暴力破解攻击。我们将使用 -e nsr 选项,该选项会告诉 Hydra 尝试空密码、将用户名作为密码以及将反转后的用户名作为密码。这是一种快速识别弱密码或默认凭据的常用技术。

  1. 使用 -e nsr 选项运行 Hydra:

    ~/project 目录下打开终端,并执行以下命令:

    hydra -l labex -P /usr/share/wordlists/metasploit/unix_passwords.txt -vV -e nsr telnet://localhost

    让我们来分解一下这个命令:

    • hydra:用于运行 Hydra 工具的命令。
    • -l labex:指定要尝试的用户名。我们使用 labex,它是 LabEx 虚拟机上的默认用户。
    • -P /usr/share/wordlists/metasploit/unix_passwords.txt:指定一个密码列表文件。该文件包含了一系列常见密码。
    • -vV:启用详细模式,显示每次登录尝试的信息。
    • -e nsr:这是此步骤的关键选项。它告诉 Hydra 尝试:
      • n:空密码(空字符串)。
      • s:将用户名作为密码。
      • r:将反转后的用户名作为密码。
    • telnet://localhost:指定目标服务和地址。telnet 表示 Telnet 协议,localhost 指的是本地机器。

    现在,Hydra 将尝试使用指定的用户名、密码列表,以及空密码、用户名和反转后的用户名登录 Telnet 服务。输出将显示每次登录尝试以及是否成功。

    示例输出(可能会因密码列表而异):

    Hydra v9.1 (c) 2020 by van Hauser/THC - use allowed only for legal purposes.
    
    Hydra is starting...
    
    [DATA] 1 task, 1 server, 1337 service(s)
    [DATA] attacking service telnet on port 23
    [DATA] attacking target localhost
    [ATTEMPT] target localhost - login: 'labex' - pass: ''
    [23][telnet] host: localhost   login: labex   password:
    [ATTEMPT] target localhost - login: 'labex' - pass: 'labex'
    [23][telnet] host: localhost   login: labex   password: labex
    [ATTEMPT] target localhost - login: 'labex' - pass: 'xebal'
    [23][telnet] host: localhost   login: labex   password: xebal
    ...

    由于我们将 Telnet 配置为允许无身份验证登录,Hydra 很可能会发现使用空密码登录成功。

查看成功检查的输出

在这一步中,我们将分析上一步运行 Hydra 命令的输出,以识别任何成功的登录尝试。

  1. 检查 Hydra 输出:

    滚动查看上一步的终端输出。查找指示登录成功的行。这些行通常会包含 [23][telnet] host: localhost login: labex password: 字样,后面跟着成功登录的密码。

    由于我们为 Telnet 禁用了身份验证,你应该会看到类似这样的一行:

    [23][telnet] host: localhost   login: labex   password:

    这表明 Hydra 能够以用户 labex 的身份,使用空密码(即没有密码)登录到 localhost 上的 Telnet 服务。

  2. 理解输出:

    Hydra 的输出提供了有关目标服务安全性的重要信息。在这种情况下,使用空密码成功登录凸显了一个重大漏洞。攻击者可能无需提供任何凭据就能访问系统。

    如果你看到使用密码列表中的其他密码成功登录的情况,这表明用户使用的是容易被猜到的弱密码。

    Hydra 命令中的 -vV 选项提供详细输出,显示每次登录尝试。这有助于你了解攻击的进展情况,并识别任何模式或问题。

-e ns 检查进行比较

在这一步中,我们将再次运行 Hydra,但这次使用 -e ns 选项。该选项会告诉 Hydra 尝试空密码以及将用户名作为密码。然后,我们将把结果与之前使用 -e nsr 选项运行的结果进行比较,以了解其中的差异。

  1. 使用 -e ns 选项运行 Hydra:

    ~/project 目录下打开终端,并执行以下命令:

    hydra -l labex -P /usr/share/wordlists/metasploit/unix_passwords.txt -vV -e ns telnet://localhost

    和之前一样,让我们来分解一下这个命令:

    • hydra:用于运行 Hydra 工具的命令。
    • -l labex:指定要尝试的用户名。我们使用 labex,它是 LabEx 虚拟机上的默认用户。
    • -P /usr/share/wordlists/metasploit/unix_passwords.txt:指定一个密码列表文件。该文件包含了一系列常见密码。
    • -vV:启用详细模式,显示每次登录尝试的信息。
    • -e ns:此选项告诉 Hydra 尝试:
      • n:空密码(空字符串)。
      • s:将用户名作为密码。
    • telnet://localhost:指定目标服务和地址。telnet 表示 Telnet 协议,localhost 指的是本地机器。

    现在,Hydra 将尝试使用指定的用户名、密码列表,以及空密码和用户名登录 Telnet 服务。输出将显示每次登录尝试以及是否成功。

    示例输出(可能会因密码列表而异):

    Hydra v9.1 (c) 2020 by van Hauser/THC - use allowed only for legal purposes.
    
    Hydra is starting...
    
    [DATA] 1 task, 1 server, 1337 service(s)
    [DATA] attacking service telnet on port 23
    [DATA] attacking target localhost
    [ATTEMPT] target localhost - login: 'labex' - pass: ''
    [23][telnet] host: localhost   login: labex   password:
    [ATTEMPT] target localhost - login: 'labex' - pass: 'labex'
    [23][telnet] host: localhost   login: labex   password: labex
    ...
  2. 比较结果:

    将此命令的输出与上一步(使用 -e nsr)的输出进行比较。你应该会观察到以下情况:

    • 由于我们配置了 Telnet 允许空密码登录,两个命令都可能会发现使用空密码登录成功。
    • 两个命令都会尝试将用户名作为密码。
    • -e nsr 命令还会尝试将 反转后的 用户名作为密码,而 -e ns 则不会。

    这种比较展示了 Hydra 中不同选项如何影响攻击的范围和效果。在这种情况下,-e nsr 增加了一项额外的检查(反转后的用户名),这在某些场景中可能会很有用。

总结

在本次实验中,我们在 LabEx 虚拟机上搭建了 Telnet 服务,用于演示和测试。这包括使用 apt 安装 telnetd 软件包,并配置 /etc/inetd.conf 文件以禁用身份验证。这对于在可控环境中展示 Hydra 的密码破解能力至关重要。

由于 LabEx 虚拟机使用 Docker 容器,我们绕过了标准的 systemctl 命令,而是修改了 inetd.conf 文件,并使用 /etc/init.d 脚本重启 inetd 服务。这种配置虽然在生产环境中不安全,但能让我们在后续步骤中继续演示 Hydra 的密码破解能力。