引言
在本实验中,你将学习破解密码保护的 7z 压缩文件的基本流程。7-Zip 是一款流行的文件压缩工具,具有高压缩率,并允许用户使用密码加密压缩文件。我们将模拟一个你需要恢复忘记密码的场景。
你将使用一系列强大的、行业标准的工具:p7zip 来创建压缩文件,John the Ripper 套件来提取密码哈希(hash),以及 Hashcat 来执行实际的破解。这次实践将指导你创建目标、提取其加密哈希,并使用掩码攻击(mask attack)来高效地找到密码。
在本实验中,你将学习破解密码保护的 7z 压缩文件的基本流程。7-Zip 是一款流行的文件压缩工具,具有高压缩率,并允许用户使用密码加密压缩文件。我们将模拟一个你需要恢复忘记密码的场景。
你将使用一系列强大的、行业标准的工具:p7zip 来创建压缩文件,John the Ripper 套件来提取密码哈希(hash),以及 Hashcat 来执行实际的破解。这次实践将指导你创建目标、提取其加密哈希,并使用掩码攻击(mask attack)来高效地找到密码。
在本步骤中,我们将首先创建一个示例文件,然后将其压缩成一个密码保护的 7z 压缩文件。该压缩文件将是我们后续步骤中进行密码破解过程的目标。
首先,在你的当前目录 ~/project 中创建一个名为 secret.txt 的简单文本文件。
echo "This is a secret file." > secret.txt
现在,我们将使用 7z 命令从 secret.txt 创建一个名为 secret.7z 的压缩文件。我们将使用密码 LabEx2024 来保护它。-p 标志用于直接指定密码。
7z a -pLabEx2024 secret.7z secret.txt
你应该会看到输出表明文件已成功创建和压缩。
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs LE)
Scanning the drive:
1 file, 25 bytes (1 KiB)
Creating archive: secret.7z
Items to compress: 1
Files read from disk: 1
Archive size: 228 bytes (1 KiB)
Everything is Ok
你现在已经成功创建了我们将要使用的密码保护的压缩文件。
在本步骤中,你将从 secret.7z 压缩文件中提取密码哈希。像 Hashcat 这样的密码破解工具不能直接处理压缩文件;它们需要密码加密密钥的特定字符串表示形式,这被称为哈希。
我们将使用 7z2john,它是 John the Ripper 套件中的一个实用工具,专门用于从 7z 压缩文件中提取这些哈希。
运行以下命令来处理 secret.7z 并将其哈希保存到一个名为 hash.txt 的新文件中。> 符号将命令的输出重定向到指定的文件。
/usr/sbin/7z2john secret.7z > hash.txt
由于输出已被重定向,该命令在终端中不会产生任何可见输出。要确认哈希已提取,请查看 hash.txt 的内容:
cat hash.txt
输出将是一个长字符串,这就是代表密码的哈希。它将以文件名作为前缀。
secret.7z:$7z$2$19$0$$8$d251a688873348860000000000000000$1813433382$112$96$f2172032148f1959a258c28b51933a3c8a00c1781343782d44114a2f311e1ca854028b8243b16a1f5e5811652c546412f213f7a361152b3811443a38c45a3301
你现在已经准备好了哈希,可以进行下一步的准备工作了。
在本步骤中,我们需要为 Hashcat 准备提取的哈希。7z2john 的输出格式是为 John the Ripper 设计的,并且包含文件名作为前缀(例如 secret.7z:)。然而,Hashcat 需要纯哈希字符串才能正确工作。
我们将使用 cut 命令来移除文件名前缀。cut 命令是一个用于从文件行中提取部分的简单实用工具。我们将告诉它使用冒号(:)作为分隔符,并选择第二个字段。
执行以下命令来清理哈希并将其保存到一个新文件 hashcat.txt 中:
cut -d':' -f2 hash.txt > hashcat.txt
-d':' 将分隔符设置为冒号。-f2 在分割后选择第二个字段。让我们验证一下新文件的内容,以确保前缀已被移除。
cat hashcat.txt
输出现在应该只包含哈希字符串,而没有 secret.7z: 部分。
$7z$2$19$0$$8$d251a688873348860000000000000000$1813433382$112$96$f2172032148f1959a258c28b51933a3c8a00c1781343782d44114a2f311e1ca854028b8243b16a1f5e5811652c546412f213f7a361152b3811443a38c45a3301
哈希现在已采用 Hashcat 所需的正确格式。
在本步骤中,我们将确定 Hashcat 需要理解和处理我们的 7-Zip 哈希所需的正确“哈希模式”。Hashcat 支持数百种不同的哈希类型,每种都有一个唯一的数字代码。你必须指定正确的代码才能使 Hashcat 工作。
我们可以通过搜索 Hashcat 的帮助菜单来找到 7-Zip 的模式。我们将使用 grep 来过滤输出中包含“7-Zip”的项。
hashcat --help | grep -i "7-Zip"
grep 中的 -i 标志使搜索不区分大小写。输出将显示与 7-Zip 压缩文件关联的模式编号。
11600 | 7-Zip | Archives
从输出中可以看到,7-Zip 的哈希模式是 11600。在下一步运行破解攻击时,我们将使用这个数字。
在最后这个步骤中,我们将使用 Hashcat 来破解密码。我们将执行一次“掩码攻击”(mask attack),这是一种暴力破解攻击(brute-force attack)的类型,当你对密码的结构有所了解时,它会非常有效。
我们的密码是 LabEx2024。我们可以用一个掩码来描述它的结构:
?u)。?l?l)。?u?l)。?d?d?d?d)。完整的掩码是 ?u?l?l?u?l?d?d?d?d。
现在,让我们构建 Hashcat 命令:
-m 11600: 指定我们在上一步找到的 7-Zip 哈希模式。-a 3: 将攻击模式设置为“暴力破解 / 掩码”(Brute-force / Mask)。hashcat.txt: 包含干净哈希的文件。?u?l?l?u?l?d?d?d?d: 密码掩码。运行命令开始攻击:
hashcat -m 11600 -a 3 hashcat.txt ?u?l?l?u?l?d?d?d?d
Hashcat 将会启动,你将看到它的状态屏幕。由于密码很简单且掩码精确,它应该会很快被破解。
...
Session..........: hashcat
Status...........: Cracked
...
当状态显示为 Cracked 时,密码已被找到。要查看恢复的密码,你可以使用 --show 标志和相同的命令:
hashcat -m 11600 hashcat.txt --show
这将显示哈希以及被破解的密码。
$7z$2$19$0$$8$d251a688873348860000000000000000$1813433382$112$96$f2172032148f1959a258c28b51933a3c8a00c1781343782d44114a2f311e1ca854028b8243b16a1f5e5811652c546412f213f7a361152b3811443a38c45a3301:LabEx2024
恭喜!你已成功破解了 7z 压缩文件的密码。
在本实验中,你已成功完成了破解密码保护的 7z 压缩文件的完整流程。
你学会了如何:
7z 命令创建一个密码保护的 7z 压缩文件。7z2john 工具从压缩文件中提取密码哈希。这个工作流程为你打下了坚实的基础,帮助你理解密码破解的原理以及 John the Ripper 和 Hashcat 等强大工具的实际应用。