使用 Hydra 破解密码

LinuxBeginner
立即练习

介绍

在本实验中,你将学习密码漏洞相关的知识,并了解如何使用 Hydra 这一流行的安全工具来测试密码强度。你将在一个练习网站上模拟暴力破解(brute-force)攻击,以理解弱密码是如何被轻易攻破的。

这段实战经历将向你展示为什么强密码在网络安全中至关重要。你将获得配置 Hydra、分析攻击结果以及评估密码安全措施的实际技能。

探索目标网站

在这一步中,我们将检查要测试的网站,并引入暴力破解攻击的概念。在开始使用自动化工具之前,了解基础身份验证系统的工作原理以及我们的目标是非常重要的。

打开实验环境中的 Web 8080 标签页。这将显示一个浏览器界面,你会看到一个简单的登录页面,其中包含输入用户名和密码的字段。这与你每天在许多网站上看到的登录页面非常相似。

登录页面截图

让我们尝试一些基础的登录尝试,看看系统如何响应:

  1. 第一次尝试:

    • 用户名:test
    • 密码:password123
  2. 第二次尝试:

    • 用户名:admin
    • 密码:admin

每次尝试后,你都会收到一条「用户名或密码无效」的消息。这种通用的响应是刻意设计的——它不会告诉你究竟是用户名不存在,还是仅仅密码错误。这被称为「通过模糊实现安全」(security through obscurity),有助于防止攻击者收集有关有效账户的信息。

请注意,你可以不受任何限制地不断尝试不同的组合。在生产系统中,通常会在多次失败尝试后实施账户锁定或验证码(CAPTCHA)等安全措施,以防止自动化攻击。我们的实验环境中缺少这些保护措施,这使其非常适合演示暴力破解技术。

你刚才手动完成的操作——尝试不同的用户名和密码组合——本质上就是暴力破解攻击的手动版本。在真实的攻击中,黑客会使用自动化工具每秒尝试数千种组合。这个练习展示了为什么像「password123」或「admin」这样简单的密码极其脆弱,以及为什么系统需要适当的安全措施来防止此类攻击。

检查密码列表

既然我们已经了解了暴力破解攻击的基本概念,现在让我们检查一下攻击者可能使用的常见密码列表。在继续之前,重要的是要了解暴力破解的工作原理是系统地尝试所有可能的密码组合,直到找到正确的密码。使用预先编译好的密码列表可以大大加快这一过程。

切换回实验环境中的 Desktop Tab。这是我们执行所有命令和查看结果的地方。

双击桌面上的 Xfce Terminal 图标将其打开。终端是我们本实验中运行命令的主要工具。

桌面上的 Xfce 终端

在现实场景中,攻击者经常使用从以往数据泄露事件中获取的大量密码列表。这些列表包含数百万个在安全事件中被泄露的密码。在我们的实验中,我们将使用一个在互联网上发现的较小的常见弱密码列表来演示该概念。这个列表已经为你准备好了,位于 /home/labex/project/500-worst-passwords.txt

让我们使用 head 命令来检查文件的内容,该命令可以显示文件的前几行:

head -n 10 500-worst-passwords.txt

此命令将显示列表中的前 10 个密码。-n 10 选项告诉命令精确显示 10 行。

123456
password
12345678
1234
12345
dragon
qwerty
567sjej
mustang
letmein

不幸的是,这些密码仍然是许多人的常用选择。注意它们是多么简单且可预测——大多是数字序列或常用单词。这正是为什么攻击者在试图获取未经授权的访问时,通常会首先尝试这些密码。

通过使用这样的列表,攻击者可以极大地加快暴力破解攻击的速度。他们不再尝试每一个可能的字符组合(这可能需要数年时间),而是从最有可能的密码开始,从而显著增加快速成功的机会。在网络安全中,我们称之为「字典攻击」(dictionary attack)——这是暴力破解的一种更智能的版本,它使用已知的密码而不是随机猜测。

配置 Hydra

现在我们有了密码列表,让我们配置 Hydra,这是我们将用来自动化暴力破解攻击模拟的工具。Hydra 是一款功能强大的密码破解工具,它通过系统地尝试不同的组合来帮助安全专业人员测试密码强度。

首先,我们将创建一个包含我们想要测试的常用用户名的简单文本文件。这很重要,因为许多系统使用可预测的默认用户名,攻击者可能会首先尝试这些用户名。运行以下命令:

cd ~/project
echo -e "admin\nuser\nroot" > ~/project/usernames.txt
cat ~/project/usernames.txt

第一条命令(cd ~/project)确保我们在正确的工作目录中。第二条命令创建了一个名为 usernames.txt 的文件,其中包含三个常用用户名(admin、user 和 root),每个用户名占一行。第三条命令显示文件内容,以便我们验证它是否已正确创建。

现在,让我们确保 Hydra 已安装。在现实场景中,你通常需要自己安装它,但在本实验环境中:

注意:免费用户无法连接互联网,因此 Hydra 已经预装在实验环境中,你可以跳过此命令。升级为专业版用户可以练习自行安装 Hydra。

仅限专业版用户
sudo apt-get update
sudo apt-get install hydra -y

Hydra 的工作原理是获取潜在的用户名和密码列表,然后针对目标服务尝试每种组合进行身份验证。它支持许多协议,包括 HTTP、FTP、SSH 等。该工具对于渗透测试人员识别系统中的弱密码特别有用。

要验证 Hydra 是否正常工作,我们可以通过以下命令检查其版本和可用选项:

hydra -h

此命令显示 Hydra 的帮助菜单,展示所有可用的命令和选项。你会看到有关不同攻击模式、支持的协议以及如何自定义密码破解尝试的信息。在开始使用之前,这对于了解 Hydra 的功能非常有帮助。

使用 Hydra 进行密码破解

现在我们已经安装了 Hydra 并准备好了密码列表,让我们使用它在练习网站上模拟暴力破解攻击。在开始之前,重要的是要理解 Hydra 是一个自动化工具,它会针对登录页面系统地尝试不同的用户名和密码组合——这被称为暴力破解攻击。

运行以下 Hydra 命令:

hydra -L ~/project/usernames.txt -P ~/project/500-worst-passwords.txt localhost -s 8080 http-post-form "/:username=^USER^&password=^PASS^:Invalid username or password" -o ~/project/hydra_results.txt

让我们逐一分解这个命令,以了解每个部分的作用:

  • hydra:启动 Hydra 工具的命令。
  • -L ~/project/usernames.txt:指定包含要尝试的潜在用户名的文件。
  • -P ~/project/500-worst-passwords.txt:指向包含我们将针对每个用户名进行测试的常用密码的文件。
  • localhost -s 8080:我们要测试的目标 Web 服务器地址(localhost)和端口(8080)。
  • "/:username=^USER^&password=^PASS^:Invalid username or password":这告诉 Hydra:
    • 登录页面的 URL(/)
    • 登录表单字段的名称(username 和 password)
    • 登录失败时错误消息的内容
  • -o ~/project/hydra_results.txt:将所有成功的尝试保存到此输出文件中。

Hydra 将开始运行,当它尝试每个用户名和密码组合时,你会看到输出。这个过程可能需要几分钟,因为 Hydra 会系统地遍历我们提供的文件中的所有可能组合。

Hydra 命令执行输出

Hydra 完成后,我们可以检查结果看看是否有任何组合生效:

cat ~/project/hydra_results.txt

Hydra 结果输出

成功的登录将显示为类似「login: [username] password: [password] found」的行。这些代表了可以授予系统访问权限的凭据。

这个练习演示了几个重要的安全概念:

  • Hydra 在几分钟内测试了数百种密码组合,展示了自动化工具的工作速度有多快。
  • 成功的登录证明了弱密码或常用密码很容易被破解。
  • 在现实场景中,攻击者可以使用包含数百万个密码的字典,这使得强且唯一的密码变得至关重要。
  • 手动尝试(步骤 1)与自动化工具之间的差异突显了为什么密码策略非常重要。

请注意,该工具的高效率使得弱凭据变得极其脆弱。这就是为什么安全专业人员强调使用复杂密码并实施账户锁定策略的原因。

总结

在本实验中,你通过使用强大的密码破解工具 Hydra 的实战体验,学习了密码安全的基础知识。你探索了暴力破解攻击的工作原理,以及为什么它们可以攻破弱密码,同时也理解了强密码实践在网络安全中的关键作用。

这个练习展示了为什么网络安全专业人员强调使用复杂且唯一的密码。请记住,在你的学习旅程中继续探索安全工具和技术时,要合乎道德地应用这些技能。