破解密码保护的 ZIP 压缩包

Kali LinuxBeginner
立即练习

引言

在本实验中,你将学习破解密码保护的 ZIP 压缩包的基本流程。这是数字取证和渗透测试中的一项常见任务。你将结合使用 Linux 中可用的命令行工具来完成此操作。该过程包括创建一个受保护的示例文件,提取其密码哈希(password hash),然后使用强大的密码恢复工具 Hashcat 来破解哈希并揭示原始密码。

完成本实验后,你将熟悉:

  • 创建加密的 ZIP 文件。
  • 使用 zip2john 提取密码哈希。
  • 为 Hashcat 准备哈希。
  • 使用 Hashcat 运行字典攻击(dictionary attack)来恢复密码。

创建密码保护的 ZIP 文件

在此步骤中,你将创建一个密码保护的 ZIP 文件。这将作为我们破解密码练习的目标。我们将使用标准的 zip 命令和 -e 选项,该选项代表“加密”(encrypt)。

首先,请确保你位于 ~/project 目录中。在设置过程中,我们已经为你创建了一个名为 secret.txt 的文件。

现在,运行以下命令,从 secret.txt 文件创建一个名为 secret.zip 的加密 ZIP 压缩包。

zip -e secret.zip secret.txt

系统将提示你输入并验证密码。在本实验中,请使用密码 labex。输入 labex,按 Enter,然后再次输入以进行验证。

Enter password:
Verify password:
  adding: secret.txt (stored 0%)

命令完成后,你可以使用 ls 命令来验证 secret.zip 文件是否已在当前目录中创建。

ls -l

你应该会在输出中看到 secret.zip

-rw-r--r-- 1 labex labex  218 May 20 10:00 secret.zip
-rw-r--r-- 1 labex labex   23 May 20 10:00 secret.txt
-rw-r--r-- 1 labex labex   32 May 20 10:00 wordlist.txt

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

在此步骤中,你将使用 zip2john 工具从 secret.zip 文件中提取密码哈希。像 Hashcat 这样的密码破解工具不能直接处理加密文件;它们处理的是文件的哈希。zip2john 是 John the Ripper 套件中的一个工具,专门为此目的而设计。

运行以下命令来处理 secret.zip,并将生成的哈希保存到一个名为 zip_hash.txt 的新文件中。

zip2john secret.zip > zip_hash.txt

此命令不会直接输出到终端,因为我们已将其重定向到 zip_hash.txt 文件。要查看提取的哈希,你可以使用 cat 命令显示新文件的内容。

cat zip_hash.txt

输出将与以下内容类似。这个字符串包含了破解密码所需的所有信息。

secret.zip:$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$

将哈希格式化以兼容 Hashcat

在此步骤中,你将格式化提取的哈希,使其与 Hashcat 兼容。zip2john 的输出包含原始文件名(secret.zip:)作为哈希字符串的前缀。Hashcat 只需纯哈希数据。

让我们再次查看 zip_hash.txt 的内容:
secret.zip:$pkzip2$1*1*2*0*8*24*...

我们需要移除 secret.zip: 部分。一种简单的方法是使用 cut 命令,它可以根据分隔符分割文本。我们将使用冒号(:)作为分隔符,并选择第二个字段。

执行以下命令来提取哈希,并将其保存到一个名为 hashcat_ready.txt 的新文件中。

cut -d':' -f2 zip_hash.txt > hashcat_ready.txt
  • cut: 用于截取行部分的命令。
  • -d':': 指定分隔符为冒号。
  • -f2: 指定我们想要第二个字段。

现在,查看新文件的内容,以确认它只包含哈希。

cat hashcat_ready.txt

输出应该是没有文件名前缀的哈希字符串。

$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$

此文件现在已准备好与 Hashcat 一起使用。

为 PKZIP 选择正确的 Hashcat 模式

在此步骤中,你将学习如何识别 Hashcat 的正确哈希模式。Hashcat 支持破解数百种不同的哈希类型,你必须使用模式编号来指定你提供的哈希类型。

我们提取的哈希以 $pkzip2$ 开头。这表明了所使用的 ZIP 加密类型。我们可以在 Hashcat 的帮助文档中搜索与“PKZIP”相关的模式,以找到正确的编号。

使用以下命令在 Hashcat 的帮助输出中搜索“pkzip”。

hashcat --help | grep -i "pkzip"

输出将列出几种与不同版本 PKZIP 加密相关的哈希模式。

17200 | PKZIP (legacy)                                       | Archives
17210 | PKZIP (legacy) (Compressed)                            | Archives
17220 | PKZIP (legacy) (Mixed)                                 | Archives
17225 | PKZIP (legacy) (Mixed + Compressed)                    | Archives
20500 | PKZIP Master Key                                       | Archives
20510 | PKZIP Master Key (Compressed)                          | Archives

我们的哈希是由一个简单的密码保护的 ZIP 生成的,对应于“PKZIP (legacy)”类型。从输出中可以看到,此模式的编号是 17200。在下一步启动攻击时,我们将使用此模式。

发起攻击以恢复 ZIP 密码

在此步骤中,你将使用 Hashcat 发起密码破解攻击。我们将执行“直连”(straight)或字典攻击,即 Hashcat 会尝试使用给定列表中的每个密码。我们已经准备了一个名为 wordlist.txt 的简单列表。

Hashcat 的命令结构如下:
hashcat [options] <hash_file> <wordlist_file>

根据我们之前的步骤,完整命令是:

hashcat -m 17200 -a 0 hashcat_ready.txt wordlist.txt

让我们分解一下这个命令:

  • -m 17200: 指定 PKZIP (legacy) 的哈希模式,这是我们在上一步中确定的。
  • -a 0: 指定攻击模式。0 代表直连(字典)攻击。
  • hashcat_ready.txt: 包含目标哈希的文件。
  • wordlist.txt: 包含潜在密码列表的文件。

执行该命令。Hashcat 将启动,初始化其后端,并开始攻击。

hashcat (v6.2.6) starting

...

Session..........: hashcat
Status...........: Cracked
Hash.Name........: PKZIP (legacy)
Hash.Target......: $pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   248.2 kH/s (0.10ms) @ Accel:128 Loops:128 Thr:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex -> zzzzzzz
Hardware.Mon.#1..: Temp: 48c

$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$:labex

Started: ...
Stopped: ...

由于我们的字典很小,Hashcat 非常快速地找到了密码。输出的最后一行显示了哈希以及恢复的密码:labex

恭喜你,你已成功破解了 ZIP 压缩包的密码!

总结

在本实验中,你已成功完成了使用常用命令行工具破解密码保护的 ZIP 压缩包的整个工作流程。

你已学会如何:

  1. 使用 zip 命令创建一个加密的 ZIP 文件。
  2. 使用 zip2john 从 ZIP 文件中提取密码哈希。
  3. 格式化提取的哈希,使其与 Hashcat 兼容。
  4. Hashcat 中识别目标文件的正确哈希类型模式。
  5. 使用 Hashcat 发起字典攻击,成功恢复密码。

这些技能构成了密码恢复技术的基础理解,这在数字取证和道德黑客等网络安全领域至关重要。虽然我们为了教学目的使用了简单的密码和小型字典,但相同的原理也适用于更复杂、更真实的场景。