Kali Linux 密码破解:使用 John the Ripper

Kali LinuxKali LinuxBeginner
立即练习

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

介绍

在这个实验中,你将学习使用 Kali Linux 在 LabEx 虚拟机上进行密码破解的基础知识,重点关注强大的工具 John the Ripper。主要目标是理解如何破解 Linux 密码哈希(password hash),这些哈希是密码的加密表示,通常存储在 /etc/shadow 文件中。这项技能在渗透测试中至关重要,用于识别弱密码并提高系统安全性。通过有指导的、循序渐进的指令,你将使用示例哈希文件,创建和使用自定义词典(wordlist),比较像 John the RipperHashcat 这样的破解工具,并保存结果以供分析。本实验专为初学者设计,确保在受控环境中获得清晰而实用的学习体验。

设置环境和安装工具

在第一步中,我们将在 Kali Linux 容器内设置环境,并安装密码破解所需的工具。当你打开 LabEx 虚拟机中的终端时,你将自动连接到 Kali Linux 容器的 shell。无需手动启动容器或进入 shell;环境已经为你配置好了。

在我们继续之前,让我们了解一下将要使用的工具。John the Ripper 是一个广泛使用的密码破解工具,可以处理各种哈希类型,包括 Linux 系统中使用的哈希类型。Hashcat 是另一个强大的工具,以其速度而闻名,尤其是在有 GPU 支持的情况下,尽管我们在这里将以基本模式使用它。这两个工具对于渗透测试任务(如破解密码哈希)至关重要。

现在,让我们更新软件包列表并安装这些工具。在 Kali Linux 容器的终端中运行以下命令,以确保系统是最新的,并安装 John the RipperHashcat。在每个命令后按 Enter 键:

apt update
apt install -y john hashcat

这些命令将刷新软件包列表,并安装这两个工具(如果它们尚未安装)。这个过程可能需要几分钟,请耐心等待它完成。你将看到指示安装进度的输出,可能如下所示:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Setting up john (1.9.0-2) ...
Setting up hashcat (6.2.5-1) ...

安装完成后,通过检查 John the Ripper 的版本来验证它是否已安装。运行此命令:

john --version

你应该看到类似这样的输出,确认该工具已准备就绪:

John the Ripper 1.9.0-jumbo-1

接下来,通过运行以下命令来验证 Hashcat 的安装:

hashcat --version

预期的输出将类似于:

v6.2.5

此步骤确保你的 Kali Linux 环境已准备好密码破解所需的工具。安装了 John the RipperHashcat 后,你已准备好在下一步中创建用于破解的示例数据。

创建用于破解的示例哈希文件

现在你的环境已经设置好必要的工具,让我们准备用于处理的示例数据。在这一步中,我们将创建一个包含虚拟 Linux 密码哈希的示例文件。这些哈希模拟了在 Linux 系统上 /etc/shadow 文件中找到的格式,该文件存储加密的用户密码。这是一种安全的方式,可以在不访问真实系统文件的情况下练习密码破解。

/etc/shadow 中的 Linux 密码哈希通常使用 SHA-512 等算法,由哈希字符串中的 $6$ 指示。我们的目标是创建一个包含虚拟哈希的文件,以便与破解工具一起使用。我们将在 Kali Linux 容器内的默认目录中工作,该目录是 /root 或你进入容器时的当前工作目录。

让我们在 /root 目录中创建一个名为 sample_hashes.txt 的文件。运行以下命令来创建并使用虚拟数据填充此文件。在输入命令后按 Enter 键:

echo -e "user1:\$6\$randomsalt\$hashedpasswordstring:18234:0:99999:7:::\nuser2:\$6\$anothersalt\$anotherhashedpasswordstring:18234:0:99999:7:::" > /root/sample_hashes.txt

此命令使用 echo-e 选项来解释换行符 (\n),并将两个虚拟哈希条目写入 sample_hashes.txt。要确认文件已正确创建,请通过运行以下命令来显示其内容:

cat /root/sample_hashes.txt

你应该看到类似这样的输出,显示了两个虚拟用户条目及其哈希字符串:

user1:$6$randomsalt$hashedpasswordstring:18234:0:99999:7:::
user2:$6$anothersalt$anotherhashedpasswordstring:18234:0:99999:7:::

