找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4397

积分

0

好友

615

主题
发表于 2 小时前 | 查看: 2| 回复: 0

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

John the Ripper核心功能思维导图

一、核心工具与基础准备

进行哈希破解前,需要准备好相应的工具和资源,这是成功的基础。

  1. 核心破解工具:John the Ripper。它支持数百种哈希算法,提供了多种破解模式和高度的自定义能力。
  2. 辅助工具
    • hash-id.py:一个Python脚本,用于识别未知哈希值的可能类型。可以通过命令下载:
      wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py
    • unshadow:John自带工具,用于整合Linux系统的 /etc/passwd/etc/shadow 文件,生成一个John可以直接处理的文件。
  3. 核心字典/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

三、不同场景的破解流程

(一)基础哈希破解

当你手上只有一个或一组哈希值时,可以遵循以下步骤:

  1. 识别哈希:若哈希格式未知,先用 hash-id.py 脚本进行识别。例如:python3 hash-id.py,然后输入你的哈希值。
  2. 选择模式
    • 如果识别出了哈希类型,使用 指定格式模式 效率更高。
    • 如果无法确定或想偷懒,可以直接使用 自动模式
  3. 执行破解:根据选择的模式,运行对应的命令,指定字典和哈希文件路径,然后等待结果。

(二)Linux /etc/shadow 文件破解

在Linux系统安全评估中,获取并破解影子文件是常见需求。

  1. 获取文件:你需要目标系统的 /etc/passwd 文件(例如你将其保存为 local_passwd)和 /etc/shadow 文件(例如 local_shadow)。
  2. 整合文件:使用 unshadow 工具将两个文件合并为一个John能直接识别的格式:
    unshadow local_passwd local_shadow > unshadowed.txt
  3. 执行破解:对生成的文件使用自动模式进行破解:
    john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt

(三)压缩文件(ZIP/RAR)与 SSH 文件破解

对于受密码保护的压缩包或SSH私钥,John并非直接处理原文件,而是先提取其中的哈希。

  1. 转换哈希:使用John配套的转换工具,将目标文件转换为哈希字符串。
    • ZIP文件
      zip2john test.zip > zip_hash.txt
    • RAR文件和SSH私钥文件分别使用 rar2johnssh2john 命令,流程完全一致。
  2. 常规破解:得到哈希文件后,就可以像处理基础哈希一样进行破解了:
    john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt

四、自定义破解规则(John.conf)

当默认的字典攻击无法满足需求时,可以通过编写自定义规则来生成更符合特定习惯的密码变体,这极大地提升了密码破解的针对性和成功率。

  1. 配置文件路径/etc/john/john.conf。所有自定义规则都在此文件中定义。
  2. 规则编写规范
    • 规则定义:以 [List.Rules:规则名] 开始一个新规则块,例如 [List.Rules:PoloPassword]
    • 核心语法:规则由一系列指令组合而成。
语法 功能描述
Az 在单词末尾附加指定字符/字符集
A0 在单词开头前缀指定字符/字符集
c 将单词首字母大写
*   **常用字符集**:
字符集 包含内容
[0-9] 数字 0-9
[A-Z] 大写英文字母 A-Z
[a-z] 小写英文字母 a-z
[!£$%@] 特殊符号 !、£、$、%、@
  1. 规则示例:假设你想匹配类似 Polopassword1! 这样的密码(首字母大写,末尾跟数字和特殊符号)。你可以在 john.conf 中添加如下规则:
    [List.Rules:PoloPassword]
    cAz"[0-9][!£$%@]"

    这条规则的含义是:对字典中的每个单词,先应用 c(首字母大写),然后应用 Az 在末尾附加 [0-9][!£$%@] 这个字符集组合(即一个数字加一个指定特殊符号)。

  2. 使用自定义规则:在破解命令中通过 --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文件中的密码哈希?请简述完整步骤及关键命令。

答案
完整破解步骤如下:

  1. 文件获取:通过一定手段获取目标Linux系统中的 /etc/passwd 文件(保存为如 local_passwd)和 /etc/shadow 文件(保存为如 local_shadow)。
  2. 文件整合:使用 unshadow 命令将两个文件合并,生成John可直接读取的格式:
    unshadow local_passwd local_shadow > unshadowed.txt
  3. 执行破解:使用John,搭配强大的密码字典(如rockyou.txt)对整合后的文件发起攻击:
    john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
  4. 查看结果:破解完成后,运行 john --show unshadowed.txt 即可查看已被破解出的用户名和明文密码。

问题3:如何在John the Ripper中编写自定义破解规则?请举例说明规则语法及使用方法。

答案
编写和使用自定义规则的步骤如下:

  1. 编辑配置文件:使用文本编辑器打开 /etc/john/john.conf
  2. 定义规则块:在文件合适位置(如其他 [List.Rules] 区块附近)添加你的规则。例如,定义一个名为 MyRule 的规则,为每个密码尝试末尾添加两位数字:
    [List.Rules:MyRule]
    Az"[0-9]"
    Az"[0-9]"

    (注意:这里写了两行 Az"[0-9]" 来实现添加两个独立数字,而不是一个两位数。更复杂的组合需要更详细的规则语法。)

  3. 保存文件
  4. 调用规则:在破解命令中通过 --rule 参数指定你的规则名:
    john --wordlist=/usr/share/wordlists/rockyou.txt --rule=MyRule hash.txt

核心语法点Az 表示“追加”,[0-9] 是数字字符集。规则按行顺序执行,可以组合 c(首字母大写)、A0(前缀)等多种指令来模拟复杂的密码策略。想深入学习更多规则语法,可以参考John的官方文档或在云栈社区运维 & 测试及安全板块与同行交流。




上一篇:MCP 真的“死”了吗?从 Perplexity 弃用到开发者应对策略
下一篇:Kiro使用技巧:6个实用功能帮你提升编码效率,每天少按50次确认键
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-14 08:14 , Processed in 0.443396 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表