Race Condition
Використовуйте Trickest, щоб легко створювати та автоматизувати робочі процеси, які працюють за допомогою найбільш продвинутих інструментів у спільноті. Отримайте доступ сьогодні:
Для отримання глибокого розуміння цієї техніки перевірте оригінальний звіт на https://portswigger.net/research/smashing-the-state-machine
Покращення атак гонки умов
Основна перешкода у використанні гонки умов полягає в тому, що необхідно переконатися, що кілька запитів обробляються одночасно, з дуже малим різницею у часі обробки—ідеально менше 1 мс.
Тут ви можете знайти деякі техніки для синхронізації запитів:
Атака одним пакетом HTTP/2 проти синхронізації останнього байта HTTP/1.1
HTTP/2: Підтримує відправку двох запитів через одне з'єднання TCP, що зменшує вплив мерехтіння мережі. Однак через варіації на стороні сервера два запити можуть бути недостатні для стійкої експлуатації гонки умов.
HTTP/1.1 'Синхронізація останнього байта': Дозволяє передвідправлення більшості частин 20-30 запитів, утримуючи невеликий фрагмент, який потім відправляється разом, досягаючи одночасного прибуття на сервер.
Підготовка до синхронізації останнього байта включає:
Відправлення заголовків та даних тіла без останнього байта без завершення потоку.
Пауза на 100 мс після початкової відправки.
Вимкнення TCP_NODELAY для використання алгоритму Нагля для пакування останніх кадрів.
Пінгування для прогрівання з'єднання.
Подальша відправка утримуваних кадрів повинна призвести до їх прибуття в одному пакеті, що можна перевірити за допомогою 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
зі списку:
Якщо ви збираєтеся відправити різні значення, ви можете змінити код на той, який використовує словниковий список з буфера обміну:
Якщо веб-сайт не підтримує HTTP2 (тільки HTTP1.1), використовуйте Engine.THREADED
або Engine.BURP
замість Engine.BURP2
.
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" знайдено в отриманих електронних листах, ми знаємо, що ми отримали токен підтвердження зміненої електронної пошти і завершуємо атаку.
Сировий BF
Перед попередніми дослідженнями використовувалися такі навантаження, які просто намагалися відправити пакети якомога швидше, щоб викликати RC.
Repeater: Перевірте приклади з попереднього розділу.
Intruder: Надішліть запит до Intruder, встановіть кількість потоків на 30 всередині меню Опції, виберіть як навантаження Null payloads та згенеруйте 30.
Turbo Intruder
Python - asyncio
Методологія RC
Перевищення ліміту / TOCTOU
Це найбільш базовий тип гонки, де вразливості з'являються в місцях, де обмежено кількість разів, коли ви можете виконати дію. Наприклад, використання одного й того ж коду знижки у веб-магазині кілька разів. Дуже простий приклад можна знайти у цьому звіті або у цій помилці.
Існує багато варіацій такого типу атак, включаючи:
Декілька разів використовувати подарункову картку
Оцінювати продукт декілька разів
Знімати або переказувати гроші у більшому обсязі, ніж баланс вашого рахунку
Повторне використання одного рішення CAPTCHA
Обхід обмеження швидкості анти-брут-форсу
Приховані підстані
Експлуатація складних гонок часто включає в себе використання короткочасних можливостей для взаємодії з прихованими або непередбаченими підстанами машини. Ось як до цього підійти:
Визначення потенційних прихованих підстань
Почніть з визначення кінцевих точок, які змінюють або взаємодіють з критичними даними, такими як профілі користувачів або процеси скидання пароля. Зосередьтеся на:
Зберігання: Віддавайте перевагу кінцевим точкам, які маніпулюють постійними даними на сервері, ніж тим, які обробляють дані на клієнтському боці.
Дія: Шукайте операції, які змінюють існуючі дані, оскільки вони більш схильні до створення експлуатованих умов порівняно з тими, які додають нові дані.
Ключування: Успішні атаки зазвичай включають операції, які базуються на тому самому ідентифікаторі, наприклад, ім'я користувача або токен скидання.
Проведення Початкового Пробування
Протестуйте визначені кінцеві точки з атаками гонки, спостерігаючи за будь-якими відхиленнями від очікуваних результатів. Неочікувані відповіді або зміни у поведінці додатка можуть сигналізувати про вразливість.
Демонстрація Вразливості
Скоротіть атаку до мінімальної кількості запитів, необхідних для експлуатації вразливості, часто всього двох. Цей крок може вимагати кількох спроб або автоматизації через точний час, необхідний для виконання.
Атаки, Чутливі до Часу
Точність у відправці запитів може розкрити вразливості, особливо коли для захисних токенів використовуються передбачувані методи, такі як мітки часу. Наприклад, генерація токенів скидання пароля на основі міток часу може дозволити однакові токени для одночасних запитів.
Для Експлуатації:
Використовуйте точний час, наприклад, атаку одним пакетом, для виконання одночасних запитів на скидання пароля. Ідентичні токени вказують на вразливість.
Приклад:
Запитайте два токени скидання пароля одночасно і порівняйте їх. Співпадаючі токени вказують на дефект у генерації токенів.
Перевірте це Портсвігер Лабораторію щоб спробувати це.
Вічна стійкість OAuth2
Існує кілька постачальників OAuth. Ці сервіси дозволять вам створити додаток та аутентифікувати користувачів, яких зареєстрував постачальник. Для цього клієнт повинен дозволити вашому додатку отримати доступ до деяких їхніх даних всередині постачальника OAuth. Отже, до цього моменту це просто звичайний вхід за допомогою google/linkedin/github... де вас запитують на сторінці: "Додаток <InsertCoolName> хоче отримати доступ до вашої інформації, чи бажаєте ви його дозволити?"
Гонка умов в authorization_code
authorization_code
Проблема виникає, коли ви приймаєте це і автоматично надсилаєте authorization_code
до зловмисного додатку. Потім цей додаток зловживає Гонкою умов у постачальнику сервісу OAuth для генерації більше одного AT/RT (Токен аутентифікації/Оновлення токену) з authorization_code
для вашого облікового запису. Фактично, він буде зловживати тим, що ви дозволили додатку отримати доступ до ваших даних, щоб створити кілька облікових записів. Потім, якщо ви припините дозволяти додатку отримувати доступ до ваших даних, одна пара AT/RT буде видалена, але інші залишаться дійсними.
Гонка умов в Refresh Token
Refresh Token
Після того, як ви отримали дійсний RT, ви можете спробувати зловживати його для генерації кількох AT/RT і навіть якщо користувач скасує дозвіл для зловмисного додатку отримати доступ до його даних, декілька RT все ще будуть дійсними.
Гонка умов у WebSockets
У WS_RaceCondition_PoC ви можете знайти PoC на Java для відправки повідомлень у паралельному режимі для зловживання Гонкою умов також у WebSockets.
Посилання
Використовуйте Trickest для легкої побудови та автоматизації робочих процесів за допомогою найбільш продвинутих інструментів спільноти у світі. Отримайте доступ сьогодні:
Last updated