使用 John the Ripper 破解 ZIP 压缩包

Kali LinuxBeginner
立即练习

引言

在本实验中,你将获得针对 ZIP 压缩包的密码破解技术实践经验。你将使用强大的开源密码破解工具 John the Ripper,并结合 zip2john 工具,后者可以将 ZIP 文件转换为 John the Ripper 可识别的哈希格式。本实验将指导你创建受密码保护的 ZIP 文件,提取其哈希,然后尝试破解。此外,你还将了解旧版 ZIP 加密方法的固有弱点,并发现更安全的替代方案来保护你的敏感数据。

创建一个受密码保护的 ZIP 文件

在此步骤中,你将创建一个简单的文本文件,然后将其压缩成一个受密码保护的 ZIP 压缩包。这个 ZIP 文件将作为我们后续破解尝试的目标。为了演示目的,我们将使用一个简单且易于猜测的密码。

首先,请确保你位于主目录的 project 文件夹中。

cd ~/project

现在,创建一个名为 secret.txt 的文件,并包含一些内容。

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

接下来,创建一个名为 archive.zip 的受密码保护的 ZIP 压缩包,其中包含 secret.txt。当提示输入密码时,请输入 password123

zip -e archive.zip secret.txt

你将被提示输入密码:

Enter password:
Verify password:
  adding: secret.txt (deflated 29%)

你可以通过列出当前目录的内容来验证 ZIP 文件的创建。

ls -l

你应该会看到 archive.zipsecret.txt 被列出。

使用 zip2john 从 ZIP 文件中提取哈希

在此步骤中,你将使用 zip2john 工具从 archive.zip 文件中提取密码哈希。这个哈希是密码的一种表示形式,John the Ripper 可以使用它来尝试破解原始密码。

首先,请确保你位于 ~/project 目录中。

cd ~/project

现在,在 archive.zip 上运行 zip2john,并将输出重定向到一个名为 zip_hash.txt 的文件。

zip2john archive.zip > zip_hash.txt

此命令将提取哈希并将其保存到 zip_hash.txt 中。zip2john 的输出通常如下所示(实际哈希值会有所不同):

archive.zip:$zip$*0*1*0*...*secret.txt*$/zip$

你可以查看 zip_hash.txt 文件的内容来确认哈希已被提取。

cat zip_hash.txt

输出应显示提取的哈希字符串。

使用 John the Ripper 破解 ZIP 哈希

现在你已经提取了哈希,你将使用 John the Ripper 来尝试破解密码。在本演示中,我们将使用一个简单的单词列表(wordlist),其中包含了我们之前设置的密码。

首先,请确保你位于 ~/project 目录中。

cd ~/project

John the Ripper 通常使用单词列表来尝试常见的密码。对于这个实验,我们将创建一个小的自定义单词列表,其中包含我们的目标密码。

echo -e "test\npassword\n123456\npassword123\nadmin" > wordlist.txt

现在,使用 zip_hash.txt 文件和 wordlist.txt 运行 John the Ripper。

john --wordlist=wordlist.txt zip_hash.txt

John the Ripper 将处理哈希和单词列表。如果成功,它将显示破解的密码。输出将类似于:

Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (archive.zip)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123

你也可以通过运行以下命令来查看 John 找到的已破解密码:

john --show zip_hash.txt

此命令将显示 John the Ripper 已成功破解并存储在其内部 pot 文件中的任何密码。

archive.zip:password123

1 password hash cracked, 0 left

理解 ZIP 加密弱点

在此步骤中,你将了解在先前步骤中使用的标准 ZIP 2.0 加密方法固有的弱点。理解这些弱点对于认识到为何需要更强的加密方法至关重要。

zip 命令使用的默认加密(通常称为“传统 PKZIP 加密”或“ZIP 2.0 加密”)被认为是不安全的。它使用一种专有算法,该算法容易受到各种攻击,包括已知明文攻击(known-plaintext attacks)和暴力破解攻击(brute-force attacks),尤其是在现代计算能力下。

主要弱点:

  • 专有算法: 该算法不像现代加密标准(例如 AES)那样经过公开审查。
  • 弱密钥派生: 密钥派生函数很简单,使得攻击者更容易猜测或暴力破解密码。
  • 已知明文攻击: 如果攻击者同时拥有加密的 ZIP 文件和其中至少一个文件的未加密版本(即使是很小的文件),他们通常可以非常快速地恢复加密密钥。这是一个重大的漏洞。
  • 有限的密钥空间: 对于较短的密码,有效的密钥空间很小,使得暴力破解攻击成为可能。

由于这些弱点,强烈建议不要对敏感数据使用标准的 ZIP 2.0 加密。即使是中等复杂度的密码,如果攻击者拥有足够的资源或已知明文,也可以相对快速地被破解。

此步骤不需要执行任何命令,但掌握这些概念对于安全数据处理非常重要。

有效地保护 ZIP 压缩包

鉴于传统 ZIP 加密的弱点,在保护敏感数据时使用更强大的方法至关重要。在此步骤中,你将学习并使用一种更健壮的加密标准:AES-256。

许多现代 zip 实现,包括 LabEx 虚拟机上安装的那个,都支持 AES 加密。在创建 ZIP 压缩包时,你可以指定加密方法。

要创建具有 AES-256 加密的 ZIP 压缩包,通常使用 -P 标志指定密码,并使用 -m 标志指定方法,或者依赖于默认的强加密(如果可用)。然而,zip 命令的 -e 标志通常默认使用较弱的 PKZIP 2.0 加密。对于像 AES-256 这样的更强加密,最好使用明确支持它的 7z (7-Zip) 或 WinRAR

由于 7z 是广泛使用的强压缩工具,让我们演示如何使用 7z 创建一个 AES-256 加密的压缩包。首先,安装 p7zip-full

sudo apt-get install -y p7zip-full

现在,为此演示创建一个新文件。

echo "This is a highly secret message." > super_secret.txt

接下来,创建一个名为 secure_archive.7z 的 7z 压缩包,并使用 AES-256 加密。在提示时,输入一个强密码(例如,StrongPassword!23)。

7z a -p secure_archive.7z super_secret.txt

你将被提示输入密码:

Enter password (will not be echoed):
Verify password (will not be echoed):

此命令默认使用 AES-256 加密创建一个 7z 压缩包,这比传统的 ZIP 2.0 加密安全得多。由于其强大的加密算法和密钥派生函数,7z 压缩包更难被破解。

你可以验证 7z 压缩包的创建。

ls -l

你应该会看到 secure_archive.7z 列出。

安全压缩包的最佳实践:

  • 使用强加密: 始终优先选择 AES-256 加密(例如,使用 7z 或明确支持 AES 的现代 zip 工具)。
  • 使用强密码: 结合使用大写和小写字母、数字和符号。目标长度至少为 12-16 个字符。
  • 避免已知明文: 不要将容易猜测或公开可用的文件包含在加密的压缩包中。
  • 定期更新工具: 确保你的压缩软件是最新的,以便受益于最新的安全补丁和改进。

通过遵循这些实践,你可以显著增强你的存档数据的安全性。

总结

在此实验中,你已成功学会如何创建带密码保护的 ZIP 压缩包,使用 zip2john 提取其哈希值,然后使用 John the Ripper 破解这些哈希值。这次实践操作展示了密码破解的过程,并突出了旧加密方法的漏洞。至关重要的是,你还了解了传统 ZIP 2.0 加密固有的弱点,并学习了更安全的替代方案,例如使用 7z 等工具进行 AES-256 加密。通过应用所讨论的最佳实践,你可以确保你的敏感数据受到强大加密标准的保护。