hacktricks/cryptography/cipher-block-chaining-cbc-mac-priv.md
2023-08-03 19:12:22 +00:00

5.8 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

CBC

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

CBC-MAC

在密码学中,密码块链接消息认证码CBC-MAC是一种从块密码构造消息认证码的技术。消息使用某种块密码算法在CBC模式下进行加密以创建一个块链,使得每个块都依赖于前一个块的正确加密。这种相互依赖性确保了对任何明文位的更改都会导致最终加密块以无法预测或抵消的方式发生变化,而不知道块密码的密钥。

要计算消息m的CBC-MAC可以使用零初始化向量在CBC模式下对m进行加密并保留最后一个块。下图概述了使用秘密密钥k和块密码E计算由块组成的消息的CBC-MACm_{1}\|m_{2}\|\cdots \|m_{x}的计算过程:

CBC-MAC structure (en).svg

漏洞

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

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

然后由m1和m2连接而成的消息m3将生成两个签名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

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