引言
在本实验中,你将探索 John the Ripper (JtR) 在密码破解会话管理方面的核心功能。有效的会话管理对于长时间运行的破解任务至关重要,它允许你暂停和恢复操作、从意外中断中恢复,并跟踪你的进度。你将学习如何启动破解会话、优雅地暂停和恢复它、理解会话文件的作用,甚至如何在模拟崩溃后恢复会话。最后,你将学习如何清理旧的会话文件以保持整洁的工作环境。
启动 John the Ripper 破解会话
在此步骤中,你将启动一个基本的 John the Ripper 破解会话。我们将使用一个简单的 MD5 哈希和一个小型字典文件来演示该过程。当你启动破解进程时,John the Ripper 会自动创建一个会话文件,这对于管理会话至关重要。
首先,在你的 ~/project 目录下创建一个名为 wordlist.txt 的简单字典文件。
echo -e "test\npassword\n123456\nadmin" > ~/project/wordlist.txt
现在,使用 wordlist.txt 启动 John the Ripper 来破解 passwords.txt 文件。我们将使用 --session 选项为我们的会话指定一个名称,这样更容易管理。
john --format=raw-md5 --wordlist=~/project/wordlist.txt --session=my_first_session ~/project/passwords.txt
你应该会看到 John the Ripper 开始破解过程。由于我们的字典文件很小并且包含正确的密码,它很可能会很快找到密码。
示例输出:
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (iterations) is 10000 for Raw-MD5
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
1g 0:00:00:00 DONE (2023-10-27 08:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s user1:password
Session completed
会话完成后,你可以使用 --show 选项查看已破解的密码。
john --show ~/project/passwords.txt
示例输出:
user1:password
1 password hash cracked, 0 left
暂停和恢复破解会话
在此步骤中,你将学习如何暂停一个正在进行的 John the Ripper 会话,然后恢复它。这对于你可能需要中断并在之后继续进行的长时间破解任务特别有用。
首先,让我们创建一个较大的虚拟字典文件,以确保破解过程需要一些时间,这样我们才能暂停它。
seq 1000000 | sed "s/$/password/" > ~/project/large_wordlist.txt
现在,使用这个大型字典文件启动一个新的 John the Ripper 会话。我们将这个会话命名为 long_session。
john --format=raw-md5 --wordlist=~/project/large_wordlist.txt --session=long_session ~/project/passwords.txt
破解开始后,立即按下 Ctrl+C 来暂停会话。John the Ripper 会将其当前状态保存到会话文件中。
按下 Ctrl+C 后的示例输出:
...
Press 'q' or Ctrl-C to abort, almost any other key for status
^C
Session aborted.
要恢复会话,请使用 --restore 选项并指定会话名称。
john --restore=long_session
John the Ripper 将会从中断的地方继续。你可以让它运行直到找到密码,或者再次按下 Ctrl+C 来暂停它。
恢复后的示例输出:
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (iterations) is 10000 for Raw-MD5
Will run 4 OpenMP threads
...
password (user1)
1g 0:00:00:00 DONE (2023-10-27 08:35) 100.0g/s 100.0p/s 100.0c/s 100.0C/s user1:password
Session completed
理解会话文件
在此步骤中,你将检查 John the Ripper 创建的会话文件。这些文件存储了你破解会话的状态,允许暂停、恢复和回滚。
John the Ripper 通常将会话文件存储在 ~/.john 目录中。让我们列出该目录的内容,以查看你创建的会话文件。
ls -l ~/.john/
你应该会看到类似 my_first_session.rec 和 long_session.rec 的文件。.rec 扩展名表示恢复文件。
示例输出:
total 16
-rw------- 1 labex labex 8192 Oct 27 08:30 my_first_session.rec
-rw------- 1 labex labex 8192 Oct 27 08:35 long_session.rec
你也可以查看会话文件的内容,尽管它主要是二进制数据。但是,你可以使用 strings 命令从中提取可读字符串,这可能会显示一些会话信息。
strings ~/.john/long_session.rec | head -n 10
示例输出(可能有所不同):
JtR session file
long_session
raw-md5
/home/labex/project/passwords.txt
/home/labex/project/large_wordlist.txt
这些会话文件对于 John the Ripper 管理和恢复破解过程的能力至关重要。
从崩溃的会话中恢复
在此步骤中,你将学习如何恢复可能意外崩溃的 John the Ripper 会话。这与恢复暂停的会话类似,因为 John the Ripper 会定期自动保存其状态。
首先,让我们模拟一次崩溃。启动一个新的会话,但这次我们将 abrupt 地终止进程,而不是正常地暂停它。
john --format=raw-md5 --wordlist=~/project/large_wordlist.txt --session=crash_test ~/project/passwords.txt &
注意末尾的 &,它会将命令放在后台运行。这将允许我们终止它。
现在,找到 john 进程的进程 ID (PID)。
pgrep john
示例输出(PID 会有所不同):
12345
现在,使用其 PID 终止 john 进程。将 YOUR_PID 替换为你找到的实际 PID。
kill YOUR_PID
你可能会看到类似 Terminated 或 Killed 的消息。这模拟了一次意外崩溃。
现在,尝试恢复 crash_test 会话。即使在 abrupt 终止后,John the Ripper 也应该能够从中断的地方继续。
john --restore=crash_test
示例输出:
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (iterations) is 10000 for Raw-MD5
Will run 4 OpenMP threads
...
password (user1)
1g 0:00:00:00 DONE (2023-10-27 08:40) 100.0g/s 100.0p/s 100.0c/s 100.0C/s user1:password
Session completed
这展示了 John the Ripper 强大的恢复能力,这对于长时间的破解操作至关重要。
清理旧的会话文件
在此步骤中,你将学习如何清理旧的 John the Ripper 会话文件。虽然这些文件对于恢复很有用,但它们会随着时间的推移而累积,尤其是在你运行许多会话时。
要删除特定的会话文件,你可以使用带有会话名称的 --remove 选项。让我们删除 my_first_session 文件。
john --remove=my_first_session
系统会提示你确认删除。输入 y 并按 Enter。
示例输出:
Remove session file ~/.john/my_first_session.rec? y
现在,通过再次列出 ~/.john 目录的内容来验证文件是否已被删除。
ls -l ~/.john/
你不应该再看到 my_first_session.rec。
示例输出:
total 16
-rw------- 1 labex labex 8192 Oct 27 08:35 long_session.rec
-rw------- 1 labex labex 8192 Oct 27 08:40 crash_test.rec
如果你愿意,也可以手动删除 .rec 文件,但推荐使用 john --remove,因为它能确保正确清理。
rm ~/.john/long_session.rec
rm ~/.john/crash_test.rec
最后,验证所有会话文件是否都已被删除。
ls -l ~/.john/
示例输出:
total 0
保持会话文件整洁有助于高效地管理你的破解任务。
总结
在此实验中,你获得了管理 John the Ripper 破解会话的实践经验。你学会了如何启动会话、有效地暂停和恢复会话,并理解了会话文件在维持破解进度中的关键作用。此外,你还探索了如何从意外崩溃中恢复会话,这突显了 John the Ripper 的韧性。最后,你练习了清理旧的会话文件以保持工作环境整洁。这些技能对于任何使用 John the Ripper 执行长时间密码审计或破解任务的人来说都是基础。


