Tank · Code Alliance Developers
Termux Arsenalby Tank · Code Alliance

Leitura técnica · use o conhecimento de forma ética e autorizada

← estudos
Infraestrutura12 min · intermediário · atualizado 2026-07-05

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

1/4
nível 1 · introdução acessívelnível 2 · em brevenível 3 · em breve

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

  1. Estático puro — HTML/CSS/JS/imagens (landing, docs). Ferramenta: wget/httrack.
  2. SPA dinâmica — a app monta o DOM via JS (React/Vue/Angular). Precisa headless browser: katana, gowitness, playwright.
  3. 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-limits

wget 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.txt

gowitness — screenshot + HTML de cada rota descoberta

go install github.com/sensepost/gowitness@latest

gowitness file -f rotas.txt \
  --screenshot-path ./screens \
  --write-db

Por 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

  1. Suba Burp Suite (ou mitmproxy) e configure o navegador para passar por ele.
  2. Faça login normalmente no painel do lab. O Burp registra cookies/JWT.
  3. Ative o Passive Crawl e navegue por todas as áreas: menus, modais, wizards. Isso popula o Site Map.
  4. Exporte o Site Map (Target → Site map → Save selected items) ou Copy URLs in this branch para uma lista.
  5. 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

0/6

Ferramentas do Arsenal úteis aqui

  • Nmapmapear o clone antes de atacar
  • Nucleirodar templates YAML no mirror local
  • Sqlmaptestar SQLi contra o backend clonado
  • Subfinderdescobrir subdomínios antes de escolher o que espelhar

Template OffSec · aplicar antes de rodar

Objetivo → Preparação → Execução → Evidência → Ética

→ guia do lab

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

  1. Descoberta passiva (DNS, certificados, Shodan) antes de tocar no alvo
  2. Sweep leve: nmap -sn na faixa autorizada
  3. Enumeração de serviços: nmap -sV -sC -p- com rate limitado
  4. Fingerprint de versões e checagem cruzada em CVE (searchsploit)
  5. 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.

0/5

Prática segura · Infraestrutura

→ guia do lab

Monte 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.