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

6.5 KiB

Proxy / WAF Protections Bypass

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Bypass de Reglas ACL de Nginx

Ejemplo de restricción en Nginx:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

NodeJS

  • Como Nginx incluye el carácter \xa0 como parte del nombre de ruta, la regla ACL para el URI /admin no se activará. En consecuencia, Nginx reenviará el mensaje HTTP al backend;
  • Cuando el servidor Node.js recibe el URI /admin\x0a, el carácter \xa0 se eliminará, permitiendo la recuperación exitosa del endpoint /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 del camino de la URL, pero NGINX no.

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, encontrarás una demostración de cómo se puede eludir la protección ACL agregando el carácter \x09 o al final del nombre de 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 eludirlo accediendo a /admin.php/index.php:

Cómo prevenir

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

COPYCOPY

location ~* ^/admin {
deny all;
}

Eludir AWS WAF ACL con Line Folding

Es posible eludir 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 node 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

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: