OWASP Juice Shop ressemble à une boutique en ligne tout à fait normale. On y vend du jus de pomme, du jus de banane et un jus de citron mystérieusement toujours en rupture de stock. Elle contient aussi plus d'une centaine de failles de sécurité, un tableau des scores caché qui suit chacune de vos découvertes, et le premier défi consiste justement à trouver ce tableau. Si vous n'avez jamais piraté d'application web, c'est la façon la plus amusante d'apprendre.
Ce guide lance OWASP Juice Shop en une seule commande, explique comment fonctionnent le score board et les étoiles de difficulté, puis détaille les dix premiers défis dans l'ordre qui vous apprendra le plus. Il couvre aussi le mode CTF intégré, qui transforme votre Juice Shop en CTF d'entraînement pour débutants. Toutes les classes de failles que vous croiserez ici figurent dans l'OWASP Top 10, et si vous voulez des leçons guidées en parallèle, notre cours sur les attaques d'applications web explique chaque classe pas à pas, dans le navigateur.
En bref : OWASP Juice Shop est une boutique web gratuite et volontairement vulnérable, avec 116 défis de hacking notés de 1 à 6 étoiles. Lancez docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop, ouvrez http://localhost:3000 et commencez par trouver le score board caché. Terminez les défis à 1 et 2 étoiles avant de toucher aux plus difficiles, et gardez l'application sur localhost.
Qu'est-ce qu'OWASP Juice Shop ?
OWASP Juice Shop est une boutique en ligne volontairement non sécurisée, écrite en JavaScript et en TypeScript, que vous faites tourner sur votre machine pour la pirater délibérément. Elle couvre tout l'OWASP Top 10 ainsi que de nombreuses failles tirées d'applications réelles, et chaque vulnérabilité est un défi suivi sur un tableau des scores intégré. Elle est gratuite et open source, sous licence MIT.
Le projet existe depuis 2014. Il a été lancé par Bjoern Kimminich, il est maintenu par des bénévoles et il a le statut de projet Flagship de l'OWASP, le label que l'OWASP donne à ses projets les plus matures. La version actuelle sur la branche principale du dépôt GitHub officiel est la 20.3.0.
Ce qui la distingue des applications d'entraînement plus anciennes, c'est la forme de la cible. Juice Shop est une application monopage Angular qui dialogue avec une API REST Node.js, comme beaucoup d'applications web modernes. Vous finissez par lire des bundles JavaScript, interroger des endpoints JSON et modifier le stockage du navigateur, ce qui ressemble bien plus au bug bounty réel que d'envoyer un formulaire sur une page PHP.
Le fichier des défis du dépôt en liste 116, répartis sur six niveaux de difficulté :
| Difficulté | Défis | À quoi vous attendre |
|---|---|---|
| 1 étoile | 13 | Explorer, lire le code de la page, modifier une seule chose |
| 2 étoiles | 19 | Une attaque classique : injection SQL simple, IDOR, XSS |
| 3 étoiles | 27 | Enchaîner deux idées ou utiliser un proxy |
| 4 étoiles | 26 | De la vraie recherche, un peu de script |
| 5 et 6 étoiles | 31 | Difficile. Attendez-vous à échouer plusieurs fois, puis lisez le guide |
Comment installer OWASP Juice Shop
Utilisez Docker. Le projet propose aussi des archives prêtes à l'emploi et une installation depuis les sources, mais elles exigent une version de Node.js compatible (22, 24 ou 26 au moment où nous écrivons), et c'est sur ces incompatibilités de version que les débutants perdent leur première soirée. Avec le conteneur, il suffit de trois étapes.
- Installez Docker. Docker Desktop sous Windows ou macOS, Docker Engine sous Linux. Vérifiez qu'il fonctionne avec
docker version. - Lancez Juice Shop. Exécutez
docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop. Le premier lancement télécharge l'image, ce qui prend une minute ou deux. - Ouvrez-la. Allez sur
http://localhost:3000. Vous devez voir une bannière de bienvenue et une grille de produits remplie de jus.
La partie 127.0.0.1 de cette commande compte. Elle demande à Docker de n'accepter que les connexions venant de votre propre machine. Sans elle, Docker publie le port sur toutes les interfaces réseau, et n'importe qui sur votre Wi-Fi peut atteindre une application web conçue pour être cassée.
Deux choses vont vous dérouter si personne ne vous prévient.
- La base de données s'efface à chaque redémarrage. Le projet appelle cela l'auto-réparation : si vous cassez quelque chose, redémarrez le conteneur et tout repart de zéro. Votre progression survit parce que Juice Shop l'enregistre dans un cookie du navigateur pendant 30 jours au maximum et la restaure à la visite suivante. Les réglages du score board permettent aussi d'enregistrer un fichier de sauvegarde.
- Certains défis apparaissent comme indisponibles sous Docker. Le projet désactive 17 défis potentiellement dangereux, comme l'exécution de code à distance ou le XXE, quand il détecte un conteneur. C'est une sécurité par défaut, pas une installation ratée. Définir
NODE_ENV=unsafeles réactive, mais vous n'en aurez pas besoin avant des mois.
Quelques défis exigent aussi de configurer un fournisseur d'IA avant de pouvoir être résolus, parce qu'ils visent un chatbot. Laissez-les de côté au début.
N'utilisez pas la démo publique pour pirater. Le projet héberge une instance de démonstration pour que l'on puisse voir la dernière version, et son README demande aux visiteurs de ne pas l'attaquer. Juice Shop est aussi conçue pour un seul utilisateur par instance : si vous hackez entre amis, chacun lance son propre conteneur.
Le score board est votre carte
Juice Shop ne vous montre jamais de lien vers son tableau des scores. Le menu propose une connexion, un panier, une page « À propos » et rien d'autre qui semble intéressant. Trouver le score board est le premier défi à 1 étoile, et il enseigne le réflexe qui résout la moitié des autres : le navigateur a déjà le code, alors lisez-le.
Ouvrez les outils de développement de votre navigateur (F12), allez dans l'onglet Sources (Débogueur dans Firefox) et ouvrez main.js. Le fichier est minifié : cliquez sur le bouton {} pour le rendre lisible. Cherchez score et vous tomberez sur un bloc de définitions de routes Angular, dont l'une s'appelle score-board. Allez sur http://localhost:3000/#/score-board : une bannière verte vous annonce que vous avez résolu un défi, accompagnée d'une petite pluie de confettis.
Cette liste de routes est un cadeau. Elle nomme chaque page que les développeurs ont créée, y compris celles qu'ils n'ont reliées nulle part. Copiez-la dans un fichier de notes avant toute autre chose, parce que plusieurs défis suivants se résument à « aller sur la page que personne n'a liée ».
Une fois sur le score board, trois fonctions le rendent beaucoup plus pratique :
- Le filtre de difficulté. Masquez tout ce qui dépasse 2 étoiles. Voir 116 défis d'un coup est le moyen le plus rapide de se sentir perdu.
- Les indices. Chaque défi a un bouton Hints qui débloque les indices un par un. Utilisez le premier sans hésiter. Gardez le second pour après vingt minutes de blocage.
- Le Hacking Instructor. Les défis marqués d'une icône de chapeau de diplômé ont un tutoriel interactif qui vous guide à l'écran pendant l'attaque. Il y en a onze, dont Score Board, DOM XSS et Login Admin. C'est le départ le plus doux possible.
Si deux ou trois défis semblent se résoudre en même temps, c'est normal. Vous pouvez fermer d'un coup une pile de notifications « défi résolu » en maintenant Maj pendant que vous cliquez sur le X de l'une d'elles, ce qui est d'ailleurs, fort à propos, un défi à 1 étoile.
Vos 10 premiers défis OWASP Juice Shop
Voici l'ordre que nous donnerions à un ami pour son premier jour. Chaque défi enseigne une idée différente, et ensemble ils couvrent l'essentiel de l'OWASP Top 10 à un niveau débutant. Essayez chacun pendant quinze minutes avant de lire la solution qui suit. C'est en cherchant que vous apprenez.
1. Score Board (1 étoile)
Traité plus haut. Leçon : caché ne veut pas dire protégé. Si le client connaît la route, vous aussi.
2. Error Handling (1 étoile)
Provoquez une erreur que l'application aurait dû intercepter. Le plus rapide : demandez un endpoint REST qui n'existe pas, comme http://localhost:3000/rest/qwertz. Au lieu d'une 404 polie, vous obtenez une page d'erreur avec une stack trace et le nom des bibliothèques utilisées par le serveur. Leçon : les messages d'erreur sont de la reconnaissance gratuite. Les attaquants y récupèrent sans arrêt des noms de frameworks et des chemins de fichiers.
3. Privacy Policy et Security Policy (1 et 2 étoiles)
Connectez-vous avec un compte que vous avez créé et lisez la politique de confidentialité. Faites ensuite ce que fait un chercheur prudent avant de tester un site : demandez /.well-known/security.txt. Ce fichier est un vrai standard qui indique aux chercheurs comment signaler une faille. Leçon : sur un vrai programme, lisez les règles et le contact de divulgation avant d'envoyer le moindre payload.
4. Confidential Document (1 étoile)
La page « À propos » renvoie vers des conditions d'utilisation situées à /ftp/legal.md. Supprimez le nom du fichier dans l'URL et allez sur /ftp. Le serveur liste tout le dossier, et acquisitions.md est un document que la boutique n'a jamais voulu publier. Leçon : quand vous voyez un chemin de fichier, essayez toujours le dossier parent.
5. Zero Stars (1 étoile)
Le formulaire Customer Feedback refuse de s'envoyer tant que vous n'avez pas choisi une note, donc un avis à zéro étoile semble impossible. Écrivez un commentaire, résolvez le captcha, puis inspectez le bouton Submit dans les DevTools. Il porte un attribut disabled. Supprimez cet attribut et cliquez. Le serveur accepte une note de zéro, parce que seul le navigateur la vérifiait. Leçon : la validation côté client sert le confort de l'utilisateur, pas la sécurité.
6. DOM XSS (1 étoile)
Collez ceci dans la barre de recherche et appuyez sur Entrée :
<iframe src="javascript:alert(`xss`)">
Une boîte d'alerte apparaît. Le terme recherché a été écrit dans la page sans être encodé, donc le navigateur l'a traité comme du HTML. Leçon : chaque endroit où votre saisie réapparaît dans la page est un endroit où tester le cross-site scripting.
7. Login Admin (2 étoiles)
C'est le contournement de connexion classique par injection SQL. Sur la page de connexion, saisissez ceci comme e-mail et n'importe quoi comme mot de passe :
' or 1=1--
L'apostrophe ferme la chaîne de l'e-mail dans la requête SQL du serveur, or 1=1 rend la condition vraie pour tous les utilisateurs, et -- met en commentaire la vérification du mot de passe. La base renvoie son premier utilisateur, qui se trouve être l'administrateur. Leçon : dès qu'une apostrophe change le comportement de l'application, vous tenez quelque chose qui mérite d'être creusé.
8. Admin Section (2 étoiles)
Vous vous souvenez de la liste de routes de main.js ? L'une d'elles s'appelle administration. Aller sur /#/administration en tant qu'utilisateur normal renvoie une erreur 403. Faites-le en étant connecté comme l'admin du défi 7 et la page s'ouvre, avec la liste de tous les utilisateurs inscrits et tous les avis clients. Leçon : une faille en débloque souvent une autre. Les vraies découvertes sont le plus souvent des chaînes.
9. Five-Star Feedback (2 étoiles)
Toujours connecté en admin, utilisez la page d'administration pour supprimer tous les avis à 5 étoiles. Le défi est petit, mais il montre ce que fait un attaquant une fois qu'il a un accès administrateur : nuire à l'entreprise, discrètement.
10. View Basket (2 étoiles)
Connectez-vous avec votre compte et ajoutez un produit au panier. Ouvrez les DevTools, allez dans Application, puis Session Storage, et repérez une valeur nommée bid, l'identifiant de votre panier. Modifiez-la d'une unité et rechargez la page du panier. Vous regardez maintenant le panier de quelqu'un d'autre. C'est une IDOR, une référence directe non sécurisée à un objet, et les chasseurs de bug bounty adorent cette classe de failles parce qu'elle ne demande aucun outil particulier. Leçon : si un identifiant est un nombre, essayez le nombre suivant.
Cela fait dix défis, et vous avez touché au contrôle d'accès défaillant, à l'injection, au XSS, aux erreurs de configuration et à l'exposition de données sensibles. La plupart des débutants mettent deux ou trois soirées pour en arriver là, ce qui est un bon rythme.
Les outils à ajouter après la première soirée
Tout ce qui précède ne demande qu'un navigateur. Vers le niveau 3 étoiles, vous commencerez à sentir les limites des DevTools, et deux outils règlent le problème.
- Un proxy d'interception. Burp Suite Community Edition ou OWASP ZAP se place entre votre navigateur et Juice Shop et vous permet de mettre en pause, modifier et rejouer chaque requête. Beaucoup de défis à 3 étoiles, comme passer une commande avec une quantité négative, deviennent bien plus simples quand vous pouvez modifier le corps JSON avant qu'il n'atteigne le serveur. Choisissez-en un et tenez-vous-y. Nous prendrions Burp, la référence du métier pour le test web.
- L'API REST elle-même. Le front-end de Juice Shop appelle des endpoints comme
/api/Productset/rest/products/search?q=. Ouvrez-les directement dans le navigateur ou aveccurl. Beaucoup de défis se résolvent plus facilement contre l'API qu'à travers la jolie interface, et c'est vrai aussi pour les vraies cibles.
En pratique, ceux qui bloquent sur Juice Shop manquent rarement d'un outil. Ils sautent l'étape ennuyeuse de la prise de notes. Gardez un fichier avec chaque route, endpoint, adresse e-mail d'utilisateur et message d'erreur que vous voyez. Au niveau 3 étoiles, ce fichier fait la moitié du travail.
Le mode CTF de Juice Shop : votre compétition d'entraînement
Si votre vrai objectif est de participer à des compétitions CTF, Juice Shop a une fonction que la plupart des guides oublient. Lancez-la avec la configuration ctf et chaque défi résolu affiche un code de flag que vous pouvez soumettre à un tableau des scores, exactement comme dans un CTF de type jeopardy :
docker run -d -e "NODE_ENV=ctf" -p 127.0.0.1:3000:3000 bkimminich/juice-shop
Le mode CTF masque aussi les indices et le bandeau GitHub, si bien que l'ensemble ressemble moins à un tutoriel et plus à un concours. Si vous perdez un flag, cliquez sur l'étiquette « solved » du score board pour réafficher la notification.
Pour organiser un événement pour un club, une classe ou un groupe d'amis, l'outil juice-shop-ctf-cli du projet (npm install -g juice-shop-ctf-cli) génère un fichier d'import pour CTFd, FBCTF ou RootTheBox, avec chaque défi, catégorie et valeur en points déjà renseignés. Chaque joueur a quand même besoin de sa propre instance de Juice Shop, et toutes les instances doivent partager la même clé secrète, définie avec la variable d'environnement CTF_KEY, pour que les flags correspondent. Les détails se trouvent dans le chapitre CTF du guide officiel.
Nous aimons ce format comme première compétition pour une raison simple. Le premier CTF en direct d'un débutant se passe souvent mal : les défis sont trop durs, le chrono tourne et personne n'explique rien. Un CTF Juice Shop entre amis garde la pression du classement et le rituel de la soumission de flags, tout en laissant les cibles à votre portée. Faites-le une fois, et votre premier vrai événement vous semblera familier.
Quand vous bloquez : indices, guide et solutions
Juice Shop est accompagnée d'un livre officiel gratuit, Pwning OWASP Juice Shop, à lire en ligne ou à télécharger en PDF. La partie II explique chaque catégorie de vulnérabilité avec des indices. L'annexe contient une solution pas à pas pour chaque défi.
Cette annexe est aussi utile que dangereuse. Lisez une solution trop tôt et vous apprenez la réponse à une énigme au lieu de la façon de penser qui résout les dix suivantes. Une règle qui marche : avant d'ouvrir une solution, notez trois choses que vous avez essayées et pourquoi chacune a échoué. Si vous n'en trouvez pas trois, vous n'avez pas encore assez cherché. Si vous les avez, lisez la solution, puis refaites le défi de zéro sans regarder.
Pour situer Juice Shop dans un ensemble plus large, notre tutoriel DVWA couvre l'autre cible locale classique. DVWA vous montre le code PHP vulnérable de chaque module, ce qui la rend meilleure pour comprendre la cause d'une faille. Juice Shop cache ses failles et vous oblige à les trouver, ce qui en fait un meilleur entraînement au vrai test d'intrusion. Faire les deux est le meilleur départ gratuit en sécurité web.
Ce que Juice Shop ne vous apprendra pas
Juice Shop est une application web, et seulement une application web. Vous n'y toucherez ni à l'élévation de privilèges sous Linux, ni au scan réseau, ni à Active Directory, ni à l'exploitation de binaires. Les vraies compétitions CTF ont des catégories pour tout cela, donc voyez Juice Shop comme votre parcours web, pas comme tout votre plan d'entraînement.
Certains défis sont aussi volontairement farfelus. Le score board les étiquette Shenanigans ou Contraption, ce qui signifie qu'ils sont là pour le plaisir plutôt que pour le réalisme. Faites-les sans problème, mais ne jugez pas votre progression sur eux.
Enfin, vous savez toujours qu'il y a une faille. Chaque défi du score board vous dit que quelque chose est cassé, et à peu près où. Les vraies applications ne le font pas, et le passage de « je sais qu'il y a une IDOR quelque part » à « je me demande s'il y a quoi que ce soit ici » est exactement ce à quoi les plateformes de labs et les programmes de bug bounty vous entraînent ensuite.
Considérations légales et éthiques
Rappel critique : obtenez toujours une autorisation écrite explicite avant de tester un système. Votre propre conteneur Juice Shop est autorisé par définition. Une vraie boutique en ligne ne l'est pas, même si elle y ressemble.
- Restez sur localhost. Liez le port à
127.0.0.1comme indiqué plus haut. Une Juice Shop publique est une invitation ouverte pour quiconque lance un scanner. - N'essayez jamais ces payloads sur des sites réels. Taper
' or 1=1--dans un formulaire de connexion qui ne vous appartient pas constitue un accès frauduleux à un système informatique, puni en France par l'article 323-1 du Code pénal, et par des lois équivalentes presque partout ailleurs. - Passez par les programmes de bug bounty pour les vraies cibles. Ils vous donnent une autorisation écrite et un périmètre. Lisez le périmètre avant de tester.
- Laissez l'instance de démonstration tranquille. Les mainteneurs l'hébergent pour présenter les nouvelles versions, pas pour qu'on l'attaque.
Questions fréquentes
OWASP Juice Shop est-elle gratuite ?
Oui. OWASP Juice Shop est open source sous licence MIT, et le guide officiel, Pwning OWASP Juice Shop, se lit gratuitement en ligne ou se télécharge. Il vous faut seulement un ordinateur capable de faire tourner Docker ou Node.js.
Combien de défis compte OWASP Juice Shop ?
Le fichier des défis du dépôt actuel en liste 116, notés de 1 à 6 étoiles. Dans un conteneur Docker, 17 défis potentiellement dangereux sont désactivés par défaut et quelques autres exigent un fournisseur d'IA, donc certains apparaîtront comme indisponibles.
Comment trouver le score board de Juice Shop ?
Ouvrez les DevTools, cherchez main.js dans l'onglet Sources, rendez-le lisible et cherchez « score ». La route s'appelle score-board, donc allez sur http://localhost:3000/#/score-board. Le trouver résout le premier défi.
Quel est le login admin de Juice Shop ?
La voie prévue pour les débutants est l'injection SQL : saisissez ' or 1=1-- comme e-mail et n'importe quel mot de passe. Cela résout le défi Login Admin. Se connecter avec le vrai mot de passe de l'admin, sans injection, est un autre défi à 2 étoiles appelé Password Strength.
OWASP Juice Shop convient-elle aux débutants ?
Oui, à condition de commencer par les défis à 1 et 2 étoiles et d'utiliser les tutoriels du Hacking Instructor. Au départ, un navigateur suffit. Sauter directement aux défis à 4 étoiles est la façon habituelle dont les débutants abandonnent.
Peut-on utiliser Juice Shop pour un CTF ?
Oui. Lancez-la avec NODE_ENV=ctf et chaque défi résolu produit un code de flag. L'outil juice-shop-ctf-cli exporte les défis vers CTFd, FBCTF ou RootTheBox pour héberger une vraie compétition, avec une instance de Juice Shop par joueur.
Vos prochaines étapes
OWASP Juice Shop est la façon gratuite la plus agréable d'apprendre le hacking web : une commande Docker, un score board caché et une bonne centaine de failles classées par difficulté. Trouvez le score board ce soir, terminez les dix défis ci-dessus cette semaine, et lancez le mode CTF avec un ami dès que la colonne des 2 étoiles est au vert.
Quand vous voudrez des cibles qui ne vous disent pas où se trouve la faille, essayez Hack the Login ou IDOR Explorer, tous deux dans votre navigateur, sans rien installer. Notre cours sur les attaques d'applications web couvre dans l'ordre chaque classe de vulnérabilité de cet article, et l'offre gratuite de HackerDNA ne demande aucune carte bancaire pour démarrer.
Fait partie de la série OWASP Top 10
Articles liés :
- Tutoriel DVWA
- Tutoriel OWASP Juice Shop
- Tutoriel injection SQL
- Le Cross-Site Scripting expliqué
- Vulnérabilité IDOR
- Contrôle d'accès défaillant