介绍
在本实验中,你将学习使用 Kali Linux 进行密码破解的基础知识,重点是强大的工具 John the Ripper。主要目标是了解如何破解 Linux 密码哈希,这些哈希通常存储在 /etc/shadow 文件中,是密码的加密表示形式。这项技能在渗透测试中至关重要,有助于识别弱密码并提高系统安全性。
当你打开终端时,你将自动进入一个 Kali Linux 容器 shell。本实验中的所有命令都应在此环境中执行。通过循序渐进的指导,你将处理示例哈希文件、创建并使用自定义字典,并将破解结果保存以供后续查阅。本实验专为初学者设计,工作流程专注于在提供的容器环境中能够稳定运行的 John the Ripper。
环境设置与工具安装
在第一步中,我们将通过安装本实验的主要工具来准备 Kali Linux 环境。如前所述,你的终端会话已经在 Kali Linux 容器中运行。
我们将使用 John the Ripper,这是一个功能多样且被广泛使用的密码破解工具,在提供的 LabEx 容器中可以稳定运行。
首先,更新软件包列表,确保能够获取到最新的软件版本。
apt update
接下来,使用以下命令安装 John the Ripper。-y 标志会自动确认安装。
apt install -y john
安装过程可能需要几分钟。完成后,你可以通过直接运行 john 命令(不带任何选项)来验证其是否安装正确。
john
你应该会看到帮助和版本信息,这表明该工具已准备就绪。输出内容应类似于:
John the Ripper 1.9.0-jumbo-1+bleeding-aec1328d6c 2021-11-02 10:45:52 +0100 OMP [linux-gnu 64-bit x86_64 AVX512BW AC]
Copyright (c) 1996-2021 by Solar Designer and others
Homepage: https://www.openwall.com/john/
Usage: john [OPTIONS] [PASSWORD-FILES]
...
随着 John the Ripper 的安装和验证完成,你的环境现已为后续步骤中的密码破解练习做好了准备。
创建示例哈希文件
工具安装完成后,我们需要一些数据来处理。在这一步中,你将创建一个包含真实 Linux 密码哈希的文件,以便 John the Ripper 进行处理。这些哈希的格式模仿了 Linux 系统中用于安全存储用户密码信息的 /etc/shadow 文件。这能让你在安全、可控的环境中练习破解。
所有操作都将在 Kali 容器的 /root 目录下执行。我们将直接创建一个包含预生成真实哈希的文件,这些哈希对应的是简单、常见的密码,可以快速破解。
使用以下命令直接创建示例哈希文件:
cd /root
echo -e "user1:\$6\$randomsalt\$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0:18234:0:99999:7:::\nuser2:\$6\$anothersalt\$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/:18234:0:99999:7:::" > sample_hashes.txt
或者,你也可以通过复制粘贴以下内容手动创建该文件:
cd /root
cat > sample_hashes.txt << 'EOF'
user1:$6$randomsalt$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0:18234:0:99999:7:::
user2:$6$anothersalt$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/:18234:0:99999:7:::
EOF
每行开头的 $6$ 表示该哈希是 SHA-512 crypt 哈希,这是现代 Linux 系统的通用标准。其格式遵循 shadow 文件结构:username:hashed_password:last_change:min_age:max_age:warning:inactive:expire:reserved。
要确认文件创建正确,请使用 cat 命令显示其内容:
cat /root/sample_hashes.txt
输出应显示两个包含真实哈希值的用户条目:
user1:$6$randomsalt$WS2qjCQ1JrmZv8otdbtntIYu6lRzkk2aIVhgIMdMexOcvD9bEAoxtKcyZLXbR3wlhOOPBscJbLCPUU/fYjFhM0:18234:0:99999:7:::
user2:$6$anothersalt$ZffCt8y5Hl8gLYS79/rhyT76C12kNhuOvkFR8Ll0RXcjQz2Nzuh3VUdT//e21HYfH6fP9btOp2aG22O3S7q1z/:18234:0:99999:7:::
重要提示:
- 这些是 John the Ripper 可以处理的、格式正确的真实 SHA-512 哈希。
- 对应的密码分别是
password和123456—— 这些是非常简单且常见的密码,保证存在于 John 的默认字典中。 - 这确保了演示目的下的快速破解,通常在几秒钟内即可完成。
准备好此示例数据文件后,你就有了密码破解练习的目标。在下一步中,你将使用 John the Ripper 尝试破解这些哈希。
使用 John the Ripper 的默认模式破解哈希
有了示例哈希文件,现在是时候开始使用 John the Ripper 进行破解了。默认情况下,John 使用多种模式,包括使用用户名和其他信息来猜测密码的“单一破解(single crack)”模式,以及使用其内置密码列表的字典模式。这是识别弱密码和常见密码的绝佳起点。
运行以下命令,开始对 sample_hashes.txt 文件进行破解。
john /root/sample_hashes.txt
John 将加载哈希并开始破解会话。你将看到显示其进度的输出。由于我们创建的真实哈希对应的是非常简单、常见的密码(password 和 123456),John 应该能够使用其默认的字典模式快速破解它们。
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (sha512crypt, crypt(3) $6$ [SHA512 512/512 AVX512BW 8x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
...
你可以让 John 运行一段时间以尝试破解,或者如果你想提前查看结果,可以使用 Ctrl-C 停止该过程。要查看已破解的密码,请使用 --show 选项。
john --show /root/sample_hashes.txt
如果密码破解成功,输出应如下所示:
user1:password:18234:0:99999:7:::
user2:123456:18234:0:99999:7:::
2 password hashes cracked, 0 left
由于我们使用了非常简单的密码(password 和 123456),它们几乎肯定在 John 的默认字典中,因此这些哈希应该很快(通常在几秒钟内)就被破解了。这一成功证明了 John the Ripper 可以正确处理我们的真实哈希文件,并展示了弱密码被破解的速度有多快。
在下一步中,我们将探索如何为 John 提供自定义字典并调整各种参数,以提高破解效率。
使用自定义字典进行破解
仅依赖默认设置通常是不够的。使用自定义字典进行针对性攻击会有效得多。字典只是一个文本文件,每行包含一个潜在的密码。在这一步中,你将创建一个小型自定义字典,并将其与 John the Ripper 一起使用。
在 /root 目录下创建一个名为 custom_wordlist.txt 的文件,其中包含几个常见密码,包括我们已知存在于哈希文件中的那些密码。
echo -e "password\n123456\nadmin123\ntest1234\nqwerty\npassword123" > /root/custom_wordlist.txt
验证新字典的内容。
cat /root/custom_wordlist.txt
输出应显示你刚刚添加的六个密码:
password
123456
admin123
test1234
qwerty
password123
现在,再次运行 John the Ripper,但这次使用 --wordlist 选项指定你的自定义字典。
john --wordlist=/root/custom_wordlist.txt /root/sample_hashes.txt
此命令告诉 John 使用 custom_wordlist.txt 中的每个密码来测试 sample_hashes.txt 中的哈希。由于我们的字典包含了与文件中哈希对应的真实密码(password 和 123456),John 应该能非常快地破解它们。
过程完成后,再次检查结果。
john --show /root/sample_hashes.txt
由于我们的字典包含了正确的密码,输出现在应显示已破解的凭据:
user1:password:18234:0:99999:7:::
user2:123456:18234:0:99999:7:::
2 password hashes cracked, 0 left
这证明了针对性字典攻击的有效性。通过在自定义字典中包含真实密码,我们能够比仅依赖 John 的默认字典更快地破解哈希。这种技术是针对性密码攻击的基础。在最后一步中,你将把破解后的凭据保存到报告文件中,以供后续查阅。
保存破解后的密码
在这一步中,你将把 John the Ripper 会话中破解出的凭据保存到报告文件中。这是密码审计工作中的一个实用习惯,因为它允许你在以后查看恢复的账户,而无需重新运行破解过程。
使用 john --show 显示恢复的密码,然后将该输出重定向到 /root/cracked_passwords.txt。
john --show /root/sample_hashes.txt > /root/cracked_passwords.txt
显示保存的报告,确认其中包含已破解的凭据。
cat /root/cracked_passwords.txt
输出应类似于:
user1:password:18234:0:99999:7:::
user2:123456:18234:0:99999:7:::
2 password hashes cracked, 0 left
如果文件中尚未包含任何已破解的密码,请重新运行上一步中的 john --wordlist=/root/custom_wordlist.txt /root/sample_hashes.txt 命令,然后再次保存结果。
通过将破解后的密码保存到文件中,你完成了从哈希准备到记录结果的完整工作流程。这为你提供了一份可重复使用的记录,你可以在受控的安全审查期间检查或共享该记录。
总结
在本实验中,你在 Kali Linux 环境中获得了密码破解基础技术的实践经验。你首先设置了工作空间并安装了 John the Ripper。然后,你学习了如何通过创建模仿 Linux /etc/shadow 格式的示例哈希文件来准备目标数据。
你练习了在默认设置和自定义字典下使用 John the Ripper,并将恢复的凭据保存到报告文件中以供后续查阅。这些技能为渗透测试奠定了坚实的基础,并强调了实施强密码策略以抵御此类攻击的重要性。



