Симетрична криптографія
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
На що звертати увагу в CTFs
- Неправильне використання режиму: ECB patterns, CBC malleability, CTR/GCM nonce reuse.
- Padding oracles: різні помилки/затримки для некоректного padding.
- MAC confusion: використання CBC-MAC з повідомленнями змінної довжини або помилки MAC-then-encrypt.
- XOR everywhere: потокові шифри та кастомні конструкції часто зводяться до XOR з keystream.
AES modes and misuse
ECB: Electronic Codebook
ECB leaks patterns: equal plaintext blocks → equal ciphertext blocks. Це дозволяє:
- Cut-and-paste / block reordering
- Block deletion (якщо формат залишається дійсним)
Якщо ви можете контролювати plaintext і спостерігати ciphertext (або cookies), спробуйте зробити повторювані блоки (наприклад багато A) і дивитися на повтори.
CBC: Cipher Block Chaining
- CBC is malleable: зміна бітів в
C[i-1]змінює передбачувані біти вP[i]. - Якщо система видає відмінність між валідним padding та невалідним padding, у вас може бути padding oracle.
CTR
CTR перетворює AES у stream cipher: C = P XOR keystream.
Якщо nonce/IV повторно використовується з тим самим ключем:
C1 XOR C2 = P1 XOR P2(classic keystream reuse)- За наявності відомого plaintext ви можете відновити keystream і розшифрувати інші повідомлення.
GCM
GCM також сильно ламатиметься при повторному використанні nonce. Якщо той самий key+nonce використовується більше одного разу, зазвичай отримуєте:
- Keystream reuse для шифрування (як CTR), що дозволяє відновити plaintext при відомому plaintext.
- Втрату гарантій цілісності. Залежно від того, що відкрито (декілька message/tag пар під тим самим nonce), атакуючі можуть зуміти сфальсифікувати теги.
Оперативні рекомендації:
- Розглядайте “nonce reuse” в AEAD як критичну вразливість.
- Якщо у вас є кілька ciphertext під тим самим nonce, почніть перевірку відношень типу
C1 XOR C2 = P1 XOR P2.
Інструменти
- CyberChef for quick experiments: https://gchq.github.io/CyberChef/
- Python:
pycryptodomefor scripting
ECB exploitation patterns
ECB (Electronic Code Book) шифрує кожен блок незалежно:
- equal plaintext blocks → equal ciphertext blocks
- це витікає структуру і дозволяє cut-and-paste стилі атак
![]()
Ідея виявлення: шаблон token/cookie
Якщо ви логінитесь кілька разів і завжди отримуєте той самий cookie, ciphertext може бути детермінованим (ECB або фіксований IV).
Якщо ви створите двох користувачів з переважно ідентичними plaintext макетами (наприклад довгі повторювані символи) і бачите повторювані ciphertext blocks на тих самих офсетах, ECB — головний підозрюваний.
Шаблони експлуатації
Видалення цілих блоків
Якщо формат токена виглядає як <username>|<password> і межа блока вирівняна, іноді можна створити користувача так, щоб блок admin опинився вирівняним, а потім видалити попередні блоки щоб отримати валідний токен для admin.
Переміщення блоків
Якщо бекенд толерує padding/extra spaces (admin vs admin ), ви можете:
- Вирівняти блок що містить
admin - Замінити/перевикористати той ciphertext block в іншому токені
Padding Oracle
Що це таке
В CBC режимі, якщо сервер розкриває (прямо чи опосередковано), чи розшифрований plaintext має valid PKCS#7 padding, ви часто можете:
- Decrypt ciphertext без ключа
- Encrypt chosen plaintext (forge ciphertext)
Оракул може бути:
- Специфічне повідомлення про помилку
- Інший HTTP status / response size
- Різниця в часі виконання
Практична експлуатація
PadBuster is the classic tool:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Приклад:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Примітки:
- Розмір блоку зазвичай
16для AES. -encoding 0означає Base64.- Використовуйте
-error, якщо oracle є конкретним рядком.
Чому це працює
CBC-розшифрування обчислює P[i] = D(C[i]) XOR C[i-1]. Модифікуючи байти в C[i-1] і спостерігаючи, чи padding валідний, можна відновити P[i] байт за байтом.
Bit-flipping in CBC
Навіть без padding oracle, CBC є змінним. Якщо ви можете модифікувати блоки шифротексту і застосунок використовує розшифрований plaintext як структуровані дані (наприклад, role=user), ви можете перевірнути конкретні біти, щоб змінити обрані байти plaintext у вибраній позиції наступного блоку.
Типовий CTF патерн:
- Token =
IV || C1 || C2 || ... - Ви контролюєте байти в
C[i] - Ви націлюєте plaintext-байти в
P[i+1], тому щоP[i+1] = D(C[i+1]) XOR C[i]
Саме по собі це не порушення конфіденційності, але це поширений privilege-escalation primitive, коли відсутня цілісність.
CBC-MAC
CBC-MAC захищений лише за конкретних умов (зокрема повідомлення фіксованої довжини і правильне розділення доменів).
Classic variable-length forgery pattern
CBC-MAC зазвичай обчислюється так:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
Якщо ви можете отримати теги для обраних повідомлень, часто можна змайструвати тег для конкатенації (або пов’язаної конструкції) без знання ключа, експлуатуючи те, як CBC зв’язує блоки.
Це часто з’являється в CTF cookies/tokens, які MAC username або role з використанням CBC-MAC.
Safer alternatives
- Use HMAC (SHA-256/512)
- Use CMAC (AES-CMAC) correctly
- Include message length / domain separation
Stream ciphers: XOR and RC4
The mental model
Більшість випадків з потоковими шифрами зводяться до:
ciphertext = plaintext XOR keystream
Отже:
- Якщо ви знаєте plaintext, ви відновлюєте keystream.
- Якщо keystream повторно використовується (той самий key+nonce),
C1 XOR C2 = P1 XOR P2.
XOR-based encryption
Якщо ви знаєте будь-який сегмент plaintext на позиції i, ви можете відновити байти keystream і розшифрувати інші ciphertexts на тих позиціях.
Autosolvers:
RC4
RC4 — потоковий шифр; encrypt/decrypt — та сама операція.
Якщо ви можете отримати RC4 encryption відомого plaintext під тим самим ключем, ви можете відновити keystream і розшифрувати інші повідомлення тієї самої довжини/зсуву.
Reference writeup (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


