John the Ripper(简称John)是一款功能强大的开源密码哈希破解工具,因其高效和灵活而被广泛应用于安全评估、渗透测试和数字取证中。本文将深入讲解其核心的三种破解模式——自动模式、指定格式模式和Single Crack Mode,并详细演示如何应对基础哈希、Linux /etc/shadow 文件、压缩文件(ZIP/RAR) 以及 SSH 文件等多种场景的破解流程。文中会介绍 hash-id.py、unshadow 等辅助工具的使用,并详解如何通过编辑 /etc/john/john.conf 配置文件来编写自定义破解规则,全程以经典的 /usr/share/wordlists/rockyou.txt 字典为核心,为你提供一份可直接上手的哈希破解实操指南。

一、核心工具与基础准备
进行哈希破解前,需要准备好相应的工具和资源,这是成功的基础。
- 核心破解工具:John the Ripper。它支持数百种哈希算法,提供了多种破解模式和高度的自定义能力。
- 辅助工具:
- 核心字典:
/usr/share/wordlists/rockyou.txt。这是一个包含超过1400万条密码的常用字典,在安全/渗透/逆向测试中非常实用,是密码破解的起点。
二、John的三种核心破解模式
理解John的不同工作模式,能让你根据场景选择最高效的破解策略。
| 破解模式 |
核心用途 |
规范命令 |
示例命令 |
| 自动模式 |
破解未知格式的基础哈希,John自动尝试匹配哈希类型。 |
john --wordlist=[字典路径] [哈希文件路径] |
john --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt |
| 指定格式模式 |
已知哈希格式,进行精准破解(标准哈希通常需加 raw- 前缀标识,如 raw-md5)。 |
john --format=[哈希格式] --wordlist=[字典路径] [哈希文件路径] |
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt |
| Single Crack Mode |
快速破解单个简单密码哈希,无需额外字典(使用内置的默认规则)。 |
john --single --format=[哈希格式] [哈希文件路径] |
john --single --format=raw-sha256 哈希.txt |
三、不同场景的破解流程
(一)基础哈希破解
当你手上只有一个或一组哈希值时,可以遵循以下步骤:
- 识别哈希:若哈希格式未知,先用
hash-id.py 脚本进行识别。例如:python3 hash-id.py,然后输入你的哈希值。
- 选择模式:
- 如果识别出了哈希类型,使用 指定格式模式 效率更高。
- 如果无法确定或想偷懒,可以直接使用 自动模式。
- 执行破解:根据选择的模式,运行对应的命令,指定字典和哈希文件路径,然后等待结果。
(二)Linux /etc/shadow 文件破解
在Linux系统安全评估中,获取并破解影子文件是常见需求。
- 获取文件:你需要目标系统的
/etc/passwd 文件(例如你将其保存为 local_passwd)和 /etc/shadow 文件(例如 local_shadow)。
- 整合文件:使用
unshadow 工具将两个文件合并为一个John能直接识别的格式:
unshadow local_passwd local_shadow > unshadowed.txt
- 执行破解:对生成的文件使用自动模式进行破解:
john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
(三)压缩文件(ZIP/RAR)与 SSH 文件破解
对于受密码保护的压缩包或SSH私钥,John并非直接处理原文件,而是先提取其中的哈希。
- 转换哈希:使用John配套的转换工具,将目标文件转换为哈希字符串。
- 常规破解:得到哈希文件后,就可以像处理基础哈希一样进行破解了:
john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt
四、自定义破解规则(John.conf)
当默认的字典攻击无法满足需求时,可以通过编写自定义规则来生成更符合特定习惯的密码变体,这极大地提升了密码破解的针对性和成功率。
- 配置文件路径:
/etc/john/john.conf。所有自定义规则都在此文件中定义。
- 规则编写规范:
- 规则定义:以
[List.Rules:规则名] 开始一个新规则块,例如 [List.Rules:PoloPassword]。
- 核心语法:规则由一系列指令组合而成。
| 语法 |
功能描述 |
Az |
在单词末尾附加指定字符/字符集 |
A0 |
在单词开头前缀指定字符/字符集 |
c |
将单词首字母大写 |
* **常用字符集**:
| 字符集 |
包含内容 |
[0-9] |
数字 0-9 |
[A-Z] |
大写英文字母 A-Z |
[a-z] |
小写英文字母 a-z |
[!£$%@] |
特殊符号 !、£、$、%、@ |
- 规则示例:假设你想匹配类似
Polopassword1! 这样的密码(首字母大写,末尾跟数字和特殊符号)。你可以在 john.conf 中添加如下规则:
[List.Rules:PoloPassword]
cAz"[0-9][!£$%@]"
这条规则的含义是:对字典中的每个单词,先应用 c(首字母大写),然后应用 Az 在末尾附加 [0-9][!£$%@] 这个字符集组合(即一个数字加一个指定特殊符号)。
- 使用自定义规则:在破解命令中通过
--rule 参数调用你定义的规则名:
john --wordlist=/usr/share/wordlists/rockyou.txt --rule=PoloPassword hash.txt
关键问题解答
问题1:John the Ripper的自动模式、指定格式模式与Single Crack Mode的核心区别是什么?分别适用于什么场景?
答案:
- 自动模式:核心是“自动识别”。John会尝试匹配哈希类型,无需用户指定。适用于初始信息不明的场景,比如拿到一个来源未知的哈希字符串,可以先用此模式试探。
- 指定格式模式:核心是“精准打击”。用户必须明确告知John哈希的格式(如
raw-md5, raw-sha256)。适用于已知加密算法的场景,例如从数据库导出的已知为MD5的哈希值,使用此模式能避免无谓的尝试,提升效率。
- Single Crack Mode:核心是“快速简单”。它不使用外部字典,而是利用John内置的一套规则(基于用户名、GECOS信息等)生成候选密码。适用于目标密码很可能非常弱或与账户信息相关的单个哈希破解,速度通常很快。
问题2:如何破解Linux系统的/etc/shadow文件中的密码哈希?请简述完整步骤及关键命令。
答案:
完整破解步骤如下:
- 文件获取:通过一定手段获取目标Linux系统中的
/etc/passwd 文件(保存为如 local_passwd)和 /etc/shadow 文件(保存为如 local_shadow)。
- 文件整合:使用
unshadow 命令将两个文件合并,生成John可直接读取的格式:
unshadow local_passwd local_shadow > unshadowed.txt
- 执行破解:使用John,搭配强大的密码字典(如rockyou.txt)对整合后的文件发起攻击:
john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
- 查看结果:破解完成后,运行
john --show unshadowed.txt 即可查看已被破解出的用户名和明文密码。
问题3:如何在John the Ripper中编写自定义破解规则?请举例说明规则语法及使用方法。
答案:
编写和使用自定义规则的步骤如下:
- 编辑配置文件:使用文本编辑器打开
/etc/john/john.conf。
- 定义规则块:在文件合适位置(如其他
[List.Rules] 区块附近)添加你的规则。例如,定义一个名为 MyRule 的规则,为每个密码尝试末尾添加两位数字:
[List.Rules:MyRule]
Az"[0-9]"
Az"[0-9]"
(注意:这里写了两行 Az"[0-9]" 来实现添加两个独立数字,而不是一个两位数。更复杂的组合需要更详细的规则语法。)
- 保存文件。
- 调用规则:在破解命令中通过
--rule 参数指定你的规则名:
john --wordlist=/usr/share/wordlists/rockyou.txt --rule=MyRule hash.txt
核心语法点:Az 表示“追加”,[0-9] 是数字字符集。规则按行顺序执行,可以组合 c(首字母大写)、A0(前缀)等多种指令来模拟复杂的密码策略。想深入学习更多规则语法,可以参考John的官方文档或在云栈社区的运维 & 测试及安全板块与同行交流。
|