
Um programa para testar a funcionalidade de WAF
Ferramenta de Avaliação Corporativa de WAF — Payloads de ataque reais. Resultados reais. Relatórios prontos para conformidade.
O WAF Tester avalia Firewalls de Aplicação Web (WAFs) enviando payloads de ataque reais para uma URL fornecida pelo usuário e relatando se foram bloqueados. Disponível como aplicativo Windows desktop (Electron) e como CLI Python que funciona em qualquer lugar.

Esta ferramenta destina-se apenas a testes de segurança autorizados. Use-a apenas contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. Testes não autorizados de sistemas de terceiros podem violar o Computer Fraud and Abuse Act (CFAA) e leis equivalentes em sua jurisdição. Os autores não assumem nenhuma responsabilidade pelo uso indevido.
| Suíte | Testes | O que Cobre |
|---|---|---|
| Núcleo OWASP / CWE | 44 | SQL injection (12 variantes), XSS (10 variantes), path traversal, command injection, XXE, SSRF, Log4Shell, SSTI, open redirect |
| Rate Limiting | 3 | Burst flood (30 concorrentes), flood sequencial, bypass de rotação de IP X-Forwarded-For |
| Detecção de Bots | 10 | sqlmap, Nikto, Nmap, Scrapy, Masscan, HeadlessChrome, python-requests, curl, UA vazio, cabeçalhos Accept ausentes |
| Tentativas de Bypass | 15 | Dupla codificação URL, Unicode fullwidth, bytes nulos, variação de maiúsculas/minúsculas, ofuscação de comentários, injeção CRLF, injeção de cabeçalho Host, sobrescrita de método, truques de caminho |
| Segurança de API | 10 | GraphQL introspection/batch/enumeration, JWT none-algorithm & algorithm confusion, mass assignment, HTTP verb tampering, BOLA, content-type confusion |
| Lógica de Negócio | 8 | Quantidade negativa, submissão de preço zero, acesso a endpoint de administrador, poluição de parâmetros HTTP, enumeração de contas, exposição excessiva de dados, forced browsing, escalonamento de privilégio |
Cada teste é etiquetado para um ou mais frameworks de conformidade:
HIGH, LIKELY ou UNCERTAIN em vez de aprovação/reprovação bináriagit clone https://github.com/kpomin57/waf-tester.git
cd waf-tester
npm install
npm start
npm run build
A saída aparece em dist/ como um instalador NSIS e um .exe portátil. Nenhum pré-requisito é necessário na máquina de destino — o Electron empacota seu próprio runtime.
Uma versão em arquivo único Python que funciona em qualquer lugar onde Python esteja disponível — servidores Linux, pipelines CI/CD, contêineres Docker, WSL ou qualquer ambiente onde o .exe do Windows não seja uma opção.
pip install rich requests
python waf_tester.py --url https://target.example.com
Executa todos os 90 testes, solicita confirmação de autorização, imprime resultados codificados por cores no terminal e salva relatórios JSON e HTML no diretório atual.
| Flag | Descrição | Padrão |
|---|---|---|
--url | URL de destino (obrigatório) | — |
--suites | Suítes separadas por vírgula para executar | all |
--auth-type | none / bearer / apikey / cookie / basic | none |
--auth-value | Token, string de cookie ou valor de chave de API | — |
--auth-header | Nome do cabeçalho para autenticação de chave de API | X-API-Key |
--auth-user | Nome de usuário para Autenticação Básica | — |
--auth-pass | Senha para Autenticação Básica | — |
--no-baseline | Desabilitar comparação de linha de base | off |
--no-rotate-ua | Desabilitar rotação de User-Agent | off |
--waf-header | Enviar cabeçalho de identificação X-WAF-Tester | off |
--output | terminal, json, html (separados por vírgula) | all three |
--output-dir | Diretório para salvar arquivos de relatório | . |
--timeout | Timeout por requisição em segundos | 10 |
--proxy | URL de proxy para todas as requisições (ex.: http://127.0.0.1:8080) | off |
--confirm | Pular a confirmação de autorização | off |
# Executar todas as suítes
python waf_tester.py --url https://app.example.com
# Executar apenas as suítes OWASP e API
python waf_tester.py --url https://app.example.com --suites owasp,api
# Autenticação com token Bearer
python waf_tester.py --url https://app.example.com/api \
--auth-type bearer --auth-value eyJhbGciOiJIUzI1NiJ9...
# Autenticação com chave de API
python waf_tester.py --url https://app.example.com/api \
--auth-type apikey --auth-header X-API-Key --auth-value mykey123
# Salvar relatórios em uma pasta, pular confirmação (CI/CD)
python waf_tester.py --url https://app.example.com \
--output-dir ./reports --confirm
# Apenas saída no terminal — nenhum arquivo salvo
python waf_tester.py --url https://app.example.com --output terminal
# Roteirizar tráfego através do Burp Suite
python waf_tester.py --url https://app.example.com --proxy http://127.0.0.1:8080
docker run --rm -v $(pwd)/reports:/reports \
python:3.12-slim sh -c \
"pip install rich requests -q && python waf_tester.py \
--url https://target.example.com \
--output-dir /reports --confirm"
- name: Avaliação WAF
run: |
pip install rich requests
python waf_tester.py \
--url ${{ secrets.WAF_TARGET_URL }} \
--suites owasp,api,bypass \
--output json \
--output-dir ./reports \
--confirm
- name: Fazer upload do relatório
uses: actions/upload-artifact@v3
with:
name: waf-report
path: reports/
O CLI Python pode rotear todo o tráfego de teste através do Burp Suite, fornecendo um histórico HTTP completo de cada payload que o WAF Tester envia. Isso é útil para inspeção manual de requisições e respostas, ajuste fino de payloads, solução de problemas de comportamento inesperado do WAF e uso do próprio scanner ou repeater do Burp em achados interessantes.
O Burp Suite executa um listener de proxy local (padrão 127.0.0.1:8080). Quando você aponta as variáveis de ambiente de proxy do WAF Tester para esse endereço, cada requisição que a ferramenta faz passa pelo Burp antes de atingir o destino. Você vê cada payload no histórico HTTP do Burp com a requisição e resposta completas — código de status, cabeçalhos, corpo — exatamente como o WAF viu.
1. Inicie o Burp Suite e confirme que o listener de proxy está ativo:
Abra Burp → Proxy → Proxy Settings → confirme que o listener está em 127.0.0.1:8080 (ou anote sua porta, se diferente).
2. Exporte o certificado CA do Burp e o confie (configuração única):