Reconhecimento e Enumeração
⏱️ Tempo de leitura: ~4 min
Primeira aula-laboratório. Aqui você para de ler sobre ataque e começa a atacar — num alvo controlado.
Pré-requisitos
- Ter feito as Aulas 1, 2 e 3 (a Aula 3 — Redes — cobre portas, Nmap e HTTP, que você usa aqui)
- Um Linux com Docker instalado (o Kali já vem com as ferramentas de pentest, mas qualquer um serve)
Como se pensa um ataque
Um pentest não é sair chutando exploit. Segue uma ordem:
- Reconhecimento — descobrir o que o alvo expõe (portas, serviços, páginas).
- Enumeração — cavar cada coisa encontrada (diretórios, parâmetros, usuários).
- Interceptação — ver e alterar o tráfego (próxima página).
- Exploração — abusar do que achou.
As páginas de laboratório seguem essa ordem. Hoje é o começo: achar a superfície de ataque.
O alvo: OWASP Juice Shop
Você vai atacar o OWASP Juice Shop, uma loja online propositalmente cheia de falhas. Suba ela com Docker:
Acesse http://localhost:3000 no navegador.
Não tem Docker? Instale com um comando (é o script oficial):
No WSL, ligue o serviço depois com sudo service docker start (e use sudo no docker run se pedir permissão).
A ferramenta: Gobuster
Um site tem páginas que não aparecem nos links visíveis: painéis, backups, arquivos esquecidos. O Gobuster acha isso testando nomes de uma wordlist, um atrás do outro.
gobuster dir -u http://localhost:3000 -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
dir— modo de busca por diretórios e arquivos-u— a URL do alvo-w— a wordlist (a lista de nomes a testar)
⚠️ Se a
seclistsnão estiver instalada, rodesudo apt install seclists.
Cada achado vem com o status HTTP (lembra do extra de HTTP?): 200 existe, 301/302 redireciona, 403 é "existe, mas você não pode ver".
Desafios
Aqui vai o objetivo, não a receita. Tente sozinho antes de abrir as dicas — o valor está em descobrir.
Desafio 1 — Ache o que não devia estar público
O Juice Shop tem um diretório com arquivos internos que nunca deveriam estar acessíveis de fora. Enumere o site e encontre ele.
💡 Dica
Se ele reclamar que "o servidor responde igual pra URLs que não existem", use --exclude-length com o número que ele mostrar.
✅ Solução
O Gobuster encontra /ftp (Status 200). Abra http://localhost:3000/ftp no navegador e veja os arquivos internos listados.
Extra — Baixe o que o servidor não deixa
Nesse diretório que você achou tem arquivos (.bak, .kdbx) que o servidor recusa entregar — ele só libera .md e .pdf. Baixe um deles mesmo assim.
💡 Dica
Pesquise poison null byte.
✅ Solução
Um poison null byte (%2500) engana a validação:
O servidor vê o .md no fim e libera; o sistema de arquivos para no null byte e entrega o .bak.
Por que %2500 e não %00? O null byte é %00. Aqui ele vai duplo-encodado: %25 é o próprio %, então %2500 só vira %00 depois de uma camada de decode. Alguma camada decodifica a URL uma vez antes de checar a extensão — um %00 puro seria consumido cedo demais. É a mesma ideia de camadas de encoding da Aula 2: quando uma some no caminho, você põe outra por cima.
Isso resolve o Forgotten Sales Backup (⭐⭐⭐⭐); o mesmo truque baixa o package.json.bak (Forgotten Developer Backup).
Próximos passos
Você já mapeou o alvo. A próxima página é o Burp Suite: interceptar e alterar o que o navegador manda pro servidor.