Skip to main content
Bruno Menozzi aka Zeroc00i
Back to homepage

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


Passo a Passo da Resolução

A meta é injetar e executar código JavaScript (triggar um alert()) no contexto da página.

1. Identificando o Parâmetro

  1. 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.
  2. Testamos a reflexão do parâmetro:
    • Acesso: https://brunomenozzi.com/desafios/xss.php?search=teste
    • Resultado: A palavra teste é refletida na página.

(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!)

2. Testando e Identificando o Bloqueio do WAF

Agora, tentamos injetar uma tag HTML simples para verificar o XSS:

  1. Tentativa: https://brunomenozzi.com/desafios/xss.php?search=<img>
  2. Resultado: A requisição é bloqueada, retornando uma mensagem de que nossa ação foi considerada maliciosa.
  3. Teste de Permissão de Tag: https://brunomenozzi.com/desafios/xss.php?search=<teste>
  4. 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.


3. Duas Abordagens para o Bypass (XSS)

Existem múltiplos caminhos para contornar esse tipo de filtro. Abaixo, apresento duas abordagens válidas para este nível do desafio:

3.1. Abordagem Clássica: Case Sensitivity

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 IMG em 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](https://brunomenozzi.com/desafios/xss.php?search=%3CIMG%20src=x%20onerror=alert(document.domain)%3E)

3.2. Abordagem Customizada (Preparando para o Nível 2)

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 (simple_waf_2.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