Обхід обмеження швидкості

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

Техніки обходу обмеження швидкості

Дослідження подібних кінцевих точок

Слід намагатися виконувати атаки грубої сили на варіації цільової кінцевої точки, такі як /api/v3/sign-up, включаючи альтернативи, такі як /Sing-up, /SignUp, /singup, /api/v1/sign-up, /api/sign-up тощо.

Включення пробільних символів у код або параметри

Вставка пробільних байтів, таких як %00, %0d%0a, %0d, %0a, %09, %0C, %20 у код або параметри може бути корисною стратегією. Наприклад, зміна параметра на code=1234%0a дозволяє розширити спроби через варіації введення, такі як додавання символів нового рядка до адреси електронної пошти, щоб обійти обмеження спроб.

Маніпулювання IP-джерелом через заголовки

Модифікація заголовків для зміни сприйнятого IP-джерела може допомогти уникнути обмеження швидкості на основі IP. Заголовки, такі як X-Originating-IP, X-Forwarded-For, X-Remote-IP, X-Remote-Addr, X-Client-IP, X-Host, X-Forwared-Host, включаючи використання кількох екземплярів X-Forwarded-For, можуть бути відкориговані для імітації запитів з різних IP.

bash
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Host: 127.0.0.1
X-Forwared-Host: 127.0.0.1

# Double X-Forwarded-For header example
X-Forwarded-For:
X-Forwarded-For: 127.0.0.1

Зміна інших заголовків

Рекомендується змінювати інші заголовки запиту, такі як user-agent та cookies, оскільки їх також можна використовувати для ідентифікації та відстеження шаблонів запитів. Зміна цих заголовків може запобігти визнанню та відстеженню дій запитувача.

Використання поведінки API Gateway

Деякі API шлюзи налаштовані на застосування обмеження швидкості на основі комбінації кінцевої точки та параметрів. Змінюючи значення параметрів або додаючи незначні параметри до запиту, можна обійти логіку обмеження швидкості шлюзу, роблячи кожен запит унікальним. Наприклад, /resetpwd?someparam=1.

Увійдіть у свій обліковий запис перед кожною спробою

Увійти в обліковий запис перед кожною спробою або кожним набором спроб може скинути лічильник обмеження швидкості. Це особливо корисно при тестуванні функціональності входу. Використання атаки Pitchfork у таких інструментах, як Burp Suite, для ротації облікових даних кожні кілька спроб і забезпечення того, щоб перенаправлення були позначені, може ефективно перезапустити лічильники обмеження швидкості.

Використання проксі-мереж

Розгортання мережі проксі для розподілу запитів через кілька IP-адрес може ефективно обійти обмеження швидкості на основі IP. Маршрутизуючи трафік через різні проксі, кожен запит виглядає так, ніби він походить з іншого джерела, розмиваючи ефективність обмеження швидкості.

Розподіл атаки між різними обліковими записами або сесіями

Якщо цільова система застосовує обмеження швидкості на основі кожного облікового запису або сесії, розподіл атаки або тесту між кількома обліковими записами або сесіями може допомогти уникнути виявлення. Цей підхід вимагає управління кількома ідентичностями або токенами сесій, але може ефективно розподілити навантаження, щоб залишитися в межах допустимих обмежень.

Продовжуйте намагатися

Зверніть увагу, що навіть якщо обмеження швидкості встановлено, ви повинні спробувати перевірити, чи є відповідь іншою, коли надсилається дійсний OTP. У цьому пості дослідник вразливостей виявив, що навіть якщо обмеження швидкості спрацьовує після 20 невдалих спроб, відповідаючи 401, якщо дійсний OTP був надісланий, була отримана відповідь 200.


Зловживання мультиплексуванням HTTP/2 та конвеєризацією запитів (2023-2025)

Сучасні реалізації обмежувачів швидкості часто рахують TCP з'єднання (або навіть окремі запити HTTP/1.1) замість кількості потоків HTTP/2, які містить з'єднання. Коли те саме TLS з'єднання повторно використовується, зловмисник може відкрити сотні паралельних потоків, кожен з яких несе окремий запит, тоді як шлюз відраховує лише один запит з квоти.

bash
# Send 100 POST requests in a single HTTP/2 connection with curl
seq 1 100 | xargs -I@ -P0 curl -k --http2-prior-knowledge -X POST \
-H "Content-Type: application/json" \
-d '{"code":"@"}' https://target/api/v2/verify &>/dev/null

Якщо обмежувач захищає лише /verify, але не /api/v2/verify, ви також можете поєднати плутанину шляхів з мультиплексуванням HTTP/2 для надзвичайно швидкого брутфорсу OTP або облікових даних.

🐾 Порада: PortSwigger’s Turbo Intruder підтримує HTTP/2 і дозволяє вам точно налаштувати maxConcurrentConnections та requestsPerConnection, щоб автоматизувати цю атаку.

Псевдоніми GraphQL та пакетні операції

GraphQL дозволяє клієнту надсилати кілька логічно незалежних запитів або мутацій в одному запиті, префіксуючи їх псевдонімами. Оскільки сервер виконує кожен псевдонім, але обмежувач швидкості часто враховує лише один запит, це надійний спосіб обійти обмеження на вхід до системи або скидання пароля.

graphql
mutation bruteForceOTP {
a: verify(code:"111111") { token }
b: verify(code:"222222") { token }
c: verify(code:"333333") { token }
# … add up to dozens of aliases …
}

Дивіться на відповідь: точно один псевдонім поверне 200 OK, коли буде введено правильний код, тоді як інші обмежені за швидкістю.

Цю техніку популяризували дослідження PortSwigger про “GraphQL batching & aliases” у 2023 році, і вона стала причиною багатьох нещодавніх виплат за вразливості.

Зловживання batch або bulk REST кінцевими точками

Деякі API відкривають допоміжні кінцеві точки, такі як /v2/batch, або приймають масив об'єктів у тілі запиту. Якщо обмежувач розташований лише перед старими кінцевими точками, обгортання кількох операцій в один запит на масове оброблення може повністю обійти захист.

json
[
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"123"}},
{"path": "/login", "method": "POST", "body": {"user":"bob","pass":"456"}}
]

Тайминг ковзного вікна

Класичний лімітатор токенів або лімітатор з витоком скидається на фіксованій часовій межі (наприклад, кожну хвилину). Якщо вікно відоме (наприклад, через повідомлення про помилки, такі як X-RateLimit-Reset: 27), надішліть максимальну дозволену кількість запитів безпосередньо перед скиданням кошика, а потім відразу надішліть ще один повний сплеск.

|<-- 60 s window ‑->|<-- 60 s window ‑->|
######                 ######

Ця проста оптимізація може більш ніж подвоїти вашу пропускну здатність, не торкаючись жодної іншої техніки обходу.


Інструменти

  • https://github.com/Hashtag-AMIN/hashtag-fuzz: Інструмент для фуззингу, який підтримує рандомізацію заголовків, розділені списки слів та ротацію проксі-серверів за принципом кругового обертання.
  • https://github.com/ustayready/fireprox: Автоматично створює одноразові кінцеві точки AWS API Gateway, щоб кожен запит походив з різної IP-адреси – ідеально для подолання обмежень на основі IP.
  • Burp Suite – IPRotate + розширення: Використовує пул SOCKS/HTTP проксі (або AWS API Gateway) для прозорої ротації вихідної IP-адреси під час атак Intruder та Turbo Intruder.
  • Turbo Intruder (BApp): Високопродуктивний атакуючий механізм, що підтримує мультиплексування HTTP/2; налаштуйте requestsPerConnection на 100-1000, щоб об'єднати сотні запитів в одне з'єднання.

Посилання

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