Proxy / WAF Protections Bypass
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Técnicas desta pesquisa.
Exemplo de regra Nginx:
Para evitar bypasses, o Nginx realiza a normalização de caminho antes de verificá-lo. No entanto, se o servidor backend realizar uma normalização diferente (removendo caracteres que o Nginx não remove), pode ser possível contornar essa defesa.
Configuração do Nginx FPM:
Nginx está configurado para bloquear o acesso a /admin.php
, mas é possível contornar isso acessando /admin.php/index.php
.
Neste post é explicado que o ModSecurity v3 (até 3.0.12), implementou incorretamente a variável REQUEST_FILENAME
que deveria conter o caminho acessado (até o início dos parâmetros). Isso ocorre porque ele realizava uma decodificação de URL para obter o caminho.
Portanto, uma solicitação como http://example.com/foo%3f';alert(1);foo=
no mod security suporá que o caminho é apenas /foo
porque %3f
é transformado em ?
, encerrando o caminho da URL, mas na verdade o caminho que um servidor receberá será /foo%3f';alert(1);foo=
.
As variáveis REQUEST_BASENAME
e PATH_INFO
também foram afetadas por esse bug.
Algo semelhante ocorreu na versão 2 do Mod Security que permitiu contornar uma proteção que impedia o acesso do usuário a arquivos com extensões específicas relacionadas a arquivos de backup (como .bak
) simplesmente enviando o ponto codificado em URL como %2e
, por exemplo: https://example.com/backup%2ebak
.
Esta pesquisa menciona que era possível contornar as regras do AWS WAF aplicadas sobre cabeçalhos HTTP enviando um cabeçalho "malformado" que não era devidamente analisado pela AWS, mas sim pelo servidor backend.
Por exemplo, enviando a seguinte solicitação com uma injeção SQL no cabeçalho X-Query:
Foi possível contornar o AWS WAF porque ele não entendia que a próxima linha faz parte do valor do cabeçalho, enquanto o servidor NODEJS entendia (isso foi corrigido).
Comumente, os WAFs têm um certo limite de comprimento de requisições para verificar e, se uma requisição POST/PUT/PATCH ultrapassar esse limite, o WAF não verificará a requisição.
Para o AWS WAF, você pode verificar a documentação:
Firewalls de Aplicação Web mais antigos com Core Rule Set 3.1 (ou inferior) permitem mensagens maiores que 128 KB desativando a inspeção do corpo da requisição, mas essas mensagens não serão verificadas quanto a vulnerabilidades. Para versões mais novas (Core Rule Set 3.2 ou mais recentes), o mesmo pode ser feito desativando o limite máximo do corpo da requisição. Quando uma requisição excede o limite de tamanho:
Se modo de prevenção: Registra e bloqueia a requisição.
Se modo de detecção: Inspeciona até o limite, ignora o restante e registra se o Content-Length
exceder o limite.
De Akamai:
Por padrão, o WAF inspeciona apenas os primeiros 8KB de uma requisição. Ele pode aumentar o limite para até 128KB adicionando Metadados Avançados.
De Cloudflare:
Até 128KB.
Dependendo da implementação da normalização Unicode (mais informações aqui), caracteres que compartilham compatibilidade Unicode podem ser capazes de contornar o WAF e executar como a carga útil pretendida. Caracteres compatíveis podem ser encontrados aqui.
https://github.com/ustayready/fireprox: Gere uma URL de gateway de API para ser usada com ffuf
https://github.com/rootcathacking/catspin: Semelhante ao fireprox
https://github.com/PortSwigger/ip-rotate: Plugin do Burp Suite que usa IPs de gateway de API
https://github.com/fyoorer/ShadowClone: Um número dinamicamente determinado de instâncias de contêiner é ativado com base no tamanho do arquivo de entrada e no fator de divisão, com a entrada dividida em partes para execução paralela, como 100 instâncias processando 100 partes de um arquivo de entrada de 10.000 linhas com um fator de divisão de 100 linhas.
Técnicas diferentes podem ser usadas para contornar os filtros de regex nos firewalls. Exemplos incluem alternar maiúsculas e minúsculas, adicionar quebras de linha e codificar cargas úteis. Recursos para os vários bypasses podem ser encontrados em PayloadsAllTheThings e OWASP. Os exemplos abaixo foram retirados deste artigo.
nowafpls: Plugin do Burp para adicionar dados aleatórios às requisições para contornar WAFs por comprimento
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
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
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
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
, ;
Tamanho máximo de um corpo de requisição web que pode ser inspecionado para proteções do Application Load Balancer e AWS AppSync
8 KB
Tamanho máximo de um corpo de requisição web que pode ser inspecionado para proteções do CloudFront, API Gateway, Amazon Cognito, App Runner e Verified Access**
64 KB