此文件模拟了 /etc/shadow 条目的结构,其中 $6$ 表示 SHA-512 哈希算法。有了这些示例数据,你已经成功地设置了一个安全的破解目标。在下一步中,我们将使用 John the Ripper 尝试使用其默认设置破解这些哈希。

使用 John the Ripper 破解哈希

准备好示例哈希文件后,让我们使用 John the Ripper 深入研究密码破解。此工具旨在通过尝试将哈希逆向工程为明文密码来测试密码强度。在这一步中,我们将使用 John the Ripper 及其默认设置来破解 sample_hashes.txt 文件中的哈希。这是渗透测试中识别弱密码的一项基本技能。

John the Ripper 通过将哈希与潜在密码列表进行比较来工作,通常使用内置的词表和规则来猜测常见模式。由于我们的虚拟哈希为了学习而简化,该工具可能会或可能不会使用默认设置破解它们,但这里的重点是理解这个过程。

确保你在 Kali Linux 容器的 shell 中,当你打开终端时会自动进入该 shell。我们将在 /root 目录中工作,sample_hashes.txt 文件位于该目录中。运行以下命令以使用 John the Ripper 启动破解过程:

john /root/sample_hashes.txt

此命令指示 John the Rippersample_hashes.txt 加载哈希,并尝试使用其默认词表和规则来破解它们。该过程可能需要几秒钟或几分钟。在执行期间,你可能会看到类似这样的输出:

Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 4 OpenMP threads
Proceeding with single mode
Trying common passwords...

该过程完成后,通过运行以下命令来检查是否破解了任何密码:

john --show /root/sample_hashes.txt

如果成功,输出将显示任何已破解的密码,可能如下所示:

user1:password123
user2:simplepass
2 password hashes cracked, 0 left

如果没有破解任何密码,输出将指示没有解析任何哈希,这对于学习目的来说是可以接受的。关键是要了解如何启动破解过程和查看结果。这一步向你介绍了 John the Ripper 的基本用法。在下一步中,我们将通过使用自定义词表来增强我们的破解工作。

使用自定义词表与 John the Ripper

在上一步中,我们使用了 John the Ripper 及其默认设置。现在,我们将通过创建和使用自定义词表来提高我们的破解成功率。词表是一个包含潜在密码的文件,破解工具会针对哈希测试这些密码。自定义词表可以定制为包含常见密码或与目标相关的特定术语,这通常会增加成功的机会。

我们将继续在 Kali Linux 容器的 shell 中,位于 /root 目录中。让我们创建一个名为 custom_wordlist.txt 的文件,其中包含一个用于演示的潜在密码的小列表。运行以下命令来创建此文件:

echo -e "password123\nadmin123\nsimplepass\ntest1234\nqwerty" > /root/custom_wordlist.txt

此命令将五个示例密码写入 custom_wordlist.txt。要确认文件已正确创建,请使用以下命令显示其内容:

cat /root/custom_wordlist.txt

你应该看到如下所示的密码列表:

password123
admin123
simplepass
test1234
qwerty

现在,让我们将此自定义词表与 John the Ripper 一起使用,以破解 sample_hashes.txt 中的哈希。运行以下命令以启动破解过程:

john --wordlist=/root/custom_wordlist.txt /root/sample_hashes.txt

此命令使用 --wordlist 选项指定自定义词表。该过程可能需要几秒钟,你可能会看到类似这样的输出:

Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 4 OpenMP threads
Proceeding with wordlist mode

完成后,通过运行以下命令来检查结果:

john --show /root/sample_hashes.txt

如果任何密码与词表中的条目匹配,输出可能如下所示:

user1:password123
user2:simplepass
2 password hashes cracked, 0 left

如果没有破解其他密码,则表明哈希与我们的小词表不匹配,这对于学习来说是可以接受的。这一步展示了如何使用自定义数据增强破解尝试。接下来,我们将通过在相同的哈希上使用 Hashcat 来比较这种方法。

使用 Hashcat 破解哈希进行比较

在使用 John the Ripper 之后,现在让我们探索 Hashcat,另一个强大的密码破解工具。Hashcat 以其速度和对各种攻击模式的支持而闻名,这使其成为渗透测试中一个有价值的替代方案。在这一步中,我们将使用 Hashcat 尝试破解相同的哈希,并将其方法与 John the Ripper 进行比较。我们将专注于使用自定义词表的简单字典攻击。

