diff --git a/src/pentesting-web/rate-limit-bypass.md b/src/pentesting-web/rate-limit-bypass.md index d92a0dc29..6a358f475 100644 --- a/src/pentesting-web/rate-limit-bypass.md +++ b/src/pentesting-web/rate-limit-bypass.md @@ -14,7 +14,7 @@ ### Маніпулювання 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. +Модифікація заголовків для зміни сприйнятого 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 @@ -30,7 +30,7 @@ X-Forwarded-For: 127.0.0.1 ``` ### Зміна інших заголовків -Рекомендується змінювати інші заголовки запитів, такі як user-agent та cookies, оскільки їх також можна використовувати для ідентифікації та відстеження шаблонів запитів. Зміна цих заголовків може запобігти визнанню та відстеженню дій запитувача. +Рекомендується змінювати інші заголовки запиту, такі як user-agent та cookies, оскільки їх також можна використовувати для ідентифікації та відстеження шаблонів запитів. Зміна цих заголовків може запобігти визнанню та відстеженню дій запитувача. ### Використання поведінки API Gateway @@ -38,11 +38,11 @@ X-Forwarded-For: 127.0.0.1 ### Увійдіть у свій обліковий запис перед кожною спробою -Увійти в обліковий запис перед кожною спробою або кожним набором спроб може скинути лічильник обмеження швидкості. Це особливо корисно при тестуванні функцій входу. Використання атаки Pitchfork у таких інструментах, як Burp Suite, для ротації облікових даних кожні кілька спроб і забезпечення того, щоб перенаправлення були позначені, може ефективно перезапустити лічильники обмеження швидкості. +Увійти в обліковий запис перед кожною спробою або кожним набором спроб може скинути лічильник обмеження швидкості. Це особливо корисно при тестуванні функціональності входу. Використання атаки Pitchfork у таких інструментах, як Burp Suite, для ротації облікових даних кожні кілька спроб і забезпечення того, щоб перенаправлення були позначені, може ефективно перезапустити лічильники обмеження швидкості. -### Використання мереж проксі +### Використання проксі-мереж -Розгортання мережі проксі для розподілу запитів через кілька IP-адрес може ефективно обійти обмеження швидкості на основі IP. Направляючи трафік через різні проксі, кожен запит виглядає так, ніби він походить з іншого джерела, розмиваючи ефективність обмеження швидкості. +Розгортання мережі проксі для розподілу запитів через кілька IP-адрес може ефективно обійти обмеження швидкості на основі IP. Маршрутизуючи трафік через різні проксі, кожен запит виглядає так, ніби він походить з іншого джерела, розмиваючи ефективність обмеження швидкості. ### Розподіл атаки між різними обліковими записами або сесіями @@ -50,10 +50,68 @@ X-Forwarded-For: 127.0.0.1 ### Продовжуйте намагатися -Зверніть увагу, що навіть якщо обмеження швидкості встановлено, ви повинні спробувати перевірити, чи є відповідь іншою, коли надсилається дійсний OTP. У [**цьому пості**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) дослідник вразливостей виявив, що навіть якщо обмеження швидкості спрацьовує після 20 невдалих спроб, відповідаючи 401, якщо дійсний OTP був надісланий, було отримано відповідь 200. +Зверніть увагу, що навіть якщо обмеження швидкості встановлено, ви повинні спробувати перевірити, чи є відповідь іншою, коли надсилається дійсний OTP. У [**цьому пості**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) дослідник вразливостей виявив, що навіть якщо обмеження швидкості спрацьовує після 20 невдалих спроб, відповідаючи 401, якщо дійсний OTP був надісланий, була отримана відповідь 200. -### Інструменти +--- -- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz - це інструмент для фуззингу, призначений для тестування та обходу WAF та CDN. Використовуючи розширені функції, такі як випадковий User-Agent та значення заголовка, випадкові затримки, обробка багатопоточності, вибіркове розбиття списків слів та ротація проксі Round Robin для кожного розбитого запиту, він пропонує надійне рішення для фахівців з безпеки, які прагнуть виявити вразливості в веб-додатках. +### Зловживання мультиплексуванням 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](https://portswigger.net/research/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/Hashtag-AMIN/hashtag-fuzz): Інструмент для фуззингу, який підтримує рандомізацію заголовків, розділені списки слів та ротацію проксі-серверів за принципом кругового обертання. +- [**https://github.com/ustayready/fireprox**](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, щоб об'єднати сотні запитів в одне з'єднання. + +## Посилання + +- PortSwigger Research – “Обхід обмежень швидкості за допомогою GraphQL аліасів” (2023) +- PortSwigger Research – “HTTP/2: Продовження завжди гірше” (розділ *Обмеження на основі з'єднання*) (2024) {{#include ../banners/hacktricks-training.md}}