mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
56 lines
3.4 KiB
Markdown
56 lines
3.4 KiB
Markdown
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
# CBC
|
|
|
|
Jeśli **ciasteczko** to **tylko** **nazwa użytkownika** (lub pierwsza część ciasteczka to nazwa użytkownika) i chcesz podszyć się pod nazwę użytkownika "**admin**". Wtedy możesz stworzyć nazwę użytkownika **"bdmin"** i **bruteforcem** **pierwszy bajt** ciasteczka.
|
|
|
|
# CBC-MAC
|
|
|
|
**Cipher block chaining message authentication code** (**CBC-MAC**) to metoda używana w kryptografii. Działa poprzez wzięcie wiadomości i szyfrowanie jej blok po bloku, gdzie szyfrowanie każdego bloku jest powiązane z poprzednim. Proces ten tworzy **łańcuch bloków**, zapewniając, że zmiana nawet jednego bitu oryginalnej wiadomości spowoduje nieprzewidywalną zmianę w ostatnim bloku zaszyfrowanych danych. Aby wprowadzić lub cofnąć taką zmianę, wymagany jest klucz szyfrowania, co zapewnia bezpieczeństwo.
|
|
|
|
Aby obliczyć CBC-MAC wiadomości m, szyfruje się m w trybie CBC z zerowym wektorem inicjalizacyjnym i zachowuje ostatni blok. Poniższy rysunek szkicuje obliczenie CBC-MAC wiadomości składającej się z bloków przy użyciu tajnego klucza k i szyfru blokowego E:
|
|
|
|
.svg/570px-CBC-MAC_structure_(en).svg.png>)
|
|
|
|
# Vulnerability
|
|
|
|
W przypadku CBC-MAC zazwyczaj **IV używane to 0**.\
|
|
To jest problem, ponieważ 2 znane wiadomości (`m1` i `m2`) niezależnie wygenerują 2 podpisy (`s1` i `s2`). Tak więc:
|
|
|
|
- `E(m1 XOR 0) = s1`
|
|
- `E(m2 XOR 0) = s2`
|
|
|
|
Następnie wiadomość składająca się z m1 i m2 połączonych (m3) wygeneruje 2 podpisy (s31 i s32):
|
|
|
|
- `E(m1 XOR 0) = s31 = s1`
|
|
- `E(m2 XOR s1) = s32`
|
|
|
|
**Co jest możliwe do obliczenia bez znajomości klucza szyfrowania.**
|
|
|
|
Wyobraź sobie, że szyfrujesz nazwisko **Administrator** w blokach **8-bajtowych**:
|
|
|
|
- `Administ`
|
|
- `rator\00\00\00`
|
|
|
|
Możesz stworzyć nazwę użytkownika o nazwie **Administ** (m1) i odzyskać podpis (s1).\
|
|
Następnie możesz stworzyć nazwę użytkownika, która jest wynikiem `rator\00\00\00 XOR s1`. To wygeneruje `E(m2 XOR s1 XOR 0)`, co jest s32.\
|
|
Teraz możesz użyć s32 jako podpisu pełnej nazwy **Administrator**.
|
|
|
|
### Podsumowanie
|
|
|
|
1. Uzyskaj podpis nazwy użytkownika **Administ** (m1), który to s1
|
|
2. Uzyskaj podpis nazwy użytkownika **rator\x00\x00\x00 XOR s1 XOR 0**, który to s32.**
|
|
3. Ustaw ciasteczko na s32, a będzie to ważne ciasteczko dla użytkownika **Administrator**.
|
|
|
|
# Attack Controlling IV
|
|
|
|
Jeśli możesz kontrolować używany IV, atak może być bardzo łatwy.\
|
|
Jeśli ciasteczka to tylko zaszyfrowana nazwa użytkownika, aby podszyć się pod użytkownika "**administrator**", możesz stworzyć użytkownika "**Administrator**" i otrzymasz jego ciasteczko.\
|
|
Teraz, jeśli możesz kontrolować IV, możesz zmienić pierwszy bajt IV, tak aby **IV\[0] XOR "A" == IV'\[0] XOR "a"** i ponownie wygenerować ciasteczko dla użytkownika **Administrator.** To ciasteczko będzie ważne do **podszywania się** pod użytkownika **administrator** z początkowym **IV**.
|
|
|
|
## References
|
|
|
|
Więcej informacji w [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|