Pular para o conteúdo
Novo

DeepSeek V4.1 Flash grátis por 7 dias: 10M tokens por dia após qualquer recarga. Até 30/11.

Como funciona

OWASP Juice Shop com Docker: um laboratório local para praticar

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.

Iniciante5 min de leituraPor NotHoly

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 que você precisa

  • Um computador seu, ou que você administre, com permissão para rodar Docker nele.
  • Docker Engine ou Docker Desktop. Instale seguindo a documentação oficial do Docker para o seu sistema operacional.
  • Um navegador com ferramentas de desenvolvedor. Chrome, Firefox e Edge já vêm com elas.
  • Espaço em disco e memória para um contêiner. O tamanho da imagem depende da tag escolhida, então confira antes a página dela no Docker Hub.

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.

1. Confirme que o Docker está funcionando

Rode estes dois comandos em um terminal:

bash
docker --version
docker info

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

2. Inicie o laboratório só em loopback

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.

bash
docker run --rm --name juice-shop-lab \
  -p 127.0.0.1:3000:3000 \
  bkimminich/juice-shop

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

3. Observe o carregamento de uma página inofensiva

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:

  • o método da requisição, como GET;
  • o código de status da resposta;
  • um cabeçalho de resposta, como Content-Type;
  • a diferença entre o documento HTML e um arquivo JavaScript.

Você obtém a mesma informação pelo terminal:

bash
curl -I http://127.0.0.1:3000

No 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:

text
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=UTF-8

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

4. Pare e remova o laboratório

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:

bash
docker stop juice-shop-lab

O Docker envia um sinal de parada e espera o contêiner encerrar. Confirme que o laboratório saiu:

bash
docker ps

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

Problemas comuns

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.

Onde entra um modelo de linguagem

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.

Referências

Fontes

  1. OWASP Juice Shop project
  2. OWASP Juice Shop documentation
  3. Docker port publishing
  4. docker container run reference
  5. docker container stop reference
  6. RFC 9110, HTTP Semantics
  7. OWASP Top 10

Mais em Laboratórios de hacking

Laboratórios de hacking

Como escrever um bom relatório de pentest

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.

Intermediário9 min de leitura

Laboratórios de hacking

Como montar um laboratório doméstico dentro da lei

Monte um laboratório que você pode atacar: arquivo de escopo, portas do Docker no loopback, rede isolada, caderno de notas e desmontagem limpa.

Iniciante4 min de leitura