使用 John the Ripper 破解 ZIP 密码

HydraHydraBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习使用 John the Ripper(一款用于渗透测试的重要网络安全工具)来破解受密码保护的 ZIP 文件。你将练习从 ZIP 文件中提取哈希值,并执行字典攻击和暴力攻击以恢复密码。

本实验将让你亲身体验安装 John the Ripper、创建使用弱密码的测试文件,以及验证已破解的凭证。通过这个练习,你将了解弱密码的漏洞以及强加密在文件安全中的重要性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") wireshark/WiresharkGroup -.-> wireshark/installation("Installation and Setup") hydra/HydraGroup -.-> hydra/installation("Installation and Setup") subgraph Lab Skills nmap/installation -.-> lab-549930{{"使用 John the Ripper 破解 ZIP 密码"}} wireshark/installation -.-> lab-549930{{"使用 John the Ripper 破解 ZIP 密码"}} hydra/installation -.-> lab-549930{{"使用 John the Ripper 破解 ZIP 密码"}} end

安装 John the Ripper

在这一步中,你将安装 John the Ripper,这是一款在网络安全领域广泛使用的强大密码破解工具。在开始之前,让我们先了解一下 John the Ripper 的作用:它通过尝试不同的组合(暴力攻击)或使用单词列表(字典攻击)来猜测密码,帮助安全专业人员测试密码强度。

LabEx 虚拟机 (VM) 环境已经预先配置了所有必需的依赖项,这使得安装过程变得简单直接。我们将使用 Ubuntu 的软件包管理器 (apt) 来处理软件的安装和更新。

  1. 首先,我们需要更新软件包列表。这可以确保你的系统了解所有软件的最新可用版本:

    sudo apt update

    sudo 命令会赋予你管理员权限,而 apt update 则会刷新可用软件包的列表。

  2. 现在,使用以下命令安装 John the Ripper:

    sudo apt install john -y

    -y 标志会自动确认安装,这样你就无需在安装过程中输入 'yes'。

  3. 安装完成后,让我们通过检查已安装的版本来验证一切是否正常工作:

    john --version

    你应该会看到类似于以下的输出:

    John the Ripper 1.9.0-jumbo-1

这个版本检查确认了 John the Ripper 已可以使用。在接下来的步骤中,我们将使用这个工具来演示受密码保护的 ZIP 文件是如何容易受到破解尝试的攻击的。在继续下一步之前,请确保你看到了版本号,因为这表明安装成功。

创建受密码保护的 ZIP 文件

在这一步中,你将创建一个受密码保护的 ZIP 文件,后续我们会用它来练习密码破解。ZIP 是一种常见的存档格式,支持使用密码保护敏感文件。了解如何创建受保护的 ZIP 文件非常重要,因为在现实世界中,许多系统都使用这种方法来保障文件安全。

  1. 首先,让我们创建一个用于保护的示例文本文件。为了便于演示,我们将使用一个简单的文本文件:

    echo "This is a secret file" > secret.txt

    此命令创建了一个名为 secret.txt 的新文件,其中包含文本 "This is a secret file"。> 符号将 echo 命令的输出重定向到文件中。

  2. 现在,我们将使用 zip 实用程序创建一个受密码保护的 ZIP 文件。-e 标志用于启用加密。为了学习方便,我们使用 "password123" 作为示例密码(请注意,这是一个弱密码,在实际场景中切勿使用):

    zip -e secret.zip secret.txt

    该命令会提示你输入并验证密码两次。这种双重输入方式有助于避免输入密码时出现拼写错误:

    Enter password:
    Verify password:
  3. 让我们验证 ZIP 文件是否成功创建。ls -l 命令会显示当前目录中文件的详细信息:

    ls -l secret.zip

    你应该会看到类似以下的输出,显示文件存在及其大小和时间戳:

    -rw-r--r-- 1 labex labex 210 May 10 10:00 secret.zip
  4. 最后,让我们通过在不提供密码的情况下尝试提取文件来测试密码保护功能。这将确认我们的 ZIP 文件已得到妥善保护:

    unzip secret.zip

    如果你输入错误的密码或取消操作,系统应该会提示输入密码并显示错误信息。

这个受保护的 ZIP 文件将作为我们下一步的测试用例,我们将提取其哈希值,并使用 John the Ripper 尝试破解密码。自己创建这个测试文件有助于你理解安全过程的两个方面——如何应用保护以及如何对其进行测试。

提取 ZIP 文件的哈希值

在这一步中,你将从我们之前创建的受密码保护的 ZIP 文件中提取加密哈希值。这个过程会将 ZIP 文件的安全信息转换为 John the Ripper 能够理解和处理的格式,以便进行密码破解。

  1. 首先,让我们导航到工作目录并验证 ZIP 文件是否存在。这可以确保我们在正确的位置处理正确的文件:

    cd ~/project
    ls secret.zip
  2. 现在,我们将使用 John the Ripper 的专用工具 zip2john。这个工具可以从 ZIP 文件中提取密码哈希值,并将其转换为 John 能够破解的格式。> 符号将输出重定向到一个新文件:

    zip2john secret.zip > zip_hash.txt
  3. 让我们查看提取的哈希值,以了解捕获了哪些信息。cat 命令会在终端中显示文件内容:

    cat zip_hash.txt

    你应该会看到类似于以下示例的输出(实际的哈希值会有所不同):

    secret.zip:$pkzip$1*2*2*0*1c*1a*5e9b8f7d*0*42*0*1c*5e9b*55dc*secret.txt*$/pkzip$
  4. 这个哈希值包含几个重要的组成部分:

    • secret.zip:原始 ZIP 文件的文件名
    • $pkzip$:标识这是一个 PKZIP 格式的哈希值
    • 一长串数字和字母:实际的加密密码数据
    • secret.txt:ZIP 存档内的文件名

