Proxy / WAF Protections Bypass
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Техніки з цього дослідження.
Приклад правила Nginx:
Щоб запобігти обходам, Nginx виконує нормалізацію шляху перед його перевіркою. Однак, якщо сервер на стороні бекенду виконує іншу нормалізацію (видаляючи символи, які Nginx не видаляє), може бути можливим обійти цю оборону.
Версія Nginx
Символи обходу Node.js
1.22.0
\xA0
1.21.6
\xA0
1.20.2
\xA0
, \x09
, \x0C
1.18.0
\xA0
, \x09
, \x0C
1.16.1
\xA0
, \x09
, \x0C
Версія Nginx
Символи обходу Flask
1.22.0
\x85
, \xA0
1.21.6
\x85
, \xA0
1.20.2
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
1.18.0
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
1.16.1
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
Версія Nginx
Символи обходу Spring Boot
1.22.0
;
1.21.6
;
1.20.2
\x09
, ;
1.18.0
\x09
, ;
1.16.1
\x09
, ;
Конфігурація Nginx FPM:
Nginx налаштовано на блокування доступу до /admin.php
, але це можна обійти, отримавши доступ до /admin.php/index.php
.
У цьому пості пояснюється, що ModSecurity v3 (до 3.0.12) неправильно реалізував змінну REQUEST_FILENAME
, яка повинна була містити доступний шлях (до початку параметрів). Це сталося через те, що він виконував декодування URL, щоб отримати шлях.
Отже, запит на кшталт http://example.com/foo%3f';alert(1);foo=
в mod security буде вважати, що шлях - це лише /foo
, оскільки %3f
перетворюється на ?
, закінчуючи шлях URL, але насправді шлях, який отримає сервер, буде /foo%3f';alert(1);foo=
.
Змінні REQUEST_BASENAME
та PATH_INFO
також були під впливом цього багу.
Щось подібне сталося у версії 2 Mod Security, що дозволило обійти захист, який заважав користувачам отримувати доступ до файлів з певними розширеннями, пов'язаними з резервними копіями (такими як .bak
), просто надіславши крапку, закодовану в URL як %2e
, наприклад: https://example.com/backup%2ebak
.
Це дослідження згадує, що було можливим обійти правила AWS WAF, застосовані до HTTP заголовків, надіславши "неправильний" заголовок, який не був правильно розібраний AWS, але був розібраний сервером на задньому плані.
Наприклад, надіславши наступний запит з SQL-ін'єкцією в заголовку X-Query:
Було можливим обійти AWS WAF, оскільки він не розумів, що наступний рядок є частиною значення заголовка, тоді як сервер NODEJS це розумів (це було виправлено).
Зазвичай WAF мають певний обмеження довжини запитів для перевірки, і якщо запит POST/PUT/PATCH перевищує його, WAF не перевірятиме запит.
Для AWS WAF ви можете перевірити документацію:
Максимальний розмір тіла веб-запиту, який може бути перевірений для захисту Application Load Balancer та AWS AppSync
8 KB
Максимальний розмір тіла веб-запиту, який може бути перевірений для захисту CloudFront, API Gateway, Amazon Cognito, App Runner та Verified Access**
64 KB
Старі веб-брандмауери з набором основних правил 3.1 (або нижче) дозволяють повідомлення, що перевищують 128 KB, вимкнувши перевірку тіла запиту, але ці повідомлення не будуть перевірені на вразливості. Для новіших версій (набір основних правил 3.2 або новіший) те ж саме можна зробити, вимкнувши максимальне обмеження тіла запиту. Коли запит перевищує обмеження розміру:
Якщо режим запобігання: Логує та блокує запит.
Якщо режим виявлення: Перевіряє до межі, ігнорує решту та логує, якщо Content-Length
перевищує межу.
З Akamai:
За замовчуванням WAF перевіряє лише перші 8KB запиту. Він може збільшити обмеження до 128KB, додавши розширену метадані.
З Cloudflare:
До 128KB.
В залежності від реалізації нормалізації Unicode (більше інформації тут), символи, які мають спільну Unicode сумісність, можуть обійти WAF і виконатися як заплановане навантаження. Сумісні символи можна знайти тут.
https://github.com/ustayready/fireprox: Генеруйте URL-адресу API шлюзу для використання з ffuf
https://github.com/rootcathacking/catspin: Схоже на fireprox
https://github.com/PortSwigger/ip-rotate: Плагін Burp Suite, який використовує IP-адреси API шлюзу
https://github.com/fyoorer/ShadowClone: Динамічно визначена кількість контейнерів активується на основі розміру вхідного файлу та фактора розподілу, при цьому вхідний файл розділяється на частини для паралельного виконання, наприклад, 100 екземплярів обробляють 100 частин з вхідного файлу на 10,000 рядків з фактором розподілу 100 рядків.
Різні техніки можуть бути використані для обходу regex-фільтрів на брандмауерах. Приклади включають чергування регістру, додавання переносів рядків та кодування корисних навантажень. Ресурси для різних обходів можна знайти на PayloadsAllTheThings та OWASP. Приклади нижче були взяті з цієї статті.
nowafpls: плагін Burp для додавання сміттєвих даних до запитів для обходу WAF за довжиною
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)