引言
在本实验中,你将获得针对 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.zip 和 secret.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 加密。通过应用所讨论的最佳实践,你可以确保你的敏感数据受到强大加密标准的保护。