首先,我们需要为 Hashcat 准备哈希文件,因为它只需要哈希部分,而不需要用户名或其他字段。我们将从 sample_hashes.txt 中提取哈希到名为 clean_hashes.txt 的新文件中。在 Kali Linux 容器的 shell 中,从 /root 目录运行此命令:

awk -F':' '{print $2}' /root/sample_hashes.txt > /root/clean_hashes.txt

通过运行以下命令确认新文件的内容:

cat /root/clean_hashes.txt

你应该看到仅显示哈希字符串的输出,例如:

$6$randomsalt$hashedpasswordstring
$6$anothersalt$anotherhashedpasswordstring

现在,使用 Hashcat 和自定义词表破解这些哈希。对于 Linux SHA-512 哈希($6$),Hashcat 使用模式 1800,我们将执行字典攻击(模式 0)。运行此命令:

hashcat -m 1800 -a 0 /root/clean_hashes.txt /root/custom_wordlist.txt

该过程可能需要几秒钟,输出类似于这样:

hashcat (v6.2.5) starting...
Dictionary cache built:
* Filename..: /root/custom_wordlist.txt
* Passwords.: 5
* Bytes.....: 50
* Keyspace..: 5
* Runtime...: 0 secs
Session..........: hashcat
Status...........: Running
Hash.Mode........: 1800 (sha512crypt $6$, SHA512 (Unix))

完成后,通过运行以下命令查看已破解的密码:

hashcat -m 1800 -a 0 /root/clean_hashes.txt /root/custom_wordlist.txt --show

如果成功,输出可能如下所示:

$6$randomsalt$hashedpasswordstring:password123
$6$anothersalt$anotherhashedpasswordstring:simplepass

这一步演示了如何将 Hashcat 用作 John the Ripper 的替代方案,提供了不同的优势。在最后一步中,我们将保存来自这两个工具的结果以进行文档记录。

保存已破解的密码以进行文档记录

在最后一步中,我们将把来自 John the RipperHashcat 的已破解密码保存到单独的文件中。记录结果是渗透测试的关键部分,允许你查看发现结果或安全地报告它们。我们将继续在 Kali Linux 容器的 shell 中,位于 /root 目录中。

首先,通过将 john --show 命令的输出重定向到一个名为 john_cracked.txt 的文件来保存来自 John the Ripper 的结果。运行此命令:

john --show /root/sample_hashes.txt > /root/john_cracked.txt

通过运行以下命令来验证文件内容:

cat /root/john_cracked.txt

如果破解了任何密码,你应该看到类似这样的输出:

user1:password123
user2:simplepass
2 password hashes cracked, 0 left

接下来,通过将其输出重定向到一个名为 hashcat_cracked.txt 的文件来保存来自 Hashcat 的结果。运行此命令:

hashcat -m 1800 -a 0 /root/clean_hashes.txt /root/custom_wordlist.txt --show > /root/hashcat_cracked.txt

通过运行以下命令来验证文件内容:

cat /root/hashcat_cracked.txt

如果破解了密码,输出应该如下所示:

$6$randomsalt$hashedpasswordstring:password123
$6$anothersalt$anotherhashedpasswordstring:simplepass

如果在之前的步骤中没有破解任何密码,这些文件可能不会显示任何结果或仅显示摘要行,这对于学习来说是可以接受的。这一步完成了记录你的发现的过程,确保你以后可以参考已破解的密码。你现在已经学习了密码破解的完整工作流程,从设置到保存结果。

总结

在这个实验中,你学习了使用 Kali Linux 在 LabEx 虚拟机上进行密码破解的基本技能。你首先设置了环境,并在 Kali Linux 容器中安装了 John the RipperHashcat 等工具。通过逐步的指导,你创建了示例哈希文件,使用 John the Ripper 破解了 Linux 密码哈希,使用了默认和自定义词表,并使用 Hashcat 比较了结果,最后保存了已破解的密码以进行文档记录。这些实践练习为理解渗透测试技术以及强密码策略在保护系统中的重要性奠定了坚实的基础。