8 KiB
{% hint style="success" %}
Вивчайте та практикуйте взлом AWS: Навчання HackTricks AWS Red Team Expert (ARTE)
Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @hacktricks_live.
- Поширюйте хакерські трюки, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
ECB
(ECB) Electronic Code Book - симетрична схема шифрування, яка замінює кожний блок відкритого тексту на блок шифротексту. Це найпростіша схема шифрування. Основна ідея полягає в тому, щоб розділити відкритий текст на блоки по N біт (залежно від розміру блоку вхідних даних, алгоритму шифрування) і потім зашифрувати (розшифрувати) кожен блок відкритого тексту, використовуючи лише ключ.
Використання 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(<username>) + len(<delimiter) % len(block)
. З розміром блоку8B
ви можете створити ім'я користувача під назвою:username
, з роздільником|
частина<username><delimiter>
створить 2 блоки з 8B. - Потім створіть пароль, який заповнить точну кількість блоків, що містять ім'я користувача, яке ми хочемо підробити, та пробіли, наприклад:
admin
Cookie цього користувача буде складатися з 3 блоків: перші 2 блоки - блоки імені користувача + роздільник, а третій - пароль (який підробляє ім'я користувача): username |admin
Потім просто замініть перший блок останнім разом і ви підробляєте користувача admin
: admin |username