Baixar um site/painel inteiro para testar em laboratório isolado
Como espelhar um site ou painel web autorizado para dentro de um lab offline — wget, httrack, katana, gowitness e Burp — sem tocar em produção nem quebrar a lei.
🎧 audiobook · nível 1
Baixar um site/painel inteiro para testar em laboratório isolado
Escopo legal — leia antes
Só espelhe alvos que você é dono ou tem autorização escrita (contrato de pentest, bug bounty com scope explícito, seu próprio painel). Baixar painel de terceiros sem permissão pode configurar crime (Lei 12.737/2012 e 14.155/2021). Este estudo assume laboratório próprio.
Testar XSS, CSRF, IDOR, SQLi ou lógica de negócio direto em produção é ruim por dois motivos: gera ruído em WAF/SIEM do alvo e arrisca derrubar a aplicação. A prática correta é clonar a superfície (HTML + assets + rotas) para dentro de uma VM/container isolado e martelar à vontade lá.
Três níveis de clonagem
- Estático puro — HTML/CSS/JS/imagens (landing, docs). Ferramenta: wget/httrack.
- SPA dinâmica — a app monta o DOM via JS (React/Vue/Angular). Precisa headless browser: katana, gowitness, playwright.
- Painel autenticado — rotas atrás de login. Combina proxy interceptador (Burp/mitmproxy) com crawler que reaproveita a sessão.
1) Mirror estático com wget
wget continua sendo o canivete suíço para sites estáticos: recursivo, respeita links relativos e reescreve para navegação offline.
Mirror completo de um site autorizado
pkg install wget -y
wget \
--mirror \
--convert-links \
--adjust-extension \
--page-requisites \
--no-parent \
--wait=1 --random-wait \
--user-agent="Mozilla/5.0 (LabMirror)" \
-e robots=off \
-P ./mirror-alvo \
https://meu-lab.exemplo.com/- --mirror = -r -N -l inf --no-remove-listing (recursivo infinito com timestamps).
- --convert-links reescreve URLs absolutas → relativas, deixando o site navegável em file://.
- --page-requisites baixa CSS, JS, imagens e fontes de cada página.
- --wait/--random-wait evita disparar rate-limit no seu próprio lab.
- -e robots=off ignora robots.txt — só use em alvo próprio.
2) HTTrack — quando você quer presets e retomada
HTTrack em Termux/Linux
pkg install httrack -y
httrack "https://meu-lab.exemplo.com/" \
-O "./httrack-alvo" \
"+*.meu-lab.exemplo.com/*" \
-v --robots=0 --sockets=4 --disable-security-limitswget vs httrack
wget é mais rápido e scriptável; httrack tem filtros finos (+/− por padrão de URL) e melhor retomada em conexão instável. Snapshot único → wget. Revisitar semanalmente → httrack.
3) SPAs e painéis JS — headless browser
React/Vue/Angular servem um shell HTML vazio; o conteúdo real aparece só depois que o JS roda. wget baixa o esqueleto e para. Você precisa de um crawler que execute JavaScript.
Katana (ProjectDiscovery) — crawler headless
pkg install golang -y
go install github.com/projectdiscovery/katana/cmd/katana@latest
katana -u https://meu-lab.exemplo.com \
-headless -jc -kf all -d 5 \
-o rotas.txtgowitness — screenshot + HTML de cada rota descoberta
go install github.com/sensepost/gowitness@latest
gowitness file -f rotas.txt \
--screenshot-path ./screens \
--write-dbPor que combinar os dois
katana lista rotas reais renderizadas pelo JS; gowitness materializa cada uma como PNG + HTML pós-render. Você fica com um mapa visual do painel + DOM final pronto para grepar por endpoints, tokens acidentais e formulários.
4) Painel atrás de login — proxy + crawler autenticado
- Suba Burp Suite (ou mitmproxy) e configure o navegador para passar por ele.
- Faça login normalmente no painel do lab. O Burp registra cookies/JWT.
- Ative o Passive Crawl e navegue por todas as áreas: menus, modais, wizards. Isso popula o Site Map.
- Exporte o Site Map (Target → Site map → Save selected items) ou Copy URLs in this branch para uma lista.
- Reproduza a mesma sessão fora do Burp: curl -b cookies.txt ou wget --load-cookies cookies.txt para capturar HTML autenticado.
wget usando cookies exportados do navegador
# Exporte cookies.txt via extensão "Get cookies.txt LOCALLY" (formato Netscape)
wget --load-cookies=cookies.txt \
--mirror --convert-links --page-requisites \
--no-parent -e robots=off \
-P ./painel-auth \
https://meu-lab.exemplo.com/admin/Tokens expiram
JWT/cookies de painel duram minutos a poucas horas. Comece o mirror logo após o login e monitore respostas 401/403 — se aparecerem, refaça login e reexporte os cookies.
5) Subindo o clone no laboratório
Servidor local isolado (sem rede externa)
cd mirror-alvo
python3 -m http.server 8080 --bind 127.0.0.1
# ou, se o mirror tem .php estático:
php -S 127.0.0.1:8080- Rode dentro de VM (VirtualBox/UTM) ou container Docker sem bridge com sua rede real.
- Aponte /etc/hosts do lab para o IP do container quando o app usar hostnames absolutos.
- Tire snapshot antes de começar a atacar — assim você reverte em segundos entre testes destrutivos.
Checklist de operação
Checklist interativo
Antes de espelhar
Ferramentas do Arsenal úteis aqui
Template OffSec · aplicar antes de rodar
Objetivo → Preparação → Execução → Evidência → Ética
Objetivo
Baixar cópia estática/dinâmica de um site ou painel autorizado para estudar comportamento offline, sem gerar tráfego repetido no alvo.
Pré-requisitos
- Autorização escrita cobrindo faixa de IPs e janela
- Kali/Parrot ou Termux com nmap, masscan, netcat
- Rede host-only ou VPN para não escapar o escopo
- Baseline do ambiente (o que é esperado estar aberto)
Passos
- Descoberta passiva (DNS, certificados, Shodan) antes de tocar no alvo
- Sweep leve: nmap -sn na faixa autorizada
- Enumeração de serviços: nmap -sV -sC -p- com rate limitado
- Fingerprint de versões e checagem cruzada em CVE (searchsploit)
- Documente cada porta aberta com screenshot do banner
Evidências a coletar
- Saída completa do nmap em XML (-oX) e greppable (-oG)
- Screenshots de banners e páginas de login
- Hashes SHA-256 das saídas para provar integridade
Regra prática: se você não guardou evidência reprodutível, o achado não existe.
Guia prático (lab autorizado)
alvo · Alvo próprio, HTB/THM ou site de treinamento (testphp.vulnweb.com)
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://alvo-autorizado.tld/verificar · Abra a cópia com `python3 -m http.server` e valide que todos os assets carregam sem tocar o alvo original novamente.
Checklist interativo
Checklist ético (marcar antes do primeiro comando)
Autorização, escopo, lab e proteção de dados. Sem 100%, não roda fora do lab.
Prática segura · Infraestrutura
→ guia do labMonte um ambiente isolado antes de qualquer teste — use Docker (DVWA/juice-shop), uma VM host-only ou um alvo autorizado (HTB, TryHackMe, PortSwigger Academy).
Nunca aponte para alvo em produção. Se estiver no celular, use proot-distro + Debian para não sujar o Termux principal.
