引言
John the Ripper (JtR) 是一个强大且流行的开源密码破解工具。虽然它本身非常有效,但当它与其他工具集成到更广泛的安全测试工作流程中时,其真正潜力才能得到释放。通过脚本进行自动化可以进一步提高其效率,从而实现流程化和可重复的密码审计和恢复任务。
在本实验中,你将探索 John the Ripper 如何与其他常用安全工具集成。我们将涵盖 JtR 与 Hashcat、Metasploit 和 Aircrack-ng 的概念性工作流程。然后,你将通过编写一个简单的 bash 脚本来自动化 JtR 破解会话,获得实践经验。
将 John the Ripper 与 Hashcat 结合使用(概念性)
在本步骤中,我们将讨论 John the Ripper 和 Hashcat 的概念性集成。两者都是领先的密码破解工具,但它们各有优势。John the Ripper 以其基于 CPU 的破解性能和自动检测多种哈希类型(hash types)的能力而闻名。另一方面,Hashcat 是世界上最快的密码破解器,擅长 GPU 驱动的攻击。
虽然它们经常被视为替代品,但可以在工作流程中将它们结合使用。例如,你可以使用 John the Ripper 的实用工具,如 unshadow,从 Linux 系统中提取和合并密码文件和 shadow 文件。
示例工作流程:
- 从目标 Linux 系统获取
/etc/passwd和/etc/shadow文件。 - 使用 JtR 的
unshadow工具将它们合并到一个包含用户名和哈希的文件中:unshadow passwd shadow > hashes_for_cracking.txt。 - 将生成的
hashes_for_cracking.txt文件输入 Hashcat,以利用其强大的 GPU 破解能力。
此步骤纯粹是概念性的,旨在帮助你理解潜在的协同作用。此处没有需要执行的命令。关键要点是,一个工具的实用程序可以用来为另一个工具准备数据。
将 John the Ripper 与 Metasploit 集成(概念性)
在本步骤中,我们将探讨 John the Ripper 与 Metasploit Framework 的概念性集成。Metasploit 是一个强大的渗透测试框架,用于发现、利用和验证漏洞。一个常见的后渗透(post-exploitation)任务是从受损系统中转储(dump)密码哈希。这时,JtR 就成为了工作流程中的关键部分。
示例工作流程:
- 攻击者使用 Metasploit 的漏洞利用(exploit)获得对系统的初始访问权限。
- 在 Meterpreter 会话中使用后渗透模块,例如
run post/windows/gather/hashdump,攻击者转储密码哈希(例如,来自 Windows SAM 数据库的 NTLM 哈希)。 - 攻击者将这些哈希保存到本地机器上的一个文件中。
- 然后,离线使用 John the Ripper,通过各种技术(如字典攻击或暴力破解)来破解这些哈希。
- 一旦密码被破解,就可以利用它来提升权限或在网络中的其他系统之间进行横向移动(pivot),可能使用
psexec等其他 Metasploit 模块。
这种集成展示了一个典型的攻击生命周期,其中 Metasploit 用于获取访问权限,而 JtR 用于离线凭证破解。此步骤是概念性的,无需执行任何命令。
将 John the Ripper 与 Aircrack-ng 结合使用(概念性)
在本步骤中,我们将讨论如何将 John the Ripper 与 Aircrack-ng 套件结合使用来破解 Wi-Fi 密码。Aircrack-ng 是用于审计无线网络的一套工具。WPA/WPA2 审计的关键部分是捕获 4 字节握手(4-way handshake),当客户端连接到接入点(access point)时会发生此握手。此握手包含一个哈希,可以破解该哈希以揭示网络的预共享密钥(PSK)。
示例工作流程:
- 使用 Aircrack-ng 套件中的工具,如
airodump-ng,来监控无线流量并捕获 WPA/WPA2 握手。这通常保存为.cap文件。 .cap文件本身不是哈希。它必须转换为密码破解器可以理解的格式。你可以使用aircrack-ng或hcxpcaptool等其他工具进行此转换。- 例如,你可以使用带
-J选项的aircrack-ng来创建一个与 Hashcat 兼容的文件(.hccapx),John the Ripper 也可以处理该文件。命令大致如下:aircrack-ng your_capture.cap -J output_hash_file。 - 最后,使用 John the Ripper 和字典文件(wordlist)来破解哈希文件:
john --wordlist=passwords.txt output_hash_file.hccapx。
此工作流程展示了如何使用一个特定领域的专业工具(Wi-Fi)来提供通用工具(如 JtR)处理的原始数据。此步骤是概念性的,无需执行任何命令。
用于自动化的 John the Ripper 脚本
在本步骤中,我们将从理论转向实践。将 John the Ripper“集成”的最常见方法是将其命令行界面封装在脚本中。这使你能够自动化重复性任务,并将其构建到更大的工具链中。我们将创建一个简单的 bash 脚本来运行字典攻击,然后展示结果。
首先,让我们创建自动化脚本。使用 nano 编辑器在当前目录 ~/project 中创建一个名为 crack.sh 的新文件。
nano crack.sh
现在,将以下内容添加到文件中。此脚本将接受哈希文件和字典文件作为输入,运行 John,然后显示任何已破解的密码。
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <hash_file> <wordlist_file>"
exit 1
fi
HASH_FILE=$1
WORDLIST=$2
echo "[-] Starting John the Ripper..."
john --wordlist="$WORDLIST" "$HASH_FILE" > /dev/null 2>&1
echo "[+] Cracking attempt finished."
echo "[+] Showing cracked passwords:"
john --show "$HASH_FILE"
保存文件并按 Ctrl+X,然后按 Y,最后按 Enter 退出 nano。
接下来,我们需要使脚本可执行。
chmod +x crack.sh
现在,让我们为测试创建一个简单的字典文件。此实验的设置脚本已经创建了一个名为 hashes.txt 的文件,其中包含一个示例哈希。此哈希的密码是 password123。
echo "password123" > wordlist.txt
最后,运行你的自动化脚本。将 hashes.txt 文件和你的新 wordlist.txt 提供给它。
./crack.sh hashes.txt wordlist.txt
你应该会看到以下输出,表明脚本成功运行了 John 并找到了密码。
[-] Starting John the Ripper...
[+] Cracking attempt finished.
[+] Showing cracked passwords:
user1:password123
1 password hash cracked, 0 left
你现在已经成功创建了一个自动化 John the Ripper 的简单脚本!
理解 John the Ripper API(如果适用)
在最后一步中,我们将阐明“John the Ripper API”的概念。当开发者谈论 API(Application Programming Interfaces,应用程序编程接口)时,他们通常指的是用于 Web 服务的 REST API 或特定编程语言的文档齐全的库。
John the Ripper 在此意义上没有正式、稳定的公共 API。其主要接口是命令行(CLI),它功能强大、灵活,并且如你在上一步中所演示的那样,专为交互和脚本编写而设计。
JtR 的核心功能包含在一个库中,有时被称为 libjohn。对于高级 C 程序员来说,技术上可以链接此库来构建自定义应用程序。然而,这是一项复杂的任务,并非典型用例,也不作为公共 API 支持。
因此,对于绝大多数用户和集成而言,“使用 JtR API”意味着:
- 从脚本(例如 Bash、Python、Perl)调用 JtR 可执行文件。
- 解析该工具的命令行输出。
- 与其文件进行交互,例如哈希文件输入以及存储已破解密码的
john.pot文件。
关键要点是,与 John the Ripper 的集成和自动化是通过 CLI 脚本实现的,而不是通过传统的编程库或 Web API。
总结
在本实验中,你探索了如何通过将 John the Ripper 与其他工具集成并自动化其执行来增强其功能。
你学习了将 JtR 与其他主要安全工具结合的概念性工作流程:
- 使用 JtR 的实用工具为 Hashcat 的基于 GPU 的破解准备哈希。
- 在使用 Metasploit Framework 进行后渗透(post-exploitation)期间,使用 JtR 来破解获取的哈希。
- 使用 JtR 来破解由 Aircrack-ng 套件捕获的 Wi-Fi 握手包。
然后,你通过编写和执行一个 bash 脚本来自动化密码破解会话,将理论付诸实践,这是将 JtR 集成到更大工作流程中的主要方法。最后,你阐明了 JtR 的“API”是其强大的命令行接口,这是其灵活性和集成潜力的关键。


