引言
John the Ripper 是一个流行的开源密码破解工具。在执行密码审计或破解尝试时,理解其输出和状态对于监控进度、识别已破解的密码以及排除故障至关重要。本实验将指导你解读 John the Ripper 的各种输出信息、检查其实时破解状态、查看破解会话的结果、理解其性能统计数据以及记录其输出以供后续分析。
解读 John the Ripper 输出信息
在此步骤中,你将学习理解 John the Ripper 在破解会话期间显示的各种信息。这些信息能让你了解其进度、破解模式以及遇到的任何问题。
首先,让我们使用字典(wordlist)启动一个简单的破解会话。我们将使用在设置步骤中创建的 passwords.txt 文件和一个小的 wordlist.txt。
在你的终端中执行以下命令:
john --wordlist=wordlist.txt passwords.txt
你将看到类似以下的输出:
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts to the same type of crypt (sha512crypt, crypt(3) $6$)
Remaining 3 password hashes with no different salts
Press 'q' or Ctrl-C to abort, almost any other key for status
user1 (user1)
user2 (user2)
user3 (user3)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% 3.000g/s 18.00p/s 18.00c/s 18.00C/s user1 user2 user3
Session completed
让我们分解一下这个输出的关键部分:
Using default input encoding: UTF-8: 指示 John 使用的字符编码。Loaded 3 password hashes...: 显示从输入文件中加载了多少个哈希值。Press 'q' or Ctrl-C to abort, almost any other key for status: 这是一个重要的提示。它告诉你如何在会话期间与 John 进行交互。user1 (user1): 这是一个已破解的密码。user1是用户名(或哈希标识符),(user1)是已破解的密码。John 会在找到每个已破解的密码时显示它们。3g 0:00:00:00 DONE ...: 这是摘要行。3g: 已破解的哈希数量(3 次猜测)。0:00:00:00 DONE: 已用时间以及会话已完成。100.0%: 已完成的破解过程的百分比。3.000g/s: 每秒猜测次数。18.00p/s: 每秒密码数(测试的候选密码数量)。18.00c/s: 每秒加密次数(哈希计算次数)。18.00C/s: 每秒候选数(生成的唯一候选密码数量)。user1 user2 user3: 最后几个已破解的密码。
Session completed: 确认破解会话已完成。
理解这些信息有助于你监控 John the Ripper 操作的进度和结果。
在会话期间检查破解状态
在此步骤中,你将学习如何检查 John the Ripper 破解会话的实时状态。这对于长时间运行的会话尤其有用,可以让你在不中断进程的情况下监控进度。
首先,让我们清理之前的会话状态,以便 John 重新开始。
john --session=test_session --restore=NONE --wordlist=wordlist.txt passwords.txt --force-load-hashes
现在,启动一个新的破解会话。这次,我们将使用一个稍大的字典,以确保会话运行足够长的时间供我们检查其状态。我们将使用 passwords.txt 文件和 wordlist.txt 文件。
执行以下命令。请注意,我们使用了 --session=test_session 为此会话命名,这对于稍后恢复或检查状态很有用。
john --session=test_session --wordlist=wordlist.txt passwords.txt
在 John 运行期间(使用小字典它可能很快完成,但请想象它是一个大字典),打开一个新的终端标签页(如果你不在 LabEx 环境中,则可以打开一个新的终端窗口)。在新终端中,你可以检查正在运行的会话的状态。
要检查状态,请使用带有会话名称的 --status 选项:
john --session=test_session --status
你将看到类似以下的输出(具体数字会根据进度而变化):
Session test_session (john)
Progress: 3/3 (100%)
Speed: 3.000g/s (words), 18.00p/s (passwords), 18.00c/s (crypts), 18.00C/s (candidates)
Remaining: 0:00:00:00
Cracked: 3
此输出提供了会话进度的快照,包括已破解的哈希数量、破解速度以及预计剩余时间。
检查完状态后,你可以关闭新的终端标签页。原始的 John the Ripper 会话将继续运行直到完成。
如果会话已经完成,--status 命令将指示会话已完成。
Session test_session (john)
Session completed
此功能对于管理长时间运行的破解操作非常有价值。
查看会话中的已破解密码
在 John the Ripper 会话完成后,已破解的密码会保存在一个名为 john.pot 的文件中(通常位于 ~/.john/john.pot)。在此步骤中,你将学习如何查看这些已破解的密码。
首先,请确保你有一个包含已破解密码的 john.pot 文件。如果你已按照之前的步骤操作,它应该已经存在。如果不存在,请再次运行破解命令:
john --wordlist=wordlist.txt passwords.txt
会话完成后,你可以使用 --show 选项查看已破解的密码。此选项告诉 John 显示它为给定哈希文件存储的所有已破解密码。
执行以下命令:
john --show passwords.txt
你将看到类似以下的输出:
user1:user1
user2:user2
user3:user3
3 password hashes cracked, 0 left
输出以 username:password 的格式列出了每个已破解的哈希。3 password hashes cracked, 0 left 行总结了结果。
john.pot 文件是 John the Ripper 的一个关键组成部分,因为它存储了所有成功破解的密码。John 会在尝试破解哈希之前自动检查此文件,从而避免重复工作。你也可以直接使用 cat 命令检查 john.pot 文件:
cat ~/.john/john.pot
内容将类似如下:
user1:user1
user2:user2
user3:user3
此步骤演示了如何检索和审查你的破解工作的宝贵输出。
理解 John the Ripper 统计信息
John the Ripper 提供了关于其破解性能的详细统计信息。理解这些统计信息有助于你评估破解尝试的效率并比较不同的破解策略。
让我们再次运行一个破解会话来生成一些统计信息。我们将使用与之前相同的命令。
john --wordlist=wordlist.txt passwords.txt
观察会话完成后出现的最终摘要行:
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% 3.000g/s 18.00p/s 18.00c/s 18.00C/s user1 user2 user3
Session completed
让我们重新审视关键的统计指标:
3g: 这表示“猜测”(guesses)的数量,在此上下文中对应于成功破解的哈希数量。0:00:00:00 DONE: 会话的总耗时。对于短会话,它可能显示为 0。100.0%: 已完成的破解过程的百分比。3.000g/s(guesses/s): John 每秒进行猜测的速率。这通常是破解速度最直接的衡量标准。18.00p/s(passwords/s): 每秒测试的候选密码数量。如果多个哈希针对同一个候选密码进行测试,这个数字可能高于g/s。18.00c/s(crypts/s): 每秒执行的哈希计算(加密操作)数量。这是衡量所用原始计算能力的一个指标。18.00C/s(candidates/s): 每秒生成的唯一候选密码数量。如果同一个候选密码被测试到多个哈希上,这可能与p/s不同。
这些统计信息对于以下方面至关重要:
- 性能评估: 了解 John 的破解速度。
- 资源利用率: 评估用于哈希计算的 CPU 功耗。
- 策略比较: 比较不同字典或破解模式的有效性。
通过关注这些数字,你可以深入了解你的密码审计工作。
将 John the Ripper 输出记录到文件
对于长时间运行的会话或出于审计目的,将 John the Ripper 的输出记录到文件通常很有益。这使你可以在之后查看进度和结果,而无需保持终端打开。
你可以使用标准的 shell 重定向 (>) 将 John 的标准输出重定向到文件。
首先,让我们清理任何先前的会话文件,以确保一个全新的开始。
john --session=log_session --restore=NONE --wordlist=wordlist.txt passwords.txt --force-load-hashes
现在,运行 John the Ripper 并将其输出重定向到你 ~/project 目录中名为 john_output.log 的文件。
john --session=log_session --wordlist=wordlist.txt passwords.txt > john_output.log
请注意,执行此命令后,你的终端似乎不会有任何反应。这是因为所有通常会显示在屏幕上的输出现在都被写入了 john_output.log。
命令完成后(对于我们的小字典来说几乎是瞬间完成的),你可以使用 cat 查看日志文件的内容:
cat john_output.log
你将看到 John the Ripper 会话的完整输出,与你在屏幕上看到的内容相同,但现在已存储在文件中:
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts to the same type of crypt (sha512crypt, crypt(3) $6$)
Remaining 3 password hashes with no different salts
Press 'q' or Ctrl-C to abort, almost any other key for status
user1 (user1)
user2 (user2)
user3 (user3)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% 3.000g/s 18.00p/s 18.00c/s 18.00C/s user1 user2 user3
Session completed
对于任何长时间运行或关键的命令行操作,记录输出都是一种最佳实践,它提供了事件和结果的持久记录。
总结
在本实验中,你全面了解了如何解读 John the Ripper 的输出和管理其会话。你学会了如何解析破解会话期间显示的各种消息,检查运行中会话的实时状态,以及从 john.pot 文件中检索已破解的密码。此外,你还探索了如何理解 John 的性能统计信息以及如何将其输出记录到文件以进行持久记录。这些技能对于有效使用 John the Ripper 进行密码审计和安全测试至关重要。


