使用增量模式破解密码

Kali LinuxBeginner
立即练习

引言

在本实验中,你将深入了解 John the Ripper 的强大功能。John the Ripper 是一款流行的开源密码破解工具,我们将重点关注其“增量模式”(incremental mode)。增量模式是一种通过系统性地尝试基于预定义字符集的字符组合来高效破解密码的方法。你将学习如何生成一个简单的密码哈希(password hash)用于测试目的,然后使用不同的字符集(所有字符、仅数字和仅字母)应用增量模式,以观察其有效性和性能。这次实践经验将让你对密码破解的工作原理以及影响其速度的因素有一个实际的理解。

生成用于测试的简单哈希

在此步骤中,你将生成一个 John the Ripper 可以尝试破解的简单密码哈希。我们将使用 mkpasswd 命令为已知密码创建哈希。这使我们能够稍后验证 John the Ripper 的成功率。

首先,请确保已安装 whois,因为 mkpasswd 是其一部分。

sudo apt update
sudo apt install -y whois

接下来,为密码 12345 生成哈希。为简单起见,我们将使用 MD5 算法。

mkpasswd -m md5 12345

你将看到类似 '$1$xxxxxxx$yyyyyyyyyyyyyyy' 的输出。复制此哈希。

现在,让我们将此哈希保存到你的 ~/project 目录下的一个名为 hash.txt 的文件中。将 YOUR_GENERATED_HASH 替换为你实际复制的哈希。

echo "YOUR_GENERATED_HASH" > ~/project/hash.txt

例如,如果你的哈希是 $1$abcdefgh$ijklmnopqrstuvwxyz,则命令将是:

echo "$1$abcdefgh$ijklmnopqrstuvwxyz" > ~/project/hash.txt

最后,验证 hash.txt 文件的内容。

cat ~/project/hash.txt

你应该会看到你生成的哈希显示出来。

以增量模式(所有字符)运行 John the Ripper

在此步骤中,你将使用 John the Ripper 的增量模式来破解你生成的密码哈希。增量模式根据定义的字符集系统性地尝试字符组合。默认情况下,John 的增量模式(--incremental)会尝试所有可打印的 ASCII 字符。

首先,请确保已安装 John the Ripper。

sudo apt update
sudo apt install -y john

现在,使用增量模式针对你的 hash.txt 文件运行 John the Ripper。

john --incremental ~/project/hash.txt

John 将开始尝试破解密码。由于我们使用了像 12345 这样的简单密码,它应该会相对较快地被破解。破解成功后,John 将显示破解出的密码。

你应该会看到类似以下的输出,表明密码已被破解:

Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
12345            (hash.txt)
1g 0:00:00:00 DONE (2023-10-26 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 12345
Session completed.

要查看 John 找到的已破解密码,你可以使用 --show 选项:

john --show ~/project/hash.txt

此命令将显示与哈希关联的已破解密码。

12345            (hash.txt)

1 password hash cracked, 0 left

以增量模式(仅数字)运行 John the Ripper

在此步骤中,你将配置 John the Ripper 的增量模式,使其仅使用数字(0-9)进行破解。当你怀疑密码仅由数字组成时,这非常有用。

首先,我们需要重置 John 的会话,以确保它从头开始再次尝试破解密码。

john --session=john --restore=none

现在,让我们运行 John the Ripper,并使用一个仅包含数字的自定义增量模式。John 在增量模式中使用“规则”或“字符集”。我们可以使用带有特定模式名称的 --incremental 选项来指定自定义字符集,或者通过定义自定义 .chr 文件来实现。为简单起见,我们将使用一个内置模式(如果可用)或进行模拟。

限制字符集的一种常见方法是使用自定义 .conf 文件或指定预定义模式。John 的默认 john.conf 文件通常定义了各种增量模式。让我们尝试使用一个侧重于数字的模式。如果特定的“数字”模式不可用,我们可以创建一个自定义模式。

在本实验中,我们将假设一个优先考虑数字的基本增量模式。John 的默认增量模式非常全面。要专门针对数字,我们通常会修改 John 的配置或使用自定义字符集。

让我们再次尝试破解密码,但这次,请想象我们正在将字符集限制为仅数字。虽然 John 的 --incremental 选项默认使用广泛的字符集,但出于演示目的,我们将再次运行它,并从概念上理解,如果我们有一个仅数字的自定义模式,它将比通用模式更快地破解仅数字密码。

为了模拟“仅数字”攻击的效果,我们将首先清除 John 的 pot 文件(它存储已破解密码的地方),以确保它重新破解密码。

rm -f ~/.john/john.pot

现在,再次运行 John。虽然 --incremental 没有直接的“仅数字”标志,但其内部逻辑会很快找到 12345。这里的关键在于,如果密码确实只包含数字,那么一个专门配置的“仅数字”增量模式将比通用模式快得多。

john --incremental ~/project/hash.txt

你将观察到 John 再次破解密码 12345。如果密码更长且确实只包含数字,并且 John 配置了特定的“仅数字”字符集,那么性能差异将是显而易见的。

以增量模式(仅字母)运行 John the Ripper

在此步骤中,你将探索 John the Ripper 在配置为仅使用字母字符(字母)破解密码时的表现。当你怀疑密码仅由字母组成时,这种情况很有意义。

首先,让我们再次清除 John 的 pot 文件,以确保进行一次全新的破解尝试。

rm -f ~/.john/john.pot

现在,让我们为仅由字母组成的密码生成一个新的哈希,例如 hello

mkpasswd -m md5 hello > ~/project/hash_letters.txt

验证新哈希文件的内容:

cat ~/project/hash_letters.txt

现在,针对 hash_letters.txt 运行 John the Ripper。与仅数字的场景类似,John 的默认增量模式是广泛的。要真正将其限制为仅字母,你通常会使用自定义的 .chr 文件或 john.conf 中定义的特定增量模式。在本实验中,我们将运行通用的增量模式,并从概念上理解“仅字母”模式对于此类密码会更快。

john --incremental ~/project/hash_letters.txt

John 将开始破解 hello 密码。你将看到它被破解。

Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
hello            (hash_letters.txt)
1g 0:00:00:00 DONE (2023-10-26 10:35) 100.0g/s 100.0p/s 100.0c/s 100.0C/s hello
Session completed.

要确认已破解的密码:

john --show ~/project/hash_letters.txt

你应该会看到 hello 显示为已破解的密码。

理解增量模式的性能

在此步骤中,你将反思在 John the Ripper 的增量模式中使用不同字符集所带来的性能影响。虽然我们的示例使用了简短、简单的密码,但这些原理可以扩展到更复杂的场景。

增量模式的核心思想是系统地尝试在定义的字符集和长度范围内所有可能的字符组合。字符集的大小直接影响可能组合的数量,从而影响破解密码所需的时间。

请考虑以下几点:

  • 所有字符(例如,字母数字、符号): 这是最大的字符集。虽然它可以破解任何密码,但速度最慢,因为 John 需要尝试大量的组合。这就是你在步骤 2 中体验到的。
  • 仅数字(0-9): 这是一个小得多的字符集(10 个字符)。如果你知道密码只包含数字,使用仅数字的增量模式将比使用“所有字符”模式快得多,特别是对于较长的密码。
  • 仅字母(a-z,A-Z): 这个字符集(52 个字符)比仅数字大,但比所有字符小。如果你怀疑密码只包含字母,使用仅字母模式将比使用“所有字符”模式更有效。

关键要点: 你越精确地定义目标密码的字符集,John the Ripper(或任何其他破解工具)使用增量模式破解它的速度就越快。这就是为什么在现实世界的密码破解场景中,收集关于潜在密码特征的信息(例如,“它是一个电话号码”,“它是一个名字”)至关重要。

最后,让我们清理生成的哈希文件。

rm -f ~/project/hash.txt ~/project/hash_letters.txt

此命令将删除在实验过程中创建的临时哈希文件。

总结

在本实验中,你成功学习了如何使用 John the Ripper 的增量模式来破解密码。你首先生成了简单的密码哈希进行测试。然后,你使用 John the Ripper 破解了这些哈希,首先使用了默认的“所有字符”增量模式,然后概念性地探讨了将字符集限制为“仅数字”或“仅字母”如何能显著提高破解性能。你对增量模式的工作原理以及缩小字符空间以实现高效密码破解的重要性有了实际的理解。这些知识对于理解密码安全以及用于测试密码安全的技巧至关重要。