使用 John the Ripper 破解 MD5 哈希

Kali LinuxBeginner
立即练习

引言

在本实验中,你将探索 John the Ripper 的功能,这是一个广泛使用的开源密码破解工具。你将专注于破解 MD5 哈希,MD5 哈希常用于存储密码的表示形式。理解如何破解哈希对于安全专业人员评估密码强度和识别漏洞至关重要。你将学习如何生成 MD5 哈希,为 John the Ripper 准备它们,然后使用不同的破解技术,包括字典攻击(wordlist attacks)和增量模式(incremental mode)。

从密码生成 MD5 哈希

在此步骤中,你将为几个示例密码生成 MD5 哈希。这将模拟你拥有哈希密码并需要破解它们的场景。你将使用 echo 命令通过管道(piped)传递给 md5sum 来创建这些哈希。

首先,让我们为密码 password123 生成一个 MD5 哈希:

echo -n "password123" | md5sum

你应该会看到类似以下的输出:

202cb962ac59075b964b07152d234b70  -

接下来,为更多密码生成 MD5 哈希:labexsecret

echo -n "labex" | md5sum
echo -n "secret" | md5sum

输出将是:

202cb962ac59075b964b07152d234b70  -
a0b923820dcc509a86619210ed1572e4  -
5ebe2294ecd0e0f08eab7690d2a6ee69  -

这些生成的哈希将在后续步骤中用于破解。

创建 MD5 哈希文件

在此步骤中,你将创建一个包含你生成的 MD5 哈希的文件。John the Ripper 通常以文件作为输入,文件中的每一行都包含一个需要破解的哈希。你将在你的 ~/project 目录下创建一个名为 hashes.txt 的文件,并用 MD5 哈希填充它。

首先,让我们创建 hashes.txt 文件并添加 MD5 哈希。我们只添加哈希部分,不包括 - 或文件名。

echo "202cb962ac59075b964b07152d234b70" > ~/project/hashes.txt
echo "a0b923820dcc509a86619210ed1572e4" >> ~/project/hashes.txt
echo "5ebe2294ecd0e0f08eab7690d2a6ee69" >> ~/project/hashes.txt

现在,使用 cat 命令验证 hashes.txt 文件的内容:

cat ~/project/hashes.txt

输出应该如下所示:

202cb962ac59075b964b07152d234b70
a0b923820dcc509a86619210ed1572e4
5ebe2294ecd0e0f08eab7690d2a6ee69

此文件将作为 John the Ripper 的输入。

为 John the Ripper 指定哈希类型

在此步骤中,你将学习如何告知 John the Ripper 它正在处理的哈希类型。John the Ripper 支持多种哈希类型,指定正确的类型对于成功破解至关重要。对于 MD5 哈希,你将使用 raw-md5 格式。

要检查 John the Ripper 是否识别 raw-md5 以及查看其他支持的格式,你可以使用 --list=formats 选项。但是,在本实验中,我们将直接使用 raw-md5 格式。

你可以使用 --format 选项测试 John the Ripper 处理单个哈希,并指定格式。这还不会破解它,但它确认了 John 可以处理该格式。

john --format=raw-md5 ~/project/hashes.txt --stdout

此命令将尝试将 hashes.txt 中的哈希作为 raw-md5 进行处理,并将它们打印到标准输出。你还不会看到破解的密码,但这确认了格式已被识别。输出将是哈希本身,因为 John 只是在处理它们而没有破解。

202cb962ac59075b964b07152d234b70
a0b923820dcc509a86619210ed1572e4
5ebe2294ecd0e0f08eab7690d2a6ee69

此步骤确保 John the Ripper 已正确配置以处理 MD5 哈希。

使用字典文件破解 MD5 哈希

在此步骤中,你将使用字典文件来破解 MD5 哈希。字典文件攻击通过尝试预定义列表中的每个单词来破解密码。这是一种常见且通常有效的方法,用于破解弱密码。

首先,你需要一个字典文件。在本实验中,你将在你的 ~/project 目录下创建一个名为 wordlist.txt 的简单字典文件,其中包含常用密码,包括你之前哈希的密码。

echo "password123" > ~/project/wordlist.txt
echo "labex" >> ~/project/wordlist.txt
echo "secret" >> ~/project/wordlist.txt
echo "test" >> ~/project/wordlist.txt
echo "admin" >> ~/project/wordlist.txt

现在,使用 John the Ripper 的 wordlist 选项来破解哈希:

john --format=raw-md5 --wordlist=~/project/wordlist.txt ~/project/hashes.txt

John the Ripper 将处理 hashes.txt 文件,尝试将 wordlist.txt 中的每个单词与 MD5 哈希进行匹配。如果找到匹配项,它将显示破解的密码。

输出应显示破解的密码:

Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (raw-md5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (202cb962ac59075b964b07152d234b70)
labex            (a0b923820dcc509a86619210ed1572e4)
secret           (5ebe2294ecd0e0f08eab7690d2a6ee69)
3g 0:00:00:00 DONE (2023-10-27 10:30) 100.0% (ETA: 00:00:00) 3.000g/s 15.00p/s 15.00c/s 15.00C/s password123 labex secret
Session completed.

你也可以使用 john --show 来显示 John the Ripper pot 文件中的破解密码:

john --show ~/project/hashes.txt

输出:

202cb962ac59075b964b07152d234b70:password123
a0b923820dcc509a86619210ed1572e4:labex
5ebe2294ecd0e0f08eab7690d2a6ee69:secret

3 password hashes cracked, 0 left

这展示了字典文件攻击对于常见或易于猜测的密码的有效性。

使用增量模式破解 MD5 哈希

在此步骤中,你将使用 John the Ripper 的增量模式来破解 MD5 哈希。增量模式是一种强大的暴力破解攻击,它根据字符集(例如,小写字母、数字、符号)尝试字符组合。当字典文件攻击失败时,它会很有用,因为它不依赖于预先存在的单词。

首先,让我们清除 John 的 pot 文件,以确保我们为这次破解尝试从头开始。这一点很重要,因为 John 会存储破解的密码,而我们希望再次看到破解过程。

john --session=my_session --restore=NONE

现在,让我们尝试使用增量模式破解哈希。为了演示目的,我们将使用一个非常小的字符集和一个较短的最大长度,以使破解时间保持可控。在实际场景中,增量模式可能需要很长时间,具体取决于密码的复杂性和长度。

john --format=raw-md5 --incremental=alnum --max-len=8 ~/project/hashes.txt

这里:

  • --incremental=alnum: 告诉 John 使用字母数字字符(a-z、A-Z、0-9)。John 有预定义的增量模式,如 alnumalphadigits 等。
  • --max-len=8: 将最大密码长度限制为 8 个字符。这对于在本实验中缩短破解时间至关重要。

John the Ripper 将开始生成和测试组合。由于我们的密码(password123labexsecret)在 alnum 字符集和 max-len=8(对于 labexsecret)范围内,John 最终应该会破解它们。password123 的长度为 11 个字符,因此使用 max-len=8 将无法破解它。

输出将显示 John 在找到它们时破解的密码:

Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (raw-md5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
labex            (a0b923820dcc509a86619210ed1572e4)
secret           (5ebe2294ecd0e0f08eab7690d2a6ee69)
2g 0:00:00:00 DONE (2023-10-27 10:35) 100.0% (ETA: 00:00:00) 2.000g/s 10.00p/s 10.00c/s 10.00C/s labex secret
Session completed.

你也可以再次使用 john --show 来显示破解的密码:

john --show ~/project/hashes.txt

输出:

a0b923820dcc509a86619210ed1572e4:labex
5ebe2294ecd0e0f08eab7690d2a6ee69:secret

2 password hashes cracked, 1 left

请注意,这次 password123 未被破解,因为其长度(11 个字符)超过了 --max-len=8 的限制。这突显了为增量攻击设置适当参数的重要性。

总结

在本实验中,你成功地使用 John the Ripper 破解了 MD5 哈希。你首先从样本密码生成了 MD5 哈希,然后创建了一个供 John the Ripper 处理的哈希文件。你学会了如何指定哈希类型(raw-md5),然后应用了两种不同的破解技术:字典文件攻击和增量模式。

你观察到,字典文件攻击对于字典中常见的密码非常有效,而增量模式则为更复杂或未知的密码提供了一种暴力破解方法,尽管破解时间可能长得多。本实验为你提供了使用 John the Ripper 进行密码破解技术的基础知识,这是一项对网络安全专业人员非常有价值的技能。