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

6.6 KiB

Contournement des protections Proxy / WAF

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Contournement des règles ACL Nginx

Exemple de restriction Nginx :

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

NodeJS

  • Comme Nginx inclut le caractère \xa0 dans le chemin, la règle ACL pour l'URI /admin ne sera pas déclenchée. Par conséquent, Nginx transmettra le message HTTP au backend ;
  • Lorsque l'URI /admin\x0a est reçu par le serveur Node.js, le caractère \xa0 sera supprimé, permettant ainsi de récupérer avec succès le point de terminaison /admin.
Version Nginx Caractères de contournement 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 supprime les caractères \x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B, et \x09 du chemin de l'URL, mais NGINX ne le fait pas.

Version Nginx Caractères de contournement 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

Ci-dessous, vous trouverez une démonstration de la façon dont la protection ACL peut être contournée en ajoutant le caractère \x09 ou ; à la fin du chemin :

Version Nginx Caractères de contournement Spring Boot
1.22.0 ;
1.21.6 ;
1.20.2 \x09, ;
1.18.0 \x09, ;
1.16.1 \x09, ;

PHP-FPM

Considérons la configuration Nginx FPM suivante :

location = /admin.php {
deny all;
}

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

Il est possible de le contourner en accédant à /admin.php/index.php :

Comment prévenir

Pour prévenir ces problèmes, vous devez utiliser l'expression ~ au lieu de l'expression = dans les règles ACL de Nginx, par exemple :

COPYCOPY

location ~* ^/admin {
deny all;
}

Contournement de AWS WAF ACL avec le pliage de ligne

Il est possible de contourner la protection AWS WAF dans un en-tête HTTP en utilisant la syntaxe suivante où le AWS WAF ne comprendra pas que l'en-tête X-Query contient une charge utile d'injection SQL alors que le serveur node derrière le comprendra :

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

Références

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :