Vai al contenuto
New

DeepSeek V4.1 Flash free for 7 days: 10M tokens a day after a top-up of $10 or more. Until Nov 30.

How it works

OWASP Juice Shop con Docker: un laboratorio locale per esercitarsi

Esegui OWASP Juice Shop in un container Docker legato alla tua macchina, verifica che risponda e fermalo in modo pulito.

Base5 min di letturaDi NotHoly

OWASP Juice Shop è un'applicazione web volutamente vulnerabile. Puoi eseguirla in un container Docker sul tuo computer, aprirla in un browser su http://127.0.0.1:3000 ed esercitarti sulla sicurezza web senza toccare i sistemi di nessun altro. Il progetto dice di includere vulnerabilità di tutta la OWASP Top Ten, più altre trovate in applicazioni reali. Di seguito trovi i comandi, cosa controllare dopo ognuno, come tenere privata la porta e come fermare il laboratorio.

Cosa ti serve

  • Un computer di tua proprietà o che amministri, con il permesso di eseguirci Docker.
  • Docker Engine o Docker Desktop. Installalo seguendo la documentazione ufficiale di Docker per il tuo sistema operativo.
  • Un browser con gli strumenti per sviluppatori. Chrome, Firefox ed Edge li includono tutti.
  • Spazio su disco e memoria sufficienti per un container. La dimensione dell'immagine dipende dal tag che scegli, quindi controlla prima la sua pagina su Docker Hub.

Juice Shop contiene falle di proposito. Tienilo su una macchina e una rete che controlli e non esporlo mai a internet.

1. Controlla che Docker funzioni

Esegui questi due comandi in un terminale:

bash
docker --version
docker info

Il primo comando stampa la versione della CLI di Docker. Il secondo contatta il Docker engine e ne stampa la configurazione. Se docker info segnala che non riesce a connettersi al daemon, avvia Docker Desktop o il servizio Docker, poi esegui di nuovo il comando. Il testo esatto dell'errore dipende dalla piattaforma, quindi segui la documentazione di installazione di Docker se non è ovvio come risolvere.

2. Avvia il laboratorio solo su loopback

La documentazione del progetto indica l'immagine bkimminich/juice-shop. Il README del progetto la esegue senza tag, quindi scarica latest. Se vuoi un laboratorio ripetibile, scegli un tag di release sulla pagina di Docker Hub e aggiungilo al nome dell'immagine (bkimminich/juice-shop:<tag>), così sai quale versione stai testando.

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

Il flag -p pubblica una porta del container sull'host. Il valore 127.0.0.1:3000:3000 ha tre parti: indirizzo host, porta host e porta del container. Il riferimento di Docker sulla pubblicazione delle porte spiega che una mappatura senza indirizzo può restare in ascolto su tutte le interfacce dell'host. Mettere 127.0.0.1 per primo rende il laboratorio raggiungibile solo dalla tua macchina.

Il flag --rm rimuove il container quando si ferma. Il comando gira in primo piano, quindi il terminale continua a stampare log finché non lo fermi. La prima esecuzione scarica l'immagine, e può volerci un po'.

Apri http://127.0.0.1:3000 in un browser sulla stessa macchina. Dovresti vedere la home page di Juice Shop. Se non si carica, cerca errori nel terminale, poi esegui docker ps in un secondo terminale per confermare che il container sia in esecuzione e che la mappatura delle porte sia corretta. Client VPN, proxy e reti di macchine virtuali possono cambiare il comportamento del traffico locale, quindi controlla anche quelli prima di cambiare qualche flag.

Non sostituire 127.0.0.1 con 0.0.0.0 per far caricare la pagina. Quell'impostazione espone il laboratorio agli altri dispositivi della tua rete.

3. Osserva un caricamento di pagina innocuo

Prima di provare una challenge, guarda come dialogano browser e server. Apri gli strumenti per sviluppatori, passa alla scheda Network e ricarica la pagina. Scegli una richiesta e annota:

  • il metodo della richiesta, per esempio GET;
  • il codice di stato della risposta;
  • un header della risposta, per esempio Content-Type;
  • la differenza tra il documento HTML e un file JavaScript.

Puoi ottenere le stesse informazioni da un terminale:

bash
curl -I http://127.0.0.1:3000

In Windows PowerShell 5.1, curl è un alias di un altro comando, quindi scrivi curl.exe.

L'opzione -I invia una richiesta HEAD e stampa solo gli header della risposta. RFC 9110 definisce i metodi, i codici di stato e i campi header che stai guardando. Queste sono le prime righe di ciò che l'immagine senza tag ha restituito in un'esecuzione (2026-11-08); altre release possono essere diverse:

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

Annota cosa restituisce il tuo server e confronta.

La documentazione del progetto descrive le challenge di formazione e i relativi suggerimenti. Leggi quel materiale prima di provare un exploit e tieni ogni test puntato su 127.0.0.1. Conoscere prima il ciclo di richiesta e risposta rende più facile valutare in seguito i risultati degli scanner, perché puoi vedere il traffico che questi strumenti inviano e ricevono.

4. Ferma e rimuovi il laboratorio

Se il container gira in primo piano, premi Ctrl+C nel suo terminale. Avendo usato --rm, Docker rimuove il container appena si ferma.

Se hai perso quel terminale, ferma il container da un altro:

bash
docker stop juice-shop-lab

Docker invia un segnale di stop e aspetta che il container termini. Verifica che il laboratorio non ci sia più:

bash
docker ps

Se il nome del container non compare nell'elenco, il laboratorio è fermo. Chiudere la scheda del browser non ferma il container, quindi controlla docker ps ogni volta.

Problemi comuni

Se la porta è già occupata, docker run fallisce con Bind for 127.0.0.1:3000 failed: port is already allocated. Scegli un'altra porta host, per esempio -p 127.0.0.1:3001:3000, e apri http://127.0.0.1:3001. Mantieni la parte 127.0.0.1.

Se il container esce subito, leggi i log nel terminale. Cerca la prima riga di errore, non l'ultima.

Se la prima esecuzione richiede molto tempo, Docker sta scaricando l'immagine e i suoi layer. Le esecuzioni successive partono più in fretta perché Docker conserva l'immagine in locale.

Dove entra un modello linguistico

Un modello linguistico può spiegare un codice di stato o aiutarti a organizzare gli appunti, e NotHoly è un posto dove farlo. Può anche sbagliare su cosa significa una risposta, e non sostituisce né il permesso scritto né la validazione manuale. Incolla solo output del tuo laboratorio, mai cookie di sessione, token o dati di un target reale.

Scrivi gli appunti partendo da ciò che hai osservato, poi confrontali con i riferimenti qui sotto.

Riferimenti

Fonti

  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

Altro su Laboratori di hacking

Laboratori di hacking

Perché usare NotHoly per CTF e laboratori

Un modello che scrive l'exploit del tuo challenge e spiega perché funziona, triage statico del binario, e un solve che gira nel tuo lab, non nel nostro.

Intermedio3 min di lettura

Laboratori di hacking

Come creare una rete Docker isolata per il tuo lab

Crea una rete Docker senza accesso a internet, avvia OWASP Juice Shop al suo interno e pubblica una copia per il browser solo su 127.0.0.1. Verifica ogni passo.

Base12 min di lettura

Laboratori di hacking

Come scrivere un buon report di pentest

Dai una struttura a un report di pentest e scrivi un finding che altri possano riprodurre, con prove, impatto, un vettore CVSS v4.0 e una correzione.

Intermedio8 min di lettura