# Bypass Ochrony Proxy / WAF
Nauka hakowania AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
{% embed url="https://websec.nl/" %}
## Bypass Reguł ACL Nginx za pomocą Manipulacji Ścieżką
Techniki [z tej publikacji](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
Przykład reguły Nginx:
```plaintext
location = /admin {
deny all;
}
location = /admin/ {
deny all;
}
```
Aby zapobiec bypassom, Nginx wykonuje normalizację ścieżki przed jej sprawdzeniem. Jednakże, jeśli serwer backendowy wykonuje inną normalizację (usuwanie znaków, których Nginx nie usuwa), może być możliwe obejście tej obrony.
### **NodeJS - Express**
| Wersja Nginx | **Znaki do obejścia w 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**
| Wersja Nginx | **Znaki do obejścia w 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**
| Wersja Nginx | **Znaki do obejścia w Spring Boot** |
| ------------- | --------------------------------- |
| 1.22.0 | `;` |
| 1.21.6 | `;` |
| 1.20.2 | `\x09`, `;` |
| 1.18.0 | `\x09`, `;` |
| 1.16.1 | `\x09`, `;` |
### **PHP-FPM**
Konfiguracja 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 jest skonfigurowany tak, aby blokować dostęp do `/admin.php`, ale można to ominąć, uzyskując dostęp do `/admin.php/index.php`.
### Jak zapobiec
```plaintext
location ~* ^/admin {
deny all;
}
```
## Ominięcie Reguł Mod Security
### Zagubienie Ścieżki
[W tym poście](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) wyjaśniono, że ModSecurity v3 (do wersji 3.0.12) **nieprawidłowo zaimplementował zmienną `REQUEST_FILENAME`**, która miała zawierać ścieżkę dostępu (do początku parametrów). Spowodowane to było dekodowaniem adresu URL w celu uzyskania ścieżki.\
Dlatego też, żądanie takie jak `http://example.com/foo%3f';alert(1);foo=` w mod security będzie zakładać, że ścieżką jest tylko `/foo`, ponieważ `%3f` jest zamieniane na `?` kończąc ścieżkę URL, ale w rzeczywistości ścieżką, którą otrzyma serwer, będzie `/foo%3f';alert(1);foo=`.
Zmienne `REQUEST_BASENAME` i `PATH_INFO` również były dotknięte tym błędem.
Coś podobnego miało miejsce w wersji 2 Mod Security, co pozwalało ominąć zabezpieczenie uniemożliwiające użytkownikowi dostęp do plików z określonymi rozszerzeniami związanymi z plikami kopii zapasowych (takimi jak `.bak`) po prostu wysyłając zakodowany kropkę URL w `%2e`, na przykład: `https://example.com/backup%2ebak`.
## Ominięcie AWS WAF ACL
### Zniekształcony Nagłówek
[W tej analizie](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) wspomniano, że było możliwe ominięcie reguł AWS WAF stosowanych do nagłówków HTTP poprzez wysłanie "zniekształconego" nagłówka, który nie był poprawnie analizowany przez AWS, ale był przez serwer backendowy.
Na przykład, wysyłając następujące żądanie z wstrzyknięciem SQL w nagłówku 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
```
Było możliwe obejście AWS WAF, ponieważ nie rozumiał, że następna linia jest częścią wartości nagłówka, podczas gdy serwer NODEJS tak (to zostało naprawione).
## Referencje
* [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/)
{% embed url="https://websec.nl/" %}
Naucz się hakować AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.