Використовуйте [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), щоб легко створювати та **автоматизувати робочі процеси**, які працюють за допомогою найбільш **продвинутих** інструментів у спільноті.\
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Якщо ви хочете побачити вашу **компанію в рекламі на HackTricks**або**завантажити HackTricks у PDF** Перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
Для отримання глибокого розуміння цієї техніки перевірте оригінальний звіт на [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
Основна перешкода у використанні гонки умов полягає в тому, що необхідно переконатися, що кілька запитів обробляються одночасно, з **дуже малим різницею у часі обробки—ідеально менше 1 мс**.
* **HTTP/2**: Підтримує відправку двох запитів через одне з'єднання TCP, що зменшує вплив мерехтіння мережі. Однак через варіації на стороні сервера два запити можуть бути недостатні для стійкої експлуатації гонки умов.
* **HTTP/1.1 'Синхронізація останнього байта'**: Дозволяє передвідправлення більшості частин 20-30 запитів, утримуючи невеликий фрагмент, який потім відправляється разом, досягаючи одночасного прибуття на сервер.
Подальша відправка утримуваних кадрів повинна призвести до їх прибуття в одному пакеті, що можна перевірити за допомогою Wireshark. Цей метод не застосовується до статичних файлів, які зазвичай не використовуються в атаках гонки умов.
Розуміння архітектури цільового сервера є критичним. Фронтенд-сервери можуть маршрутизувати запити по-різному, що впливає на часування. Попередня прогрівання з'єднання на стороні сервера, через неважливі запити, може нормалізувати час запиту.
Фреймворки, як PHP обробляють запити за допомогою сесій, що потенційно приховує вразливості. Використання різних токенів сесій для кожного запиту може обійти цю проблему.
Якщо прогрівання з'єднання не ефективне, намаганням спричинити намірено затримки обмежень швидкості або ресурсів веб-серверів через потік фіктивних запитів може сприяти атакі одним пакетом, спричинюючи затримку на стороні сервера, сприятливу для гонки умов.
* **Tubo Intruder - атака одним пакетом HTTP2 (1 кінцева точка)**: Ви можете відправити запит до **Turbo intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), ви можете змінити в запиті значення, яке ви хочете перебрати для **`%s`** як у`csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s`і потім вибрати **`examples/race-single-packer-attack.py`** зі списку:
* **Tubo Intruder - атака одним пакетом HTTP2 (Кілька кінцевих точок)**: У випадку, якщо вам потрібно відправити запит до однієї кінцевої точки, а потім до кількох інших кінцевих точок для спровокування RCE, ви можете змінити скрипт `race-single-packet-attack.py` на щось на зразок:
* Це також доступно в **Repeater** через нову опцію '**Send group in parallel**' в Burp Suite.
* Для **limit-overrun** ви можете просто додати **той самий запит 50 разів**у групу.
* Для **connection warming**, ви можете **додати** на **початку****групи** деякі **запити** до деякої нестатичної частини веб-сервера.
* Для **затримки** процесу **між** обробкою **одного запиту та іншого**у 2 підкроки, ви можете **додати додаткові запити між** обома запитами.
* Для **багатопунктового** RC ви можете почати відправку **запиту**, який **переходить до прихованого стану**, а потім **50 запитів** одразу після нього, які **експлуатують прихований стан**.
* **Автоматизований скрипт на Python**: Метою цього скрипту є зміна електронної пошти користувача, постійно перевіряючи її, поки токен підтвердження нової електронної пошти не надійде на останню електронну пошту (це тому, що в коді було помічено RC, де можна було змінити електронну пошту, але підтвердження було відправлено на стару, оскільки змінна, що вказувала на електронну пошту, вже була заповнена першою).\
Коли слово "objetivo" знайдено в отриманих електронних листах, ми знаємо, що ми отримали токен підтвердження зміненої електронної пошти і завершуємо атаку.
Перед попередніми дослідженнями використовувалися такі навантаження, які просто намагалися відправити пакети якомога швидше, щоб викликати RC.
* **Repeater:** Перевірте приклади з попереднього розділу.
* **Intruder**: Надішліть **запит** до **Intruder**, встановіть **кількість потоків** на **30** всередині меню **Опції**, виберіть як навантаження **Null payloads** та згенеруйте **30**.
* **Turbo Intruder**
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
pipeline=False
)
a = ['Session=<session_id_1>','Session=<session_id_2>','Session=<session_id_3>']
Це найбільш базовий тип гонки, де **вразливості** з'являються в місцях, де **обмежено кількість разів, коли ви можете виконати дію**. Наприклад, використання одного й того ж коду знижки у веб-магазині кілька разів. Дуже простий приклад можна знайти у [**цьому звіті**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) абоу [**цій помилці**](https://hackerone.com/reports/759247).
Експлуатація складних гонок часто включає в себе використання короткочасних можливостей для взаємодії з прихованими або**непередбаченими підстанами машини**. Ось як до цього підійти:
* Почніть з визначення кінцевих точок, які змінюють або взаємодіють з критичними даними, такими як профілі користувачів або процеси скидання пароля. Зосередьтеся на:
* **Зберігання**: Віддавайте перевагу кінцевим точкам, які маніпулюють постійними даними на сервері, ніж тим, які обробляють дані на клієнтському боці.
* **Дія**: Шукайте операції, які змінюють існуючі дані, оскільки вони більш схильні до створення експлуатованих умов порівняно з тими, які додають нові дані.
* **Ключування**: Успішні атаки зазвичай включають операції, які базуються на тому самому ідентифікаторі, наприклад, ім'я користувача або токен скидання.
2.**Проведення Початкового Пробування**
* Протестуйте визначені кінцеві точки з атаками гонки, спостерігаючи за будь-якими відхиленнями від очікуваних результатів. Неочікувані відповіді або зміни у поведінці додатка можуть сигналізувати про вразливість.
3.**Демонстрація Вразливості**
* Скоротіть атаку до мінімальної кількості запитів, необхідних для експлуатації вразливості, часто всього двох. Цей крок може вимагати кількох спроб або автоматизації через точний час, необхідний для виконання.
Точність у відправці запитів може розкрити вразливості, особливо коли для захисних токенів використовуються передбачувані методи, такі як мітки часу. Наприклад, генерація токенів скидання пароля на основі міток часу може дозволити однакові токени для одночасних запитів.
* Використовуйте точний час, наприклад, атаку одним пакетом, для виконання одночасних запитів на скидання пароля. Ідентичні токени вказують на вразливість.
Існує кілька [**постачальників OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Ці сервіси дозволять вам створити додаток та аутентифікувати користувачів, яких зареєстрував постачальник. Для цього **клієнт** повинен **дозволити вашому додатку** отримати доступ до деяких їхніх даних всередині **постачальника OAuth**.\
Отже, до цього моменту це просто звичайний вхід за допомогою google/linkedin/github... де вас запитують на сторінці: "_Додаток \<InsertCoolName> хоче отримати доступ до вашої інформації, чи бажаєте ви його дозволити?_"
**Проблема** виникає, коли ви **приймаєте це**і автоматично надсилаєте **`authorization_code`** до зловмисного додатку. Потім цей **додаток зловживає Гонкою умов у постачальнику сервісу OAuth для генерації більше одного AT/RT** (_Токен аутентифікації/Оновлення токену_) з **`authorization_code`** для вашого облікового запису. Фактично, він буде зловживати тим, що ви дозволили додатку отримати доступ до ваших даних, щоб **створити кілька облікових записів**. Потім, якщо ви **припините дозволяти додатку отримувати доступ до ваших даних, одна пара AT/RT буде видалена, але інші залишаться дійсними**.
Після того, як ви **отримали дійсний RT**, ви можете спробувати **зловживати його для генерації кількох AT/RT**і**навіть якщо користувач скасує дозвіл** для зловмисного додатку отримати доступ до його даних, **декілька RT все ще будуть дійсними**.
У [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) ви можете знайти PoC на Java для відправки повідомлень у**паралельному режимі** для зловживання **Гонкою умов також у WebSockets**.
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Якщо ви хочете побачити вашу **компанію рекламовану в HackTricks**або**завантажити HackTricks у PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Дізнайтеся про [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або**слідкуйте** за нами в **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
Використовуйте [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) для легкої побудови та **автоматизації робочих процесів** за допомогою найбільш **продвинутих інструментів спільноти**у світі.\