使用单模式破解密码

Kali LinuxBeginner
立即练习

引言

在本实验中,你将探索 John the Ripper(一个强大的密码破解工具)的“单模式破解”(single crack mode)。当你拥有一个用户名列表,并希望使用从用户名本身派生出的信息(例如排列或常见变体)来尝试破解其密码时,单模式破解尤其有用。你将学习如何准备适合此模式的哈希文件,执行 John the Ripper,观察其破解过程,并理解单模式破解最有效的特定场景及其局限性。这次实践经验将为你提供密码安全和审计方面的实用技能。

准备包含用户名的哈希文件

在此步骤中,你将准备一个 John the Ripper 在单模式破解(single crack mode)中可以使用的哈希文件。单模式破解利用用户名本身的信息来生成潜在的密码。为了使其有效工作,你的哈希文件应包含用户名。

首先,确保你位于你的项目目录中。

cd ~/project

接下来,让我们创建一个名为 my_hashes.txt 的简单密码文件,其中包含几条记录。为了演示目的,我们将使用密码 "password" 的已知 MD5 哈希值 (5f4dcc3b5aa765d61d8327deb882cf99)。

echo "user1:5f4dcc3b5aa765d61d8327deb882cf99" > my_hashes.txt
echo "john:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "mary:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "testuser:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "admin:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt

你可以使用 cat 命令来验证文件内容:

cat my_hashes.txt

预期输出:

user1:5f4dcc3b5aa765d61d8327deb882cf99
john:5f4dcc3b5aa765d61d8327deb882cf99
mary:5f4dcc3b5aa765d61d8327deb882cf99
testuser:5f4dcc3b5aa765d61d8327deb882cf99
admin:5f4dcc3b5aa765d61d8327deb882cf99

此文件现在包含用户名及其对应的密码哈希值,已准备好供 John the Ripper 的单模式破解使用。

以单模式破解运行 John the Ripper

在此步骤中,你将使用单模式破解(single crack mode)针对你准备的哈希文件执行 John the Ripper。John 将尝试通过从用户名推导出潜在密码来破解密码。

要以单模式破解运行 John the Ripper,请使用 --single 选项,后跟你的哈希文件路径。

john --single my_hashes.txt

John the Ripper 将开始处理哈希。由于密码 "password" 是一个常用词,并且用户名很简单,John 可能会快速破解其中一些。输出将显示已破解的密码。

示例输出:

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
password         (john)
password         (mary)
password         (testuser)
password         (admin)
5g 0:00:00:00 DONE (2023-10-27 08:30) 100% ...
Session completed.

John 完成后,你可以查看已保存到 John 的 pot 文件中的已破解密码。

john --show my_hashes.txt

预期输出:

user1:password

john:password

mary:password

testuser:password

admin:password

5 password hashes cracked, 0 left

此命令显示了 John 从 my_hashes.txt 文件中成功破解的所有密码。

观察单模式破解行为

在此步骤中,你将观察 John the Ripper 的单模式破解(single crack mode)行为,以及它会生成哪种类型的密码候选。单模式破解之所以独特,是因为它不直接使用字典或暴力破解攻击。相反,它使用用户名(或 GECOS 字段,如果可用)作为生成密码猜测的基础。

让我们清除 John 的 pot 文件,以确保本次运行是全新的,便于观察。在实际场景中通常不会这样做,但这有助于演示。

john --session=clear --format=Raw-MD5 --pot=/home/labex/.john/john.pot

现在,再次以单模式运行 John,但这次,让我们更仔细地关注输出以及它如何处理每个条目。

john --single my_hashes.txt

当 John 运行时,你会注意到它会尝试用户名的各种变体。例如,对于 john,它可能会尝试 johnJohnJOHNjohn1john123johnnyj0hn 等。具体的变体取决于 John 的内部规则和 john.conf 配置文件。

关键在于,单模式破解对于破解用户名简单变体的密码非常高效。这是在采用字典攻击或暴力破解等更耗费资源的方法之前进行的一次快速检查。

你还可以检查 John 的配置文件,以了解它在单模式下使用的规则。虽然我们不会修改它,但了解其位置很有用。

ls -l /etc/john/john.conf

预期输出:

-rw-r--r-- 1 root root 12345 Oct 27 08:00 /etc/john/john.conf

(文件大小和日期可能会有所不同)

此文件包含单模式破解的规则集等内容。

理解单模式破解的局限性

在此步骤中,你将理解 John the Ripper 的单模式破解(single crack mode)的局限性。虽然它在某些场景下很强大,但它并非解决所有密码破解需求的通用方案。

单模式破解主要依赖于用户名(有时也包括 /etc/passwd 中的 GECOS 字段)的排列组合和变体。这意味着:

  1. 范围有限:它只会尝试直接从用户名派生出的密码。如果密码是 "apple",而用户名是 "user1",单模式破解很可能会失败,因为 "apple" 与 "user1" 没有直接关联。
  2. 不使用外部字典:与字典攻击模式不同,单模式破解不使用外部字典。这使得它速度很快,但也限制了它破解与用户名无关的常用词密码的能力。
  3. 不进行暴力破解:它不执行完整的暴力破解攻击,后者会尝试所有可能的字符组合。这意味着复杂的、随机生成的密码极不可能被此模式破解。
  4. 依赖于用户名:其有效性直接取决于用户名的质量和相关性。如果用户名是通用的(例如 useradmin),生成的密码候选可能效果不佳。

为了演示这一局限性,让我们添加一个与用户名无关的密码的哈希。我们将添加 randomuser:e10adc3949ba59abbe56e057f20f883e,其中 e10adc3949ba59abbe56e057f20f883e123456 的 MD5 哈希。

echo "randomuser:e10adc3949ba59abbe56e057f20f883e" >> my_hashes.txt
cat my_hashes.txt

现在,再次以单模式运行 John:

john --single my_hashes.txt

你将观察到 randomuser 的密码(123456)未被破解,因为 123456 并非 randomuser 的派生。

预期输出(注意 randomuser 未被破解):

Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
password         (john)
password         (mary)
password         (testuser)
password         (admin)
5g 0:00:00:00 DONE (2023-10-27 08:35) 100% ...
Session completed.

这清楚地说明了单模式破解仅在密码是用户名的简单变体时才有效。

对比单模式与其他模式

在最后这个步骤中,你将简要对比 John the Ripper 的单模式破解(single crack mode)与其他常用破解模式,例如字典模式(wordlist mode)和暴力破解模式(brute-force mode)。理解这些差异对于选择正确的工具至关重要。

  1. **单模式破解 (--single)**:

    • 方法:基于用户名(和 GECOS 字段)生成密码候选。
    • 使用场景:非常适合对用户名的简单变体密码进行快速检查。速度极快。
    • 局限性:范围有限;无法破解与用户名无关的密码。
  2. **字典模式 (--wordlist=FILE)**:

    • 方法:尝试使用提供的字典或单词列表文件中的密码。可以结合规则(--rules)进行排列组合。
    • 使用场景:对于破解字典中常见的单词、短语或组合密码,是最常用且有效的方法。
    • 局限性:效果仅限于字典的质量;无法破解不在列表或其排列组合中的密码。
  3. **增量(暴力破解)模式 (--incremental)**:

    • 方法:在定义的字符集和长度内系统地尝试所有可能的字符组合。
    • 使用场景:是破解其他方法未能破解的复杂密码的最后手段。只要给予足够的时间,就能保证找到密码。
    • 局限性:极其耗时,特别是对于较长的密码或较大的字符集。可能需要数天、数月甚至数年。

让我们通过字典模式来演示破解 randomuser 的密码(123456)。首先,创建一个包含 "123456" 的简单单词列表。

echo "123456" > my_wordlist.txt

现在,以字典模式运行 John:

john --wordlist=my_wordlist.txt my_hashes.txt

预期输出:

Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (randomuser)
1g 0:00:00:00 DONE (2023-10-27 08:40) 100% ...
Session completed.

如你所见,randomuser 的密码已通过单词列表成功破解。这突显了不同的破解模式适用于不同类型的密码。单模式破解是一个很好的第一步,但通常需要跟进字典模式或增量模式以进行更全面的破解。

最后,清理创建的文件:

rm my_hashes.txt my_wordlist.txt

总结

在这个实验中,你成功学会了如何使用 John the Ripper 的单模式破解。你准备了一个包含用户名的哈希文件,以单模式破解执行 John,并观察了它破解从用户名派生的密码的行为。你也了解了单模式破解的局限性,认识到它在特定密码模式下最有效,并非万能解决方案。最后,你将单模式破解与其他常用的 John the Ripper 模式(如字典模式和增量模式)进行了比较,强调了每种模式最适用的场景。这些实践经验增强了你对密码安全审计技术的理解。