hacktricks/pentesting-web/proxy-waf-protections-bypass.md
2024-03-29 19:49:46 +01:00

7.2 KiB
Raw Blame History

Обхід правил ACL Nginx за допомогою маніпулювання шляхом

Техніки з цього дослідження.

Приклад правила Nginx:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

Щоб запобігти обхіду, Nginx виконує нормалізацію шляху перед перевіркою. Однак, якщо сервер backend виконує іншу нормалізацію (видаляючи символи, які не видаляє nginx), це може призвести до обхіду цієї захисту.

NodeJS - Express

Версія 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

Flask

Версія 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

Spring Boot

Версія Nginx Символи обходу Spring Boot
1.22.0 ;
1.21.6 ;
1.20.2 \x09, ;
1.18.0 \x09, ;
1.16.1 \x09, ;

PHP-FPM

Конфігурація Nginx FPM:

location = /admin.php {
deny all;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Nginx налаштований на блокування доступу до /admin.php, але можна обійти це, звернувшись до /admin.php/index.php.

Як запобігти

location ~* ^/admin {
deny all;
}

Обхід Правил Mod Security

Плутанина Шляхів

У цьому пості пояснено, що ModSecurity v3 (до версії 3.0.12), неправильно реалізував змінну REQUEST_FILENAME, яка повинна була містити доступний шлях (до початку параметрів). Це тому, що він виконував URL-декодування, щоб отримати шлях.
Отже, запит, подібний до http://example.com/foo%3f';alert(1);foo=, в ModSecurity припустить, що шлях - це просто /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 ACL

Неправильний Заголовок

У цьому дослідженні зазначено, що було можливо обійти правила AWS WAF, застосовані до HTTP-заголовків, надсилаючи "неправильний" заголовок, який не був належним чином розібраний AWS, але був розібраний сервером backend.

Наприклад, надсилаючи наступний запит зі впровадженням SQL-ін'єкції у заголовку X-Query:

GET / HTTP/1.1\r\n
Host: target.com\r\n
X-Query: Value\r\n
\t' or '1'='1' -- \r\n
Connection: close\r\n
\r\n

Було можливо обійти AWS WAF, оскільки він не розумів, що наступний рядок є частиною значення заголовка, тоді як сервер NODEJS це розумів (це було виправлено).

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks: