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

82 lines
4.9 KiB
Markdown
Raw Normal View History

2024-04-06 18:13:07 +00:00
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
# CBC
如果**cookie**只是**用户名**或cookie的第一部分是用户名而您想要冒充用户名"**admin**"。那么,您可以创建用户名**"bdmin"**并**暴力破解**cookie的**第一个字节**。
# CBC-MAC
在密码学中,**密码块链接消息认证码****CBC-MAC**是一种从块密码构造消息认证码的技术。消息使用某种块密码算法在CBC模式下加密以创建一个**块链,使得每个块依赖于前一个块的正确加密**。这种相互依赖确保对**任何**明文**位**的更改将导致**最终加密块**以一种不能预测或抵消的方式发生**更改**,而不知道块密码的密钥。
要计算消息m的CBC-MAC需要使用零初始化向量在CBC模式下加密m并保留最后一个块。以下图示了使用秘密密钥k和块密码E计算消息包含块的CBC-MAC![m\_{1}\\|m\_{2}\\|\cdots \\|m\_{x}](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5)的计算过程:
![CBC-MAC structure (en).svg](https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png)
# 漏洞
使用CBC-MAC时通常使用的**IV为0**。\
这是一个问题因为独立的2个已知消息`m1`和`m2`将生成2个签名`s1`和`s2`)。因此:
* `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`
您可以创建一个名为**Administ**m1的用户名并检索签名s1。\
然后,您可以创建一个名为`rator\00\00\00 XOR s1`结果的用户名。这将生成`E(m2 XOR s1 XOR 0)`即s32。\
现在您可以使用s32作为完整名称**Administrator**的签名。
### 总结
1. 获取用户名**Administ**m1的签名即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](https://en.wikipedia.org/wiki/CBC-MAC)
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>