Laboratórios de hacking
Como criar uma rede Docker isolada para o seu laboratório
Crie uma rede Docker sem acesso à internet, rode o OWASP Juice Shop nela e publique uma cópia para o navegador só em 127.0.0.1.
Rode o OWASP Juice Shop em um contêiner Docker restrito à sua máquina, confirme que ele responde e pare-o sem deixar nada rodando.
O OWASP Juice Shop é uma aplicação web intencionalmente vulnerável. Você pode rodá-la em um contêiner Docker no seu próprio computador, abri-la no navegador em http://127.0.0.1:3000 e praticar segurança web sem tocar em sistemas de terceiros. O projeto diz incluir vulnerabilidades de todo o OWASP Top Ten, além de outras encontradas em aplicações reais. A seguir estão os comandos, o que conferir depois de cada um, como manter a porta privada e como parar o laboratório.
O Juice Shop tem falhas de propósito. Mantenha-o em uma máquina e em uma rede que você controla, e nunca o exponha à internet.
Rode estes dois comandos em um terminal:
docker --version
docker infoO primeiro mostra a versão do cliente Docker. O segundo se conecta ao Docker Engine e mostra a configuração. Se docker info informar que não consegue se conectar ao daemon, inicie o Docker Desktop ou o serviço do Docker e rode o comando de novo. O texto do erro muda conforme a plataforma, então siga a documentação de instalação do Docker se a solução não for óbvia.
A documentação do projeto cita a imagem bkimminich/juice-shop. O README do projeto roda a imagem sem tag, o que baixa a latest. Se quiser um laboratório repetível, escolha uma tag de versão na página do Docker Hub e acrescente-a ao nome da imagem (bkimminich/juice-shop:<tag>), para saber qual versão está testando.
docker run --rm --name juice-shop-lab \
-p 127.0.0.1:3000:3000 \
bkimminich/juice-shopA opção -p publica uma porta do contêiner na máquina host. O valor 127.0.0.1:3000:3000 tem três partes: o endereço do host, a porta do host e a porta do contêiner. A referência de publicação de portas do Docker explica que um mapeamento sem endereço pode escutar em todas as interfaces do host. Colocar 127.0.0.1 na frente mantém o laboratório acessível só pela sua própria máquina.
A opção --rm remove o contêiner quando ele para. O comando roda em primeiro plano, então o terminal continua mostrando logs até você interromper. A primeira execução baixa a imagem, o que pode demorar.
Abra http://127.0.0.1:3000 no navegador da mesma máquina. Você deve ver a página inicial do Juice Shop. Se ela não carregar, leia o terminal em busca de erros e rode docker ps em outro terminal para confirmar que o contêiner está ativo e que o mapeamento de porta está correto. Clientes de VPN, proxies e redes de máquinas virtuais podem mudar o comportamento do tráfego local, então verifique essas camadas também antes de mexer nas opções.
Não troque 127.0.0.1 por 0.0.0.0 para a página abrir. Isso expõe o laboratório a outros dispositivos da sua rede.
Antes de tentar qualquer desafio, veja como o navegador e o servidor conversam. Abra as ferramentas de desenvolvedor, vá até a aba Network (Rede) e recarregue a página. Escolha uma requisição e anote:
Content-Type;Você obtém a mesma informação pelo terminal:
curl -I http://127.0.0.1:3000No Windows PowerShell 5.1, curl é um alias de outro comando, então digite curl.exe.
A opção -I envia uma requisição HEAD e mostra apenas os cabeçalhos da resposta. A RFC 9110 define os métodos, códigos de status e campos de cabeçalho que você está vendo. Estas são as primeiras linhas do que a imagem sem tag devolveu em uma execução (2026-11-08); outras versões podem diferir:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=UTF-8Anote o que o seu servidor devolve e compare.
A documentação do projeto descreve os desafios de treinamento e suas dicas. Leia esse material antes de tentar um exploit, e mantenha todos os testes apontados para 127.0.0.1. Conhecer antes o ciclo de requisição e resposta facilita avaliar os resultados de scanners depois, porque você vê o tráfego que essas ferramentas enviam e recebem.
Se o contêiner roda em primeiro plano, pressione Ctrl+C no terminal dele. Como você usou --rm, o Docker remove o contêiner assim que ele para.
Se você perdeu esse terminal, pare o contêiner a partir de outro:
docker stop juice-shop-labO Docker envia um sinal de parada e espera o contêiner encerrar. Confirme que o laboratório saiu:
docker psSe o nome do contêiner não aparecer na lista, o laboratório está parado. Fechar a aba do navegador não para o contêiner, então confira sempre com docker ps.
Se a porta já estiver em uso, o docker run falha com Bind for 127.0.0.1:3000 failed: port is already allocated. Escolha outra porta do host, como -p 127.0.0.1:3001:3000, e abra http://127.0.0.1:3001. Mantenha a parte 127.0.0.1.
Se o contêiner encerrar logo em seguida, leia os logs do terminal. Procure a primeira linha de erro, não a última.
Se a primeira execução demorar muito, o Docker está baixando a imagem e as camadas dela. As execuções seguintes começam mais rápido, porque a imagem fica guardada localmente.
Um modelo de linguagem pode explicar um código de status ou ajudar a organizar suas anotações, e a NotHoly é um lugar para isso. Ele também pode interpretar mal uma resposta e não substitui autorização nem validação manual. Cole apenas saídas do seu próprio laboratório, nunca cookies de sessão, tokens ou dados de um alvo real.
Escreva suas anotações a partir do que você observou e depois compare com as referências abaixo.
Laboratórios de hacking
Crie uma rede Docker sem acesso à internet, rode o OWASP Juice Shop nela e publique uma cópia para o navegador só em 127.0.0.1.
Laboratórios de hacking
Estruture um relatório de pentest e escreva um achado que outra pessoa consiga reproduzir, com evidência, impacto, vetor CVSS v4.0 e correção.
Laboratórios de hacking
Monte um laboratório que você pode atacar: arquivo de escopo, portas do Docker no loopback, rede isolada, caderno de notas e desmontagem limpa.