Lab Mutillidae : s’exercer à l’injection SQL et au XSS sur une application web PHP vulnérable
OWASP Mutillidae II est un site PHP volontairement vulnérable, avec le Top 10 OWASP et bien plus : injection SQL, cross-site scripting, injection de commandes, injection LDAP et beaucoup d’autres, avec des indices sur chaque page. Ce lab le démarre, avec sa base de données et son annuaire LDAP, dans la copie privée de chaque élève.
Chaque cible se trouve dans la copie de lab de l’élève, qui n’a aucune route vers internet ni vers un autre élève : la seule chose que l’élève puisse attaquer est l’application que le lab a démarrée pour lui. La règle est énoncée en tête du lab : attaquez votre propre copie, jamais un site qui n’est pas à vous.
Ce que les élèves apprennent
Le Top 10 OWASP dans un site réaliste, avec de nombreuses failles au choix. Le site a un niveau de sécurité, 0, 1 et 5, que son menu fait défiler : on peut refaire le même exercice pour voir ce que change le correctif. Un nom injecté dans la recherche d’utilisateur trouve tous les comptes au niveau 0 et aucun au niveau 5. Il convient à une initiation à la sécurité web ou à la programmation sécurisée : validation des entrées, encodage des sorties, requêtes paramétrées, authentification et sessions.
Le lancer dans votre navigateur
Le lab crée la base de données de l’élève, il n’y a donc rien à configurer, et il n’indique qu’il tourne que lorsque le site fonctionne.
- Ouvrir la page Conteneur. Ouvrez « Créer » dans la barre et choisissez « Lancer un conteneur ». Tout le monde peut ouvrir la page, et le lab Git et le lab SQL se lancent sans compte. Tous les autres labs demandent un compte gratuit : créez-en un, connectez-vous, puis appuyez sur « Démarrer ».
- Trouver le lab. La carte « Laboratoires d’exemple » liste tous les exemples. Trouvez OWASP Mutillidae II.
- Appuyer sur Démarrer. « Démarrer » le lance tel quel, en un clic. « Modifier le fichier d’abord » ouvre le fichier compose pour que vous puissiez le changer avant de démarrer.
- L’ouvrir. Sur la page du lab, appuyez sur Ouvrir. Le haut de chaque page affiche le niveau de sécurité, qui commence à 0. Connectez-vous avec admin et le mot de passe adminpass pour les pages qui demandent un compte. Toggle Hints et Toggle Security se trouvent dans le menu. Arrêter puis relancer le lab donne un site neuf, comme Reset DB.
Que demander aux élèves de rendre
Une capture de chaque exercice réussi, avec l’adresse du lab visible, et pour chacun une explication écrite de leurs mots sur la nature de la faille, la saisie utilisée, pourquoi elle fonctionne et comment le code aurait dû être écrit. Pour un travail plus poussé, demandez aussi le même exercice au niveau 5 et ce que le code y fait autrement.
Une leçon de base sur ce lab
Mutillidae Basics est une petite leçon qui se fait dans ce lab, commençant par la règle selon laquelle l’élève n’attaque que sa propre copie et rien d’autre. Depuis le terminal, il se connecte avec curl, recherche un compte par son nom, change le nom pour que la recherche trouve tous les comptes, puis relève le niveau de sécurité et voit la même saisie ne rien trouver.
Un compte personnel gratuit la reçoit dans le module Basics, qui se trouve sur l’« Accueil », chaque établissement peut la copier depuis le dossier Basics de la Bibliothèque, et un nouvel établissement l’a dans un module appelé Lab Basics (Sample). Elle est volontairement petite : elle montre à un enseignant ce qu’est une leçon qui se fait dans un lab, et le lab fait le reste. Copiez-la dans un module à vous pour la modifier.
Le code sur GitHub
Le fichier compose lance les trois images publiques du projet Mutillidae, une pour le site, une pour sa base MariaDB et une pour son annuaire LDAP, chacune figée par sa version et son empreinte et exécutée telle quelle. Mutillidae est sous licence GPL-3.0 et appartient à ses auteurs ; nous ne le distribuons pas. Le lab n’a aucune sortie vers internet : tout ce qui va chercher une page sur un autre site n’a rien à atteindre.
En faire un travail
Indiquez dans la tâche les exercices à réaliser et ce qu’il faut rendre.
- Créer le lab. Dans votre module, ajoutez une tâche et choisissez la carte « Lab de conteneurs », puis « Dans un dépôt GitHub ». Indiquez https://github.com/mitsurutech/lab-mutillidae avec la branche main. Le fichier compose par défaut est compose.yaml. Faites d’abord un fork du dépôt si vous voulez le modifier.
- Publier et l’essayer. « Publier » fige le commit qui vous a été montré : un changement ultérieur dans le dépôt ne modifie donc pas un lab que vous avez déjà proposé. Démarrez d’abord votre propre copie.
- Le distribuer. Attribuez-le comme n’importe quelle tâche, avec une échéance si vous le souhaitez, et indiquez dans la tâche ce qu’il faut faire et ce qu’il faut rendre.
- Noter ce qui est rendu. Ouvrez la copie d’un élève et le travail rendu, notez-le et renvoyez-le avec un motif s’il demande un complément.
Questions fréquentes
- Quels sont les identifiants de connexion ?
- admin avec le mot de passe adminpass, les mêmes dans chaque copie, et chacun peut créer un autre compte sur la page Login/Register. Une copie est privée pour l’élève qui l’a démarrée, et rien d’extérieur ne peut l’atteindre.
- Pourquoi le site repart-il de zéro après un redémarrage ?
- La base est créée à neuf à chaque démarrage du lab et n’est pas enregistrée : un site cassé par un exercice se répare en arrêtant puis en relançant le lab, ou avec Reset DB dans le menu.
- Pourquoi faut-il autant de mémoire ?
- Le lab compose trois programmes, le site, sa base et son annuaire, limités à 512, 384 et 256 mégaoctets. Ensemble, ils en utilisent environ 210 au repos, bien en deçà de ce qu’une copie peut utiliser.