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

6.4 KiB

Bypass de Proteções Proxy / WAF

Aprenda hacking em AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Bypass de Regras 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 de ACL para o URI /admin não será acionada. Consequentemente, o Nginx encaminhará a mensagem HTTP para o backend;
  • Quando o URI /admin\x0a é recebido 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

Considere 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;
}

Burlando ACL do AWS WAF com Dobra de Linha

É possível burlar 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 um payload de injeção 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

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: