7.2 KiB
Обхід правил 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 це розумів (це було виправлено).
Посилання
- https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies
- https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
Інші способи підтримки HackTricks:
- Якщо ви хочете побачити свою компанію рекламовану в HackTricks або завантажити HackTricks у PDF Перевірте ПЛАНИ ПІДПИСКИ!
- Отримайте офіційний PEASS & HackTricks мерч
- Відкрийте для себе Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @carlospolopm.
- Поділіться своїми хакерськими трюками, надсилайте PR до HackTricks та HackTricks Cloud репозиторіїв GitHub.