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

84 lines
5.5 KiB
Markdown
Raw Permalink Normal View History

{% hint style="success" %}
**Impara e pratica l'hacking su AWS:**<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
**Impara e pratica l'hacking su GCP:** <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2024-04-06 18:35:30 +00:00
<details>
2024-04-06 18:35:30 +00:00
<summary>Sostieni HackTricks</summary>
2024-04-06 18:35:30 +00:00
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
2024-04-06 18:35:30 +00:00
</details>
{% endhint %}
2024-04-06 18:35:30 +00:00
# CBC
Se il **cookie** è **solo** lo **username** (o la prima parte del cookie è lo username) e vuoi impersonare lo username "**admin**". Allora, puoi creare lo username **"bdmin"** e **forzare** il **primo byte** del cookie.
2024-04-06 18:35:30 +00:00
# CBC-MAC
Il **cipher block chaining message authentication code** (**CBC-MAC**) è un metodo utilizzato in crittografia. Funziona prendendo un messaggio e crittografandolo blocco per blocco, dove la crittografia di ciascun blocco è collegata a quello precedente. Questo processo crea una **catena di blocchi**, garantendo che anche cambiare un singolo bit del messaggio originale porterà a un cambiamento imprevedibile nell'ultimo blocco dei dati crittografati. Per apportare o invertire tale cambiamento, è necessaria la chiave di crittografia, garantendo la sicurezza.
2024-04-06 18:35:30 +00:00
Per calcolare il CBC-MAC del messaggio m, si crittografa m in modalità CBC con vettore di inizializzazione zero e si conserva l'ultimo blocco. La seguente figura schematizza il calcolo del CBC-MAC di un messaggio composto da blocchi ![https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5) utilizzando una chiave segreta k e un cifrario a blocchi E:
2024-04-06 18:35:30 +00:00
![https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png](https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png)
# Vulnerabilità
Con il CBC-MAC di solito l'**IV utilizzato è 0**.\
2024-04-06 18:35:30 +00:00
Questo è un problema perché 2 messaggi noti (`m1` e `m2`) genereranno indipendentemente 2 firme (`s1` e `s2`). Quindi:
* `E(m1 XOR 0) = s1`
* `E(m2 XOR 0) = s2`
Quindi un messaggio composto da m1 e m2 concatenati (m3) genererà 2 firme (s31 e s32):
* `E(m1 XOR 0) = s31 = s1`
* `E(m2 XOR s1) = s32`
**È possibile calcolarlo senza conoscere la chiave della crittografia.**
2024-04-06 18:35:30 +00:00
Immagina di crittografare il nome **Amministratore** in blocchi di **8 byte**:
2024-04-06 18:35:30 +00:00
* `Administ`
* `rator\00\00\00`
Puoi creare uno username chiamato **Administ** (m1) e recuperare la firma (s1).\
Poi, puoi creare uno username chiamato il risultato di `rator\00\00\00 XOR s1`. Questo genererà `E(m2 XOR s1 XOR 0)` che è s32.\
ora, puoi usare s32 come firma del nome completo **Amministratore**.
2024-04-06 18:35:30 +00:00
### Riassunto
1. Ottieni la firma dell'username **Administ** (m1) che è s1
2. Ottieni la firma dell'username **rator\x00\x00\x00 XOR s1 XOR 0** che è s32**.**
3. Imposta il cookie su s32 e sarà un cookie valido per l'utente **Amministratore**.
2024-04-06 18:35:30 +00:00
# Attacco Controllando IV
2024-04-06 18:35:30 +00:00
Se puoi controllare l'IV utilizzato, l'attacco potrebbe essere molto semplice.\
Se i cookie sono solo lo username criptato, per impersonare l'utente "**amministratore**" puoi creare l'utente "**Amministratore**" e otterrai il suo cookie.\
Ora, se puoi controllare l'IV, puoi cambiare il primo byte dell'IV in modo che **IV\[0] XOR "A" == IV'\[0] XOR "a"** e rigenerare il cookie per l'utente **Amministratore**. Questo cookie sarà valido per **impersonare** l'utente **amministratore** con l'IV iniziale.
2024-04-06 18:35:30 +00:00
## Riferimenti
Maggiori informazioni su [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
2024-04-06 18:35:30 +00:00
{% hint style="success" %}
**Impara e pratica l'hacking su AWS:**<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
**Impara e pratica l'hacking su GCP:** <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2024-04-06 18:35:30 +00:00
<details>
2024-04-06 18:35:30 +00:00
<summary>Sostieni HackTricks</summary>
2024-04-06 18:35:30 +00:00
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
2024-04-06 18:35:30 +00:00
</details>
{% endhint %}