我正在做一个CTF样本,他们给了我文件哈希。我通过JtR运行它,我得到了我的密码样本。问题是,哈希给了我。有没有办法找到该文件的散列,如果它没有给出?
有两点需要解决才能击败密码。 HASH和加密算法。
我一直在练习使用密码保护的zip文件,所以我认为它使用的是zip 2.0或某种东西或某种AES,我可以借助谷歌来解决这个问题。
但是,我无法找到如何访问该哈希数据的zip文件的元数据。由于它是一个标准,压缩的东西不需要在存储密码时使用其中的算法。但是,需要某种哈希值。有没有人知道如何使用受密码保护的zip文件示例知道如何完成此操作?
我现在正在使用macbook pro
答案 0 :(得分:13)
从文件中提取密码哈希 。开膛手约翰(JtR)并不真的这样做。您可以下载JtR的代码来弄清楚它是如何完成的。这是一篇关于如何使用zip2john和rar2john获取.zip和.rar文件的所谓“非哈希”信息的小文章:http://www.cybercrimetech.com/2014/07/how-to-cracking-zip-and-rar-protected.html
为了纠正用词不当,JtR实际上并没有从文件中“检索哈希”。它从文件中提取某些信息,例如,如rar2john代码中所述:
Output Line Format: * * For type = 0 for files encrypted with "rar -hp ..." option * archive_name:$RAR3$\*type\*hex(salt)\*hex(partial-file-contents):type:: ::archive_name * * For type = 1 for files encrypted with "rar -p ..." option * archive_name:$RAR3$\*type\*hex(salt)\*hex(crc)\*PACK_SIZE\*UNP_SIZE\*0\* archive_name\*offset-for-ciphertext\*method:type::file_name * * or * * archive_name:$RAR3$\*type\*hex(salt)\*hex(crc)\*PACK_SIZE\*UNP_SIZE\*1\* hex(full encrypted file)\*method:type::file_name
因此,如上所示,不提取“密码哈希”。此外,完全没有认为该文件是“完全”加密的(正如其他人回答类似问题所建议的那样)。相反,检索关键的未加密和加密的文件项,例如salt,以生成“非哈希”。 JtR使用这些项目进行各种密码猜测来测试解密。它使用zip或rar密码哈希生成函数从guess 创建哈希,而又用于生成密钥值。然后使用生成的密钥值来测试加密文件的一个小的,提取的和明确定义的部分。
因此,虽然JtR不是“提取密码哈希”,可以发送到任何ol'password-hash-checker-rainbow-table-lookup-thingy,但它正在做下一个最好的事情 - 提取关键破解信息。破解的步骤主要是:1)从密码猜测生成哈希,2)添加一些额外的步骤来检查解密成功或失败(很多失败),以及3)重复。使rar破解如此困难的原因是每个rar文件都有不同的盐,更重要的是,在执行解密测试之前需要大量且可变数量的哈希迭代。较新的zip过程类似,但迭代不可变 - 最后我检查 - 使其更容易。
这是问题的“怎么做”的答案,答案是“你没有”获取zip文件的真实密码哈希,直到文件被破解为止。
问题的CTF练习的例子是误导性的。给定的“哈希”可能是为练习准备的一个简单的密码哈希,以简化学生的破解过程,或者它可能是一个特定的zip2john“非哈希”,导致一个相当简单的密码JtR猜测 - 短,普通或两者兼而有之。提问者没有提供“哈希”或“哈希文件”来验证这两种方式。
答案 1 :(得分:4)
为什么需要哈希?压缩后的压缩文件然后加密。这不需要在文件中存储哈希,因为它没有进行身份验证,而是在解密。可能存储在文件中的唯一内容是salt,具体取决于所使用的加密。
答案 2 :(得分:3)
即使我不确定它是如何完成的,John the Ripper(JtR)有一个可执行文件(zip2john),它可以创建一个zip文件的哈希值。由于代码是打开的,你可以看看它是如何被提取的。当然,这是假设文件是使用PKZIP加密加密的(因此它不适用于WinRar创建的文件)。
我尝试使用7zip压缩的简单文件,并使用简单的密码,JtR配备了一个像样的单词列表,用ms破解了它。 (可选)自由给出的单词列表here起到了作用。
干杯
答案 3 :(得分:0)
John The Ripper 的主要开发人员之一阐明了破解档案密码的工作原理,特别是 pkzip2 档案。
这是我的询问以及他们在 JtR mailing list 上的回复:
<块引用>在 2021-06-03 10:28,Matthias Braun 写道:
<块引用>在阅读源文件 (https://github.com/openwall/john/blob/bleeding-jumbo/src/zip2john.c) 中 zip2john 输出的描述后,这是我当前的假设:由于存档不包含用于加密的密码的哈希值,默认情况下,JtR 尝试使用wordlist 解密存储在 zip2john 输出中 DA 位置的数据,对结果运行 CRC32 并将该校验和与存储在 CR 位置的校验和进行比较。
但是在破解大文件的密码的情况下,我预计解密需要相当长的时间,这使得每次猜测密码的成本都很高。
你基本上是对的。
<块引用>JtR 如何破解 pkzip2 压缩包?
首先,zip2john 只是从存档中挑选最小的文件 以减少工作量。有时没有小文件。
第二个技巧:pkzip 档案还包括另一个较小的校验和 每个文件的打包数据的一小部分(仅 1 或 2 个字节)。如果 不匹配,我们可以提前拒绝。但是如果它确实匹配(并且 不幸的是,单字节校验和将随机匹配大约 1 个 256 个案例)我们必须对整个(可能很大)文件进行校验和。
所以我们包里的第三个技巧是我们收集几个这样小的校验和 (最多 8 个文件),并在继续之前要求所有文件匹配 并计算整个文件的CRC。如果文件数量较少,我们 当然,最终可能会少于 8 个。顺便说一句,理论上 一个存档中的文件可能使用不同的密码,并且 使这个技巧无效(实际上我们可能会得到假阴性)。 这是相当罕见的,因此默认情况下我们假设所有人都具有相同的密码。
所以对我们来说最好的情况是存档包含 8 个或更多文件,并且至少有一个 小文件。最坏的情况是存档只有一个巨大的文件。
万能