15

我正在捕获标志样本,他们给了我文件的哈希值。我通过John The Ripper运行它并获得了样本的密码。

问题是,哈希是给我的。如果没有给出该文件的哈希值,有没有办法找到它?

破解密码需要解决两点:哈希和加密算法。

我一直在练习使用受密码保护的 zip 文件,所以我认为它使用的是 zip 2.0 或其他东西或某种 AES,我可以在 Google 的帮助下解决这个问题。

但是,我无法找到的是如何访问该散列数据的 zip 文件的元数据。由于它是一个标准,因此在存储密码时,压缩某些东西不需要在其中包含算法。但是,需要有某种类型的哈希。

有谁知道,通过这个受密码保护的 zip 文件示例,这是如何完成的?

我现在正在使用 MacBook Pro。

4

4 回答 4

16

密码哈希不会从文件中提取。开膛手约翰 (JtR)并没有真正做到这一点。您可以下载 JtR 的代码以了解它是如何完成的。这是一篇关于如何使用 zip2john 和 rar2john 获取 .zip 和 .rar 文件的所谓“非哈希”信息的小文章:http ://www.cybercrimetech.com/2014/07/how-to-cracking- zip-and-rar-protected.html

为了纠正用词不当,JtR 实际上并没有从文件中“检索散列”。它从文件中提取某些信息,例如,如 rar2john 代码中所述:

输出行格式:
 *
 * 对于使用“rar -hp ...”选项加密的文件,type = 0
 * archive_name:$RAR3$\*type\*hex(salt)\*hex(partial-file-contents):type::
       ::档案名称
 *
 * 对于使用“rar -p ...”选项加密的文件,type = 1
 * archive_name:$RAR3$\*type\*hex(salt)\*hex(crc)\*PACK_SIZE\*UNP_SIZE\*0\*
       archive_name\*offset-for-ciphertext\*method:type::file_name
 *
 * 或者
 *
 * 存档名称:$RAR3$\*type\*hex(salt)\*hex(crc)\*PACK_SIZE\*UNP_SIZE\*1\*
       十六进制(完整加密文件)\*方法:类型::文件名

因此,如上所示,“密码哈希”没有被提取。此外,完全不相信该文件是“完全”加密的(正如其他回答类似问题的人所建议的那样)。取而代之的是,检索关键的未加密和加密文件项(例如盐)以生成“非散列”。JtR 使用这些项目和各种密码猜测来测试解密。它使用 zip 或 rar 密码散列生成函数从猜测中创建散列,该散列又用于生成加密密钥值。然后使用生成的密钥值对加密文件的一小部分、提取的和明确定义的部分进行测试。

因此,虽然 JtR 不是“提取密码哈希”,可以发送到任何 ol'password-hash-checker-rainbow-table-lookup-thingy,但它正在做下一件最好的事情——提取关键的破解信息。破解的步骤基本上是:1)从密码猜测中生成哈希,2)添加一些额外的步骤来检查解密是成功还是失败(很多失败),以及 3)重复。rar 破解如此困难的原因是每个 rar 文件使用不同的盐,更重要的是,在执行解密测试之前需要大量且可变的哈希迭代次数。较新的 zip 过程类似,但迭代不是可变的——我上次检查过——使它更容易一些。

这是所问的“如何完成”的核心,答案是“你没有”在文件被破解之前获取一个 zip 文件的真实密码哈希。

该问题的 CTF 练习中的示例具有误导性。给定的“散列”可能是为练习准备的简单密码散列,以简化任何 ol' 破解者对学生的破解过程,或者它可能是特定的 zip2john“非散列”,导致相当简单的密码JtR 猜测 - 短,常见,或两者兼而有之。提问者没有提供“哈希”或“哈希文件”来验证任何一种方式。

于 2015-03-21T04:59:01.070 回答
4

为什么需要一个哈希?压缩文件被压缩然后加密。这不需要在文件中存储哈希,因为它不是在进行身份验证,而是在解密。唯一可能存储在文件中的是盐,具体取决于所使用的加密。

于 2013-03-15T22:01:57.963 回答
3

尽管我不确定它是如何完成的,但开膛手约翰(JtR) 有一个小可执行文件 (zip2john),它可以从 zip 文件中创建散列。由于代码是开放的,您可以看看它是如何提取的。当然,这是假设文件是​​使用 PKZIP 加密加密的(例如,它不适用于 WinRar 创建的文件)。

我在使用 7zip 压缩的简单文件上进行了尝试,其中使用了简单的密码,并且配备了不错的 wordlist 的 JtR 在 ms 内破解了它。这里(可选)免费给出的单词表起到了作用。

干杯

于 2014-03-03T09:13:37.857 回答
1

John The Ripper 的主要开发人员之一阐明了破解档案密码的工作原理,特别是 pkzip2 档案。

这是我的询问和他们在JtR 邮件列表上的回复:

在 2021-06-03 10:28,Matthias Braun 写道:

在阅读了源文件(https://github.com/openwall/john/blob/bleeding-jumbo/src/zip2john.c)中对 zip2john 输出的描述后,这是我目前的假设:因为存档不包含用于加密的密码的哈希值,默认情况下,JtR 尝试使用一个单词列表来解密 zip2john 输出中 DA 位置存储的数据,对结果运行 CRC32 并将该校验和与存储在 CR 位置的校验和进行比较。

但是在破解大文件密码的情况下,我预计解密需要相当长的时间,这使得每个密码的猜测成本很高。

你基本上是对的。

JtR如何破解pkzip2压缩包?

首先,zip2john 只是简单地从存档中挑选最小的文件,以最大限度地减少工作量。有时虽然没有小文件。

第二个技巧:pkzip 档案还包括每个文件的一小部分打包数据的另一个较小的校验和(仅 1 或 2 个字节)。如果不匹配,我们可以提前拒绝。但是如果它确实匹配(不幸的是,单字节校验和将在大约 256 例中的 1 例中随机匹配)我们必须对整个(可能很大)文件进行校验和。

所以我们的第三个技巧是我们收集几个这样小的校验和(最多 8 个文件),并在继续计算整个文件的 CRC 之前要求它们全部匹配。如果文件数量较少,我们最终可能会少于 8 个。附带说明一下,理论上,一个存档中的文件可能使用不同的密码,这会使这个技巧无效(实际上我们可能会得到误报)。这是相当少见的,所以默认情况下我们假设所有人都有相同的密码。

所以对我们来说最好的情况是一个包含 8 个或更多文件的存档,以及至少一个小文件。最坏的情况是存档只有一个巨大的文件。

大酒瓶

于 2021-06-04T16:31:01.887 回答