mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
56 lines
4.9 KiB
Markdown
56 lines
4.9 KiB
Markdown
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
# CBC
|
||
|
||
Якщо **cookie** є **тільки** **іменем користувача** (або перша частина cookie є іменем користувача) і ви хочете видати себе за користувача "**admin**". Тоді ви можете створити ім'я користувача **"bdmin"** і **bruteforce** **перший байт** cookie.
|
||
|
||
# CBC-MAC
|
||
|
||
**Код автентифікації повідомлень з використанням ланцюга блоку шифрування** (**CBC-MAC**) є методом, що використовується в криптографії. Він працює, беручи повідомлення і шифруючи його блок за блоком, де шифрування кожного блоку пов'язане з попереднім. Цей процес створює **ланцюг блоків**, що забезпечує, що зміна навіть одного біта оригінального повідомлення призведе до непередбачуваної зміни в останньому блоці зашифрованих даних. Щоб внести або скасувати таку зміну, потрібен ключ шифрування, що забезпечує безпеку.
|
||
|
||
Щоб обчислити CBC-MAC повідомлення m, шифрують m в режимі CBC з нульовим вектором ініціалізації і зберігають останній блок. Наступна фігура ілюструє обчислення CBC-MAC повідомлення, що складається з блоків з використанням секретного ключа k і блочного шифру E:
|
||
|
||
.svg/570px-CBC-MAC_structure_(en).svg.png>)
|
||
|
||
# Уразливість
|
||
|
||
Зазвичай **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`
|
||
|
||
**Що можливо обчислити без знання ключа шифрування.**
|
||
|
||
Уявіть, що ви шифруєте ім'я **Administrator** в **8байтових** блоках:
|
||
|
||
- `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, і це буде дійсний cookie для користувача **Administrator**.
|
||
|
||
# Атака на контроль IV
|
||
|
||
Якщо ви можете контролювати використовуваний IV, атака може бути дуже простою.\
|
||
Якщо cookie є просто зашифрованим іменем користувача, щоб видати себе за користувача "**administrator**", ви можете створити користувача "**Administrator**" і отримати його cookie.\
|
||
Тепер, якщо ви можете контролювати IV, ви можете змінити перший байт IV так, щоб **IV\[0] XOR "A" == IV'\[0] XOR "a"** і згенерувати cookie для користувача **Administrator.** Цей cookie буде дійсним для **імітування** користувача **administrator** з початковим **IV**.
|
||
|
||
## Посилання
|
||
|
||
Більше інформації на [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|