使用 Hydra 生成暴力破解密码

HydraHydraBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 Hydra 生成用于暴力破解攻击的密码,并运用各种密码生成技术。你将重点学习使用 Hydra 的 -x 选项,根据不同的标准(例如长度、字符集和常见的密码模式)创建密码。

本实验将指导你完成多个密码生成场景,包括基本字符集、混合字符组合、数字模式以及现实世界中的密码结构。你将以本地主机上的虚拟 FTP 服务器为目标,练习这些技术,并学习如何有效地分析暴力破解攻击的结果。

使用 -x 选项生成密码

本步骤将教你如何使用 Hydra 的 -x 选项基于指定格式生成密码。当你知道潜在密码结构的一些信息(例如已知长度范围或字符集)时,此功能非常有用。

Hydra 的 -x 选项允许你定义生成密码的最小长度和最大长度,以及使用的字符集。语法为 -x min:max:charset

让我们从一个简单的例子开始。你将生成长度在 6 到 8 个字符之间的密码,只使用小写字母。

首先,确保你位于 ~/project 目录。这是你启动实验时的默认目录。

cd ~/project

现在,你将使用 Hydra 生成密码。为了演示,你将以本地主机的 SSH 服务为目标。这将允许你查看密码生成过程,而无需实际执行成功的攻击(因为我们使用的是不存在的用户)。

在终端执行以下命令:

hydra -l testuser -vV -x 3:5:a-z localhost ssh

让我们分解这个命令:

  • hydra: 执行 Hydra 工具的命令。
  • -l testuser: 指定要使用的用户名。这里使用 "testuser" 作为占位符(此用户可能不存在)。
  • -vV: 启用详细输出,显示每次尝试。
  • -x 3:5:a-z: 这是关键部分。它告诉 Hydra 生成密码,其:
    • 3: 最小长度为 3 个字符。
    • 5: 最大长度为 5 个字符。
    • a-z: 只使用小写字母 (a-z)。其他选项包括 A-Z (大写)、0-9 (数字),你还可以将它们组合起来,例如 a-zA-Z0-9 用于小写、大写字母和数字。
  • localhost: 目标主机。
  • ssh: 要攻击的 SSH 服务。

你将看到 Hydra 正在尝试使用生成的密码进行连接,例如 "aaa"、"aaaa"、"aaaaa"、"aab" 等。使用 -x 选项时,Hydra 会自动根据指定条件生成密码。

注意: 使用小写字母生成 3-5 个字符的密码的组合数量是可管理的:26³ + 26⁴ + 26⁵ ≈ 17,576 + 456,976 + 11,881,376 ≈ 1240 万个组合,这在 Hydra 的限制范围内。

重要: 使用 Ctrl+C 停止攻击,因为它可能需要很长时间才能完成。

输出将显示 Hydra 尝试连接到 SSH 服务时生成的密码。

Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaaaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aab" - 1 of 1 [child 0] (0/0)
...

重要:密码组合限制

使用 Hydra 的 -x 选项时,至关重要的是要考虑将生成的密码组合总数。Hydra 内置的限制是 40 亿个密码,以防止不切实际的暴力破解尝试。

以下是一些组合计数示例:

  • 3-5 个字符,仅小写字母 (a-z):约 1240 万个组合 ✓
  • 4-6 个字符,仅小写字母 (a-z):约 3.21 亿个组合 ✓
  • 6-8 个字符,仅小写字母 (a-z):约 2170 亿个组合 ✗(超过限制)
  • 4-6 个字符,字母数字 (a-zA-Z0-9):约 570 亿个组合 ✗(超过限制)

在运行之前,请始终计算组合数:charset_size^min_length + ... + charset_size^max_length

使用生成密码攻击 FTP

本步骤将使用 Hydra 的密码生成功能攻击虚拟 FTP 服务器。你将使用 -x 选项“即时”生成的密码列表。

首先,你需要设置一个简单的 FTP 服务器进行测试。你将使用 python3-pyftpdlib,这是一个 Python 的轻量级 FTP 服务器库。

如果尚未安装 python3-pyftpdlib,请安装:

sudo apt update
sudo apt install -y python3-pyftpdlib

在后台启动 FTP 服务器,端口为 2121,服务于 ~/project 目录下的文件。-w 选项允许写入访问。

nohup python3 -m pyftpdlib -p 2121 -w -u testuser -P secret ~/project > /dev/null 2>&1 &

nohup ... & 部分在后台运行命令,并防止在关闭终端时停止。> /dev/null 2>&1 将标准输出和标准错误重定向到 /dev/null,保持你的终端干净。-u testuser -P secret 选项设置了一个具有密码 "secret" 的用户,该用户可以访问服务器。

现在,你将使用 Hydra 攻击此 FTP 服务器。你将使用 -x 选项生成密码并尝试以用户 "testuser" 登录。

在终端执行以下命令:

hydra -l testuser -vV -x 4:6:a-z 127.0.0.1 ftp -s 2121

让我们分解这个命令:

  • hydra: Hydra 命令行工具。
  • -l testuser: 指定要使用的用户名: "testuser"。
  • -vV: 启用详细输出,显示每次登录尝试。
  • -x 4:6:a-z: 这告诉 Hydra 生成密码,其:
    • 4: 最小长度为 4 个字符。
    • 6: 最大长度为 6 个字符。
    • a-z: 只使用小写字母 (a-z)。
  • 127.0.0.1: 目标主机 (本地主机)。你使用 127.0.0.1 而不是 localhost,以避免容器内的潜在 DNS 解析问题。
  • ftp: 要攻击的服务 (FTP)。
  • -s 2121: 指定端口号。你正在攻击运行在端口 2121 上的 FTP 服务器。

你应该看到 Hydra 正在尝试使用生成的密码进行登录。由于 FTP 服务器配置了特定凭据(用户名:testuser,密码:secret),Hydra 在其暴力破解尝试中生成 "secret" 时将找到正确的密码。

重要: 使用 Ctrl+C 停止攻击,因为它可能需要很长时间才能完成。

输出将显示登录尝试,最终显示成功登录消息。

Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaaa
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaab
...
[2121][ftp] host: 127.0.0.1   login: testuser   password: secret

现在,让我们尝试一个稍微复杂一点的例子,结合小写字母和数字:

hydra -l testuser -vV -x 3:5:a-z0-9 127.0.0.1 ftp -s 2121

这将生成诸如 "aaa"、"aab"、"aac" 等密码,首先系统地遍历所有 3 个字符的组合,然后是 4 个字符的组合,最后是 5 个字符的组合。观察输出以查看生成的密码和成功登录。

Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaa
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aab
...
[2121][ftp] host: 127.0.0.1   login: testuser   password: secret

本步骤演示了如何使用 Hydra 的 -x 选项生成密码并攻击 FTP 服务器。请记住负责任和道德地使用这些技术。

大小写混合密码生成

本步骤将教你如何生成包含大小写字母的密码。这是许多用户使用的常见密码模式,使其成为有效的暴力破解策略。

许多用户创建大小写混合的密码,以满足密码复杂性要求。理解这种模式可以显著提高你的暴力破解成功率。

确保你位于 ~/project 目录,并且你的 FTP 服务器仍在运行:

cd ~/project

让我们使用大小写混合字母生成密码。执行以下命令:

hydra -l testuser -vV -x 3:4:a-zA-Z 127.0.0.1 ftp -s 2121

此命令使用以下方式生成密码:

  • a-z: 小写字母 (a-z)
  • A-Z: 大写字母 (A-Z)

你将看到诸如 "aaa"、"Aaa"、"aAa"、"AAa"、"aaA"、"AaA"、"aAA"、"AAA"、"aab"、"Aab" 等密码。注意 Hydra 如何系统地组合大小写字母。

让我们尝试 3-4 个字符的范围,以更清晰地看到模式:

hydra -l testuser -vV -x 3:4:a-zA-Z 127.0.0.1 ftp -s 2121

这将生成包含大小写的 3-4 个字符密码。你可以观察组合是如何进行的:

  • 3 个字符: "aaa"、"Aaa"、"aAa"、"AAa"、"aaA"、"AaA"、"aAA"、"AAA"、"aab"、"Aab" 等。
  • 4 个字符: "aaaa"、"Aaaa"、"aAaa"、"AAaa"、"aaaA"、"AaaA"、"aAaA"、"AAaA" 等。

理解模式:

大小写混合密码生成遵循一种系统方法,Hydra 会尝试所有可能的字母大小写组合。这特别有效,因为:

  1. 许多密码策略要求大小写混合
  2. 用户经常将第一个字母或随机字母大写
  3. 常见模式包括将单词的第一个字母大写

本步骤演示了如何使用大小写混合字母生成进行暴力破解攻击,这对于使用大小写字母的密码非常有效。

字符数字密码生成

本步骤将教你如何生成包含字母和数字的密码。字符数字密码非常常见,因为它在安全性与易记性之间取得了平衡。

字符数字密码是最常见的密码类型之一,因为它们:

  • 满足大多数密码复杂性要求
  • 比纯随机字符串更容易记住
  • 经常在企业环境中使用

让我们使用 Hydra 生成字符数字密码:

hydra -l testuser -vV -x 3:4:a-zA-Z0-9 127.0.0.1 ftp -s 2121

这将生成包含以下内容的密码:

  • a-z: 小写字母 (a-z)
  • A-Z: 大写字母 (A-Z)
  • 0-9: 数字 (0-9)

生成的密码示例: "abc"、"A2b"、"123"、"aB1"、"Te1" 等。

让我们尝试一种更专注的方法,只使用小写字母和数字:

hydra -l testuser -vV -x 3:4:a-z0-9 127.0.0.1 ftp -s 2121

这将生成类似于 "aaa"、"aa1"、"a12"、"123"、"test" 等的密码。

常见的字符数字模式:

用户在创建字符数字密码时经常遵循可预测的模式:

  1. 单词 + 数字 (例如,"pass123")
  2. 数字 + 单词 (例如,"123pass")
  3. 交替字母和数字 (例如,"a1b2")

让我们模拟用户可能使用短字符数字组合的模式:

hydra -l testuser -vV -x 4:5:a-z0-9 127.0.0.1 ftp -s 2121

本步骤演示了如何生成字符数字密码,这是现实世界场景中最常见的密码类型之一。

纯数字密码生成

本步骤将教你如何生成纯数字密码。这些密码常用于 PIN 码、简单密码以及仅允许数字的系统。

数字密码经常用于:

  • 设备和账户的 PIN 码
  • 基本系统的简单密码
  • 临时密码
  • 仅允许数字的旧系统

让我们生成纯数字密码:

hydra -l testuser -vV -x 3:6:0-9 127.0.0.1 ftp -s 2121

这将生成纯数字密码,例如 "123"、"1234"、"0000"、"9999"、"5678" 等。

对于类似 PIN 码的密码(通常为 4-6 位数字),尝试:

hydra -l testuser -vV -x 4:4:0-9 127.0.0.1 ftp -s 2121

这将生成精确的 4 位数字组合,可能代表:

  • 年份 (1990、2000、2023 等)
  • 常用的 PIN 码 (1234、0000、1111 等)
  • 出生年份
  • 重要日期

让我们尝试 6 位数字模式,这在较长的 PIN 码中很常见:

hydra -l testuser -vV -x 6:6:0-9 127.0.0.1 ftp -s 2121

常见的数字模式:

用户经常选择可预测的数字密码:

  1. 顺序数字:123456、654321
  2. 重复数字:111111、000000
  3. 日期:出生年份、当前年份
  4. 简单模式:121212、123123

实际应用:

数字密码生成在针对以下目标时尤其有用:

  • 移动设备 PIN 码
  • ATM PIN 码
  • 简单系统密码
  • 临时访问码

本步骤演示了如何生成仅包含数字的密码,这在许多系统中都经常使用。

自定义字符集,包含符号

本步骤将教你如何创建包含特定符号的自定义字符集。当你知道或怀疑目标密码中使用了某些特殊字符时,此方法非常有用。

许多密码策略要求包含特殊字符,而用户通常会选择易于输入的常见符号。了解应该包含哪些符号可以提高你的暴力破解攻击效率。

让我们生成包含自定义字符集和特定符号的密码:

hydra -l testuser -vV -x '3:4:a-z0-9!@#' 127.0.0.1 ftp -s 2121

这将生成使用以下内容的密码:

  • a-z: 小写字母 (a-z)
  • 0-9: 数字 (0-9)
  • !@#: 特定符号

示例: "abc!"、"a1@"、"te#"、"12!" 等。

让我们尝试另一组常见的符号:

hydra -l testuser -vV -x '3:4:a-z$%&' 127.0.0.1 ftp -s 2121

这使用了小写字母和符号 $、%、&。

对于可能包含更复杂符号的密码:

hydra -l testuser -vV -x '3:4:a-zA-Z0-9!@#$%^&*' 127.0.0.1 ftp -s 2121

这将创建一个包含以下内容的完整字符集:

  • 小写和大写字母
  • 数字
  • 常用符号:!@#$%^&*

最常见的密码符号:

根据密码分析,这些符号使用频率最高:

  1. ! - 感叹号
  2. @ - @ 符号
  3. # - 井号/磅符
  4. $ - 美元符号
  5. % - 百分号
  6. ^ - 插入符号
  7. & - 与符号
  8. * - 星号

符号选择的策略:

在创建自定义字符集时,请考虑:

  • 键盘易用性(数字行上的符号很常见)
  • 密码策略要求
  • 文化偏好(某些符号在某些地区更常见)
  • 系统限制(某些系统不允许某些符号)

目标符号集:

对于特定场景,你可能使用目标符号集:

## 常用标点符号
hydra -l testuser -vV -x '3:4:a-z0-9.,;:' 127.0.0.1 ftp -s 2121

## 括号符号
hydra -l testuser -vV -x '3:4:a-z0-9()[]{}' 127.0.0.1 ftp -s 2121

## 数学符号
hydra -l testuser -vV -x '3:4:a-z0-9+-=/' 127.0.0.1 ftp -s 2121

本步骤演示了如何创建包含特定符号的自定义字符集,使你能够根据已知或怀疑的密码模式定制你的暴力破解攻击。

总结

在本实验中,你学习了如何使用 Hydra 通过全面的分步方法生成用于暴力破解攻击的密码。你深入探索了 Hydra 的 -x 选项,涵盖了多个专门的场景,每个场景都专注于特定的密码生成技术。

你练习了不同的密码生成策略,包括:

  • 基本密码生成: 理解 -x 选项的语法和基本概念
  • FTP 攻击场景: 将密码生成应用于真实的服务
  • 大小写混合字母: 结合大小写字母,用于常见的密码模式
  • 字母数字密码: 使用字母和数字,这是现实世界中最常见的密码类型
  • 纯数字密码: 针对 PIN 码和简单的数字密码,具有高破解效率
  • 自定义字符集,包含符号: 基于常见的用法模式,创建目标符号组合