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

113 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Обхід правил ACL Nginx за допомогою маніпулювання шляхом <a href="#heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules" id="heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules"></a>
Техніки [з цього дослідження](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
Приклад правила Nginx:
```plaintext
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:
```plaintext
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`.
### Як запобігти
```plaintext
location ~* ^/admin {
deny all;
}
```
## Обхід Правил Mod Security <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
### Плутанина Шляхів
[**У цьому пості**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) пояснено, що 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 <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
### Неправильний Заголовок
[У цьому дослідженні](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) зазначено, що було можливо обійти правила AWS WAF, застосовані до HTTP-заголовків, надсилаючи "неправильний" заголовок, який не був належним чином розібраний AWS, але був розібраний сервером backend.
Наприклад, надсилаючи наступний запит зі впровадженням SQL-ін'єкції у заголовку X-Query:
```http
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://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)
* [https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass)
<details>
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Інші способи підтримки HackTricks:
* Якщо ви хочете побачити свою **компанію рекламовану в HackTricks** або **завантажити HackTricks у PDF** Перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв GitHub.
</details>