Electronic Code Book (ECB)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
(ECB) Електронна кодова книга - симетрична схема шифрування, яка замінює кожен блок відкритого тексту на блок шифротексту. Це найпростіша схема шифрування. Основна ідея полягає в тому, щоб розділити відкритий текст на блоки по N біт (залежить від розміру блоку вхідних даних, алгоритму шифрування) і потім зашифрувати (розшифрувати) кожен блок відкритого тексту, використовуючи єдиний ключ.
Використання ECB має кілька наслідків для безпеки:
Блоки з зашифрованого повідомлення можуть бути видалені
Блоки з зашифрованого повідомлення можуть бути переміщені
Уявіть, що ви кілька разів входите в додаток і завжди отримуєте один і той же cookie. Це тому, що cookie додатка є <username>|<password>
.
Потім ви генеруєте нових користувачів, обидва з однаковим довгим паролем і майже однаковими іменами користувачів.
Ви виявляєте, що блоки по 8B, де інформація обох користувачів однакова, є однаковими. Тоді ви уявляєте, що це може бути через те, що використовується ECB.
Як у наступному прикладі. Зверніть увагу, як ці 2 декодовані cookie мають кілька разів блок \x23U\xE45K\xCB\x21\xC8
.
Це пов'язано з тим, що ім'я користувача та пароль цих куків містили кілька разів літеру "a" (наприклад). Блоки, які є різними, це блоки, які містили принаймні 1 різний символ (можливо, роздільник "|" або якусь необхідну різницю в імені користувача).
Тепер зловмиснику просто потрібно виявити, чи формат є <username><delimiter><password>
або <password><delimiter><username>
. Для цього він може просто згенерувати кілька імен користувачів з схожими та довгими іменами користувачів і паролями, поки не знайде формат і довжину роздільника:
2
2
4
8
3
3
6
8
3
4
7
8
4
4
8
16
7
7
14
16
Знаючи формат кука (<username>|<password>
), щоб видати себе за ім'я користувача admin
, створіть нового користувача з ім'ям aaaaaaaaadmin
і отримайте куки та декодуйте їх:
Ми можемо побачити шаблон \x23U\xE45K\xCB\x21\xC8
, створений раніше з ім'ям користувача, яке містило лише a
.
Тоді ви можете видалити перший блок 8B, і ви отримаєте дійсний cookie для імені користувача admin
:
У багатьох базах даних однаково шукати 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
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)