hacktricks/crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md

5.1 KiB
Raw Blame History

{% hint style="success" %} 学习并练习AWS Hacking:HackTricks 培训 AWS 红队专家 (ARTE)
学习并练习GCP Hacking: HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}

CBC

如果cookie只是用户名或cookie的第一部分是用户名而您想要冒充用户名"admin"。那么,您可以创建用户名**"bdmin"暴力破解cookie的第一个字节**。

CBC-MAC

密码块链接消息认证码CBC-MAC)是密码学中使用的一种方法。它通过逐块加密消息来工作,其中每个块的加密与前一个块相关联。这个过程创建了一个块链,确保即使更改原始消息的一个位,也会导致加密数据的最后一个块发生不可预测的变化。要进行或逆转这样的更改,需要加密密钥,确保安全性。

要计算消息 m 的 CBC-MAC需要使用零初始化向量在 CBC 模式下加密 m 并保留最后一个块。以下图示了使用秘密密钥 k 和块密码 E 计算消息组成的块的 CBC-MAC 的计算过程https://wikimedia.org/api/rest_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5

https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC_structure_en.svg/570px-CBC-MAC_structure_en.svg.png

漏洞

使用 CBC-MAC 时通常使用的初始化向量为 0
这是一个问题,因为独立的 2 个已知消息(m1m2)将生成 2 个签名(s1s2)。因此:

  • E(m1 XOR 0) = s1
  • E(m2 XOR 0) = s2

然后,由 m1 和 m2 连接而成的消息m3将生成 2 个签名s31 和 s32

  • E(m1 XOR 0) = s31 = s1
  • E(m2 XOR s1) = s32

这是可以在不知道加密密钥的情况下计算的。

想象一下,您正在以8字节块加密名称Administrator

  • Administ
  • rator\00\00\00

您可以创建一个名为Administm1的用户名并检索签名s1
然后,您可以创建一个用户名,称为rator\00\00\00 XOR s1的结果。这将生成E(m2 XOR s1 XOR 0),即 s32。
现在,您可以使用 s32 作为完整名称Administrator的签名。

总结

  1. 获取用户名Administm1的签名即 s1
  2. 获取用户名rator\x00\x00\x00 XOR s1 XOR 0的签名为 s32**.**
  3. 将 cookie 设置为 s32它将成为用户Administrator的有效 cookie。

攻击控制 IV

如果您可以控制使用的 IV则攻击可能会变得非常容易。
如果 cookie 只是加密的用户名,要冒充用户"administrator",您可以创建用户"Administrator"并获取其 cookie。
现在,如果您可以控制 IV您可以更改 IV 的第一个字节,使得IV[0] XOR "A" == IV'[0] XOR "a",并重新生成用户Administrator的 cookie。这个 cookie 将有效地冒充初始IV的用户administrator

参考

更多信息请参阅https://en.wikipedia.org/wiki/CBC-MAC

{% hint style="success" %} 学习并练习AWS Hacking:HackTricks 培训 AWS 红队专家 (ARTE)
学习并练习GCP Hacking: HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}