Lab 1 - Bypassing WAF
Este desafio de nível 1 consiste em explorar uma vulnerabilidade de Cross-Site Scripting (XSS) em uma aplicação web protegida por um WAF (Web Application Firewall) básico.
URL do Desafio: https://brunomenozzi.com/desafios/xss.php
A meta é injetar e executar código JavaScript (triggar um alert()) no contexto da página.
- Ao acessar a página, o retorno é
Please provide search parameter. Isso nos indica que a aplicação espera um parâmetro de busca (search) a ser provido na URL. - Testamos a reflexão do parâmetro:
- Acesso:
https://brunomenozzi.com/desafios/xss.php?search=teste - Resultado: A palavra
testeé refletida na página.
- Acesso:
(Ufa, não precisamos fazer fuzzing de parâmetros. Os labs geralmente facilitam essa parte para focar na exploração, e não no guessing!)
Agora, tentamos injetar uma tag HTML simples para verificar o XSS:
- Tentativa:
https://brunomenozzi.com/desafios/xss.php?search=<img> - Resultado: A requisição é bloqueada, retornando uma mensagem de que nossa ação foi considerada maliciosa.
- Teste de Permissão de Tag:
https://brunomenozzi.com/desafios/xss.php?search=<teste> - Resultado: A tag reflete sem problemas.
Conclusão: O WAF está bloqueando tags HTML específicas (como <img> ou script), mas não está verificando de forma robusta. Precisamos de um bypass para a tag bloqueada.
Existem múltiplos caminhos para contornar esse tipo de filtro. Abaixo, apresento duas abordagens válidas para este nível do desafio:
Muitos WAFs de nível básico utilizam filtros de string simples que são Case Sensitive. Se o filtro procurar apenas por <img> em minúsculo, ele pode ignorar a versão em maiúsculo.
- Ataque Final (Payload): Utilizamos a tag
IMGem maiúsculo.
<IMG src=x onerror=alert(document.domain)>
- URL Completa (Encoded):
https://brunomenozzi.com/desafios/xss.php?search=%3CIMG%20src=x%20onerror=alert(document.domain)%3E
Você também pode tentar evitar tags comuns e usar uma abordagem menos óbvia (exemplo: onload em uma tag permitida ou tags SVG), embora a abordagem de case-sensitivity seja a solução pretendida para este nível.
- Recomendação: Se você conseguiu o XSS usando a abordagem 3.1, tente agora resolver o próximo desafio (
xss2.php) que provavelmente exige uma técnica mais avançada!
O código fonte desse desafio pode ser encontrado aqui: https://github.com/zeroc00I/eternalnoobchallenges/blob/main/1-simple-waf.php