使用字典模式破解简单密码

Kali LinuxBeginner
立即练习

引言

在本实验中,你将探索网络安全中的一项基本技术:密码破解。你将使用 John the Ripper (JtR),一个流行且强大的开源密码安全审计工具。具体来说,你将学习如何执行“字典攻击”(wordlist attack),该攻击涉及使用预定义的潜在密码列表来猜测存储的密码哈希(password hash)的正确密码。

这个实践练习将指导你完成创建示例密码哈希、获取字典文件、运行 John the Ripper 来破解密码,最后查看和保存结果。理解这个过程对于希望测试用户密码强度的系统管理员和有志于成为安全专业人士的人来说都至关重要。

完成本实验后,你将能够:

  • 创建一个包含密码哈希的文件。
  • 将字典文件与 John the Ripper 一起使用。
  • 破解一个简单的密码并查看结果。

创建示例密码哈希文件

在此步骤中,你将创建一个示例用户并将其密码哈希提取到文件中。密码破解工具不处理明文密码;它们处理的是密码的哈希表示,这些哈希通常存储在 Linux 系统文件(如 /etc/shadow)中。

首先,让我们创建一个名为 testuser 的新用户,并为其设置一个简单密码 password123。我们将使用 openssl 来生成密码的哈希,并使用 useradd 来创建用户。

在你的终端中执行以下命令:

sudo useradd -m -p $(openssl passwd -1 password123) testuser

接下来,我们需要从 /etc/shadow 文件中提取包含 testuser 密码哈希的行。我们将使用 grep 命令查找该行,并将输出重定向到当前目录(~/project)下的一个名为 hashes.txt 的新文件中。

sudo grep testuser /etc/shadow > ~/project/hashes.txt

现在,让我们查看 hashes.txt 文件的内容,以确认它包含用户的哈希。

cat hashes.txt

你应该会看到类似以下的输出。第一个冒号和第二个冒号之间的长字符串就是哈希后的密码。

testuser:$1$jE/Ipl8J$z4JgUjZfH.yN.CgCjWn.H.:19782:0:99999:7:::

你现在已成功为我们的密码破解实验创建了一个目标文件。

下载常用字典文件

在此步骤中,你将创建一个字典文件。字典文件就是一个文本文件,其中每一行包含一个潜在的密码。John the Ripper 将读取此文件并尝试使用其中的每个密码来破解目标哈希。在本实验中,我们不下载大型的现有字典文件,而是创建我们自己的小型自定义字典。这使我们能够控制内容并确保包含正确的密码以成功破解。

让我们创建一个名为 wordlist.txt 的文件,并将一些常用密码添加到其中,包括我们为 testuser 设置的密码。

首先,创建文件并将 password123 添加到其中:

echo "password123" > ~/project/wordlist.txt

现在,让我们将更多常用密码追加到同一个文件中。我们使用 >> 进行追加,它会向文件添加内容而不覆盖现有内容。

echo "123456" >> ~/project/wordlist.txt
echo "qwerty" >> ~/project/wordlist.txt
echo "admin" >> ~/project/wordlist.txt

让我们验证一下新字典文件的内容。

cat wordlist.txt

你的终端应显示以下内容:

password123
123456
qwerty
admin

你现在拥有一个可以与 John the Ripper 一起使用的字典文件了。

以字典模式运行 John the Ripper

在此步骤中,你将使用 John the Ripper 来破解你创建的字典文件中的密码哈希。以字典模式运行 JtR 的语法非常直接。你需要指定字典文件和包含哈希的文件。

命令格式为 john --wordlist=<path_to_wordlist> <path_to_hash_file>

现在,在你的终端中运行命令,将 JtR 指向你的 wordlist.txthashes.txt 文件。

john --wordlist=wordlist.txt hashes.txt

John the Ripper 将开始处理。它将加载哈希,然后尝试使用你的字典中的每个密码。由于我们的密码就在列表中,这个过程会非常快。你将看到类似以下的输出:

Using default input encoding: UTF-8
Loaded 1 password hash (MD5-based crypt [MD5_body])
Cost 1 (algorithm [1:MD5 2:SHA256 3:SHA512] of 3) is 1 (MD5)
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s admin..password123
Session completed

password123 (testuser) 这一行表明 JtR 已成功破解了密码。它还将此结果存储在一个名为“pot file”(纯文本文件)的文件中,通常位于 ~/.john/john.pot,这样它就不必重新破解已知的密码了。

查看已破解的密码

在此步骤中,你将学习如何查看 John the Ripper 已破解的密码。一旦密码被破解,JtR 会将其保存到其 pot 文件中。如果你再次尝试运行相同的破解命令,JtR 将报告“No password hashes left to crack”(没有剩余的密码哈希可供破解),因为它已经解决了。

要显示给定哈希文件的已破解密码,请使用 --show 选项。

运行以下命令来查看 hashes.txt 的已破解密码:

john --show hashes.txt

该命令将检查 pot 文件,并显示与 hashes.txt 中的哈希关联的任何已破解密码。输出将如下所示:

testuser:password123:19782:0:99999:7:::
1 password hash cracked, 0 left

输出格式为 username:password:other_shadow_file_fields。这证实了 testuser 的密码是 password123。此命令非常有用,可以快速检索破解会话的结果,而无需手动解析 pot 文件。

将已破解的密码保存到文件

在此步骤中,你将把已破解的密码保存到一个单独的文件中。这是渗透测试和安全审计中为了报告目的而常见的做法。你可以通过将 john --show 命令的输出重定向到一个文件来轻松实现这一点。

让我们将结果保存到一个名为 cracked.txt 的文件中。

john --show hashes.txt > cracked.txt

此命令执行 john --show hashes.txt,与之前一样,但输出不会打印到终端,而是 > 操作符将输出重定向并保存到 cracked.txt 文件中。如果文件不存在,它将被创建。如果文件已存在,它将被覆盖。

为了验证输出是否已正确保存,你可以使用 cat 命令显示新文件的内容。

cat cracked.txt

终端将显示文件的内容,这应该与你在上一步中看到的输出相同:

testuser:password123:19782:0:99999:7:::

1 password hash cracked, 0 left

你现在已成功破解了一个密码,并将结果保存到文件中以供文档记录。

总结

恭喜你完成了本次实验!你已成功使用 John the Ripper 执行了基于字典的密码破解攻击。

在此次实验中,你学会了如何:

  • 从系统中创建示例密码哈希文件。
  • 创建一个包含潜在密码的自定义字典。
  • 在字典模式下执行 John the Ripper 来破解密码哈希。
  • 使用 --show 选项查看已破解的密码。
  • 将命令输出重定向以将你的发现保存到文件。

这个练习展示了简单且常见的密码是如何轻易被攻破的。它强调了使用强大、复杂且唯一的密码来保护系统和数据的重要性。你所学的技能是安全审计和渗透测试的基础组成部分。