{% hint style="success" %} Вивчайте та практикуйте взлом AWS: [**Навчання HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Вивчайте та практикуйте взлом GCP: [**Навчання HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Підтримайте HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Поширюйте хакерські трюки, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
{% endhint %} # ECB (ECB) Electronic Code Book - симетрична схема шифрування, яка **замінює кожний блок відкритого тексту** на **блок шифротексту**. Це **найпростіша** схема шифрування. Основна ідея полягає в тому, щоб **розділити** відкритий текст на **блоки по N біт** (залежно від розміру блоку вхідних даних, алгоритму шифрування) і потім зашифрувати (розшифрувати) кожен блок відкритого тексту, використовуючи лише ключ. ![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png) Використання ECB має кілька наслідків з точки зору безпеки: * **Блоки з зашифрованого повідомлення можуть бути видалені** * **Блоки з зашифрованого повідомлення можуть бути переміщені** # Виявлення вразливості Уявіть, що ви увійшли в додаток кілька разів і ви **завжди отримуєте одне й те ж печиво**. Це тому, що печиво додатка має формат **`<ім'я користувача>|<пароль>`**.\ Потім ви створюєте двох нових користувачів, обох з **однаковим довгим паролем** та **майже** **однаковим** **ім'ям користувача**.\ Ви виявляєте, що **блоки по 8 байтів**, де **інформація про обох користувачів** однакова, **рівні**. Тоді ви уявляєте, що це може бути через використання **ECB**. Подібно до наступного прикладу. Спостерігайте, як у цих **2 розшифрованих печивах** кілька разів зустрічається блок **`\x23U\xE45K\xCB\x21\xC8`** ``` \x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9 \x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9 ``` Це тому, що **ім'я користувача та пароль цих куків містять кілька разів літеру "a"** (наприклад). **Блоки**, які **відрізняються**, - це блоки, які містять **принаймні 1 відмінний символ** (можливо, роздільник "|" або якась необхідна різниця в імені користувача). Тепер зловмиснику просто потрібно виявити, чи формат `<ім'я користувача><роздільник><пароль>` чи `<пароль><роздільник><ім'я користувача>`. Для цього він може просто **генерувати кілька імен користувачів** з **схожими та довгими іменами користувачів та паролями, поки не знайде формат та довжину роздільника:** | Довжина імені користувача: | Довжина пароля: | Довжина Ім'я+Пароль: | Довжина куки (після декодування): | | ---------------- | ---------------- | ------------------------- | --------------------------------- | | 2 | 2 | 4 | 8 | | 3 | 3 | 6 | 8 | | 3 | 4 | 7 | 8 | | 4 | 4 | 8 | 16 | | 7 | 7 | 14 | 16 | # Використання вразливості ## Видалення цілих блоків Знаючи формат куки (`<ім'я користувача>|<пароль>`), для того щоб видаляти ім'я користувача `admin`, створіть нового користувача з ім'ям `aaaaaaaaadmin` та отримайте куку та розкодуйте її: ``` \x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4 ``` Ми можемо побачити патерн `\x23U\xE45K\xCB\x21\xC8`, створений раніше з ім'ям користувача, яке містить лише `a`.\ Потім ви можете видалити перший блок 8B і отримаєте дійсний кукі для імені користувача `admin`: ``` \xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4 ``` ## Переміщення блоків У багатьох базах даних однаково шукати `WHERE username='admin';` або `WHERE username='admin ';` _(Зверніть увагу на додаткові пробіли)_ Таким чином, інший спосіб підробити користувача `admin` буде: * Створити ім'я користувача таке, що: `len() + len(` створить 2 блоки з 8B. * Потім створіть пароль, який заповнить точну кількість блоків, що містять ім'я користувача, яке ми хочемо підробити, та пробіли, наприклад: `admin ` Cookie цього користувача буде складатися з 3 блоків: перші 2 блоки - блоки імені користувача + роздільник, а третій - пароль (який підробляє ім'я користувача): `username |admin ` **Потім просто замініть перший блок останнім разом і ви підробляєте користувача `admin`: `admin |username`** ## Посилання * [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))