Вивчайте та практикуйте взлом AWS: <imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**Навчання HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Вивчайте та практикуйте взлом GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**Навчання HackTricks GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
Оскільки шифрування виконується у**фіксованих розмірних блоках**, **доповнення** зазвичай потрібне в **останньому блоку**, щоб завершити його довжину.\
Зазвичай використовується **PKCS7**, яке генерує доповнення, **повторюючи** кількість **байтів**, **необхідних** для **завершення** блоку. Наприклад, якщо в останньому блоку не вистачає 3 байтів, доповнення буде `\x03\x03\x03`.
Коли додаток розшифровує зашифровані дані, він спочатку розшифровує дані; потім він видаляє доповнення. Під час очищення доповнення, якщо **недійсне доповнення викликає виявний вчинок**, у вас є **уразливість Oracle доповнення**. Виявний вчинок може бути **помилкою**, **відсутністю результатів**або**повільною відповіддю**.
Ви можете використовувати [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster), щоб експлуатувати цей вид вразливості або просто виконати
Ви також можете **зловживати цією вразливістю для шифрування нових даних. Наприклад, уявіть, що вміст куки - "**_**user=MyUsername**_**", тоді ви можете змінити його на "\_user=administrator\_" та підвищити привілеї всередині додатка. Ви також можете це зробити, використовуючи `padbuster`, вказавши параметр -plaintext**:
Якщо сайт вразливий, `padbuster` автоматично спробує знайти помилку у доповненні, але ви також можете вказати повідомлення про помилку, використовуючи параметр **-error**.
У**короткому** вигляді, ви можете почати розшифровувати зашифровані дані, вгадуючи правильні значення, які можуть бути використані для створення всіх **різних додаткових байтів**. Потім атака на оракула додаткового байту почне розшифровувати байти з кінця до початку, вгадуючи, яке буде правильне значення, яке **створює додатковий байт 1, 2, 3**і т.д.
Для того, щоб **розшифрувати останній блок** (**E8** до **E15**), весь блок проходить через "розшифрування блоку шифру" і генерує **проміжні байти I0 до I15**.\
Тепер можна **змінити `E7` до тих пір, поки `C15` не буде `0x01`**, що також буде правильним додатковим байтом. Таким чином, у цьому випадку: `\x01 = I15 ^ E'7`
Ця BF така ж складна, як і попередня, оскільки можливо обчислити **`E''15`**, значення якого 0x02: `E''7 = \x02 ^ I15`, тому просто потрібно знайти **`E'14`**, який генерує **`C14`, рівний `0x02`**.\
Зареєструйте обліковий запис та увійдіть за допомогою цього облікового запису.\
Якщо ви **увійдете багато разів**і завжди отримуєте **той самий кукі**, ймовірно, у програмі є **щось не так**. Куки, які надсилаються назад, повинні бути унікальними кожного разу, коли ви увійдете. Якщо куки завжди **однакові**, вони, ймовірно, завжди будуть дійсними, і**немає способу їх анулювати**.
Тепер, якщо ви спробуєте **змінити** куки, ви побачите, що отримаєте **помилку** від програми.\
Але якщо ви використовуєте BF для додаткового байту (наприклад, використовуючи padbuster), ви зможете отримати інший куки, дійсний для іншого користувача. Цей сценарій ймовірно дуже вразливий до padbuster.