这个提取的哈希值文件现在包含了 ZIP 文件密码保护的所有必要信息,并且其格式是专门为 John the Ripper 处理而设计的。在下一步中,我们将使用这个哈希值文件,通过各种破解方法尝试恢复密码。

运行 John 进行破解

在这一步中,你将使用 John the Ripper 尝试破解我们之前加密的 ZIP 文件的密码。John 是一款强大的密码破解工具,它通过对我们提取的哈希值尝试不同的密码组合来工作。哈希值就像是密码的数字指纹,John 可以对其进行分析,而无需原始的 ZIP 文件。

  1. 首先,确保你位于包含哈希文件的正确目录中。这很重要,因为 John 需要访问我们在上一步中创建的哈希文件:

    cd ~/project
    ls zip_hash.txt

    ls 命令只是列出文件,以确认 zip_hash.txt 存在于当前目录中。

  2. 现在,由于我们处理的是 ZIP 文件,我们将指定 PKZIP 格式来运行 John the Ripper。--format=PKZIP 标志告诉 John 预期的加密类型:

    john --format=PKZIP zip_hash.txt
  3. John 在尝试不同的密码组合时会显示实时进度。在我们的例子中,由于我们使用了一个弱密码("password123"),破解过程应该几乎会立即完成。以下是成功破解后的输出示例:

    Loaded 1 password hash (PKZIP [32/64])
    Will run 2 OpenMP threads
    Press 'q' or Ctrl-C to abort, almost any other key for status
    password123      (secret.zip)
    1g 0:00:00:00 DONE (2023-05-10 10:00) 50.00g/s 50.00p/s 50.00c/s 50.00C/s password123
    Use the "--show" option to display all of the cracked passwords reliably
    Session completed

    "1g" 表示 John 尝试了 1 次猜测,"password123" 就是破解出的密码。

  4. 为了以清晰的格式查看破解出的密码,我们使用 --show 选项。此命令会显示哈希文件中所有成功破解的密码:

    john --show zip_hash.txt

    你会看到类似以下的输出:

    secret.zip:password123:secret.txt:secret.zip

    这个输出显示了由冒号分隔的四部分信息:ZIP 文件名、破解出的密码、存档中包含的文件以及存档名称。

现在我们已经得到了密码,下一步可以继续验证它是否真的能用于我们的原始 ZIP 文件。这种验证至关重要,因为它可以确认我们的破解过程是成功的。

确认密码

在这最后一步,你将验证 John the Ripper 破解出的密码是否真的能用于提取受保护的 ZIP 文件。在实际的安全评估中,这一确认步骤对于验证破解结果至关重要。这就好比你找到了一把钥匙,需要实际去尝试开锁,才能确认它是否有效。

  1. 首先,让我们查看上一步中破解出的密码。以下命令会显示 John 成功破解的密码:

    john --show zip_hash.txt

    你应该会看到类似以下的输出,显示文件名、破解出的密码和文件内容:

    secret.zip:password123:secret.txt:secret.zip
  2. 现在,我们将通过尝试提取 ZIP 文件来测试这个密码是否真的有效。unzip 命令是 Linux 中用于提取 ZIP 存档的标准工具:

    unzip secret.zip

    系统会提示你输入密码。输入 "password123"(我们刚刚破解出的密码):

    Archive:  secret.zip
    [secret.zip] secret.txt password:
  3. 输入正确的密码后,我们需要验证两件事:文件是否已被提取,以及其内容是否符合我们的预期。以下命令会列出目录中的文件并显示机密文件的内容:

    ls
    cat secret.txt

    你应该会看到以下内容,确认提取成功:

    This is a secret file
  4. 最后,完成测试后清理提取的文件是个好习惯。这可以保持工作空间整洁,并防止在未来的练习中意外复用测试文件:

    rm secret.txt

这次成功提取确认了 John the Ripper 正确破解了 ZIP 文件的密码。在实际的安全评估中,在报告结果之前进行这一验证步骤是必不可少的。它证明了破解出的密码并非只是理论上的匹配,而是确实能够访问受保护的内容。

总结

在本次实验中,你学习了如何通过 apt 包管理器安装 John the Ripper 并验证其是否成功安装。你还练习了使用一个示例文本文档创建一个受密码保护的 ZIP 文件,以模拟现实世界中的密码破解场景。

本练习通过展示如何准备用于密码破解的目标文件,介绍了基本的网络安全评估技术。这些初始步骤,包括工具安装和安全验证,为高级密码恢复操作奠定了重要基础。