hacktricks/crypto-and-stego/hash-length-extension-attack.md

3.8 KiB
Raw Blame History

Hash Length Extension Attack

{% hint style="success" %} 学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}

攻击总结

想象一个服务器,它通过将一个秘密附加到一些已知的明文数据上并对这些数据进行签名。如果你知道:

  • 秘密的长度(这也可以从给定的长度范围中暴力破解)
  • 明文数据
  • 算法(并且它对这种攻击是脆弱的)
  • 填充是已知的
  • 通常使用默认填充,因此如果满足其他三个要求,这也是
  • 填充根据秘密+数据的长度而变化,这就是为什么需要秘密的长度

那么,攻击者可以附加 数据并为之前的数据 + 附加的数据生成一个有效的签名

如何?

基本上,脆弱的算法首先通过哈希一个数据块来生成哈希,然后,从之前创建的哈希(状态)中,添加下一个数据块哈希它

然后想象秘密是“secret”数据是“data”"secretdata"的 MD5 是 6036708eba0d11f6ef52ad44e8b74d5b。
如果攻击者想要附加字符串“append”他可以

  • 生成 64 个“A”的 MD5
  • 将之前初始化的哈希状态更改为 6036708eba0d11f6ef52ad44e8b74d5b
  • 附加字符串“append”
  • 完成哈希,结果哈希将是一个有效的“secret” + “data” + “padding” + “append”

工具

{% embed url="https://github.com/iagox86/hash_extender" %}

参考

你可以在 https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks 找到对这个攻击的详细解释。

{% hint style="success" %} 学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}