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

7.3 KiB

Bypassando Proteções de Proxy / WAF

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

Bypassando Regras de ACL do Nginx

Exemplo de restrição do Nginx:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

NodeJS

  • Como o Nginx inclui o caractere \xa0 como parte do caminho, a regra ACL para a URI /admin não será acionada. Consequentemente, o Nginx encaminhará a mensagem HTTP para o backend;
  • Quando a URI /admin\x0a é recebida pelo servidor Node.js, o caractere \xa0 será removido, permitindo a recuperação bem-sucedida do endpoint /admin.
Versão do Nginx Caracteres de Bypass do 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

O Flask remove os caracteres \x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B e \x09 do caminho da URL, mas o NGINX não.

Versão do Nginx Caracteres de Bypass do 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

Abaixo, você encontrará uma demonstração de como a proteção ACL pode ser contornada adicionando o caractere \x09 ou no final do caminho:

Versão do Nginx Caracteres de Bypass do Spring Boot
1.22.0 ;
1.21.6 ;
1.20.2 \x09, ;
1.18.0 \x09, ;
1.16.1 \x09, ;

PHP-FPM

Vamos considerar a seguinte configuração do Nginx FPM:

location = /admin.php {
deny all;
}

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

É possível contorná-lo acessando /admin.php/index.php:

Como prevenir

Para prevenir esses problemas, você deve usar a expressão ~ em vez da expressão = nas regras de ACL do Nginx, por exemplo:

COPYCOPY

location ~* ^/admin {
deny all;
}

Bypassando AWS WAF ACL com Line Folding

É possível contornar a proteção do AWS WAF em um cabeçalho HTTP usando a seguinte sintaxe, onde o AWS WAF não entenderá que o cabeçalho X-Query contém uma carga útil de injeção de SQL, enquanto o servidor node por trás entenderá:

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

Referências

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