tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

ECB

(ECB) Електронна кодова книга - симетрична схема шифрування, яка замінює кожен блок відкритого тексту на блок шифротексту. Це найпростіша схема шифрування. Основна ідея полягає в тому, щоб розділити відкритий текст на блоки по N біт (залежить від розміру блоку вхідних даних, алгоритму шифрування) і потім зашифрувати (розшифрувати) кожен блок відкритого тексту, використовуючи єдиний ключ.

Використання ECB має кілька наслідків для безпеки:

  • Блоки з зашифрованого повідомлення можуть бути видалені
  • Блоки з зашифрованого повідомлення можуть бути переміщені

Виявлення вразливості

Уявіть, що ви кілька разів входите в додаток і завжди отримуєте один і той же cookie. Це відбувається тому, що cookie додатка є <username>|<password>.
Потім ви генеруєте нових користувачів, обидва з однаковим довгим паролем і майже однаковим іменем користувача.
Ви виявляєте, що блоки по 8B, де інформація обох користувачів однакова, є однаковими. Потім ви уявляєте, що це може бути через те, що використовується ECB.

Як у наступному прикладі. Зверніть увагу, як ці 2 декодовані cookie мають кілька разів блок \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 різний символ (можливо, роздільник "|" або деяка необхідна різниця в імені користувача).

Тепер зловмиснику потрібно лише виявити, чи формат є <username><delimiter><password> або <password><delimiter><username>. Для цього він може просто згенерувати кілька імен користувачів з схожими та довгими іменами користувачів і паролями, поки не знайде формат і довжину роздільника:

Довжина імені користувача:Довжина пароля:Довжина імені користувача + пароля:Довжина кука (після декодування):
2248
3368
3478
44816
771416

Використання вразливості

Видалення цілих блоків

Знаючи формат кука (<username>|<password>), щоб видати себе за ім'я користувача admin, створіть нового користувача з ім'ям aaaaaaaaadmin і отримайте куки та декодуйте їх:

\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Ми можемо побачити шаблон \x23U\xE45K\xCB\x21\xC8, створений раніше з ім'ям користувача, яке містило лише a.
Тоді ви можете видалити перший блок 8B, і ви отримаєте дійсний cookie для імені користувача admin:

\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Переміщення блоків

У багатьох базах даних однаково шукати WHERE username='admin'; або WHERE username='admin '; (Зверніть увагу на додаткові пробіли)

Отже, ще один спосіб видати себе за користувача admin полягає в тому, щоб:

  • Згенерувати ім'я користувача, яке: len(<username>) + len(<delimiter) % len(block). З розміром блоку 8B ви можете згенерувати ім'я користувача, яке називається: username , з роздільником | частина <username><delimiter> створить 2 блоки по 8B.
  • Потім згенерувати пароль, який заповнить точну кількість блоків, що містять ім'я користувача, за яким ми хочемо видати себе, і пробіли, наприклад: admin

Кука цього користувача буде складатися з 3 блоків: перші 2 - це блоки імені користувача + роздільник, а третій - це пароль (який підробляє ім'я користувача): username |admin

Тоді просто замініть перший блок на останній, і ви будете видавати себе за користувача admin: admin |username

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks