Niveau "Medium"
Dernière mise à jour
Dernière mise à jour
Le formulaire est légèrement modifié ici puisque l'application présente non plus un champ de type <input>
mais une liste de sélection <select>
:
Pour un soucis de simplicité, j'utilise ici l'extension Web Developer (possible via Burp également) qui va convertir ce nouveau formulaire en champ de type <input>
:
Je tente d'injecter ma caractère spécial "'"
afin de générer une erreur SQL :
L'erreur m'informe sur la présence d'une protection car le caractère "'"
est échappé (via le caractère "\"
). De plus, l'erreur m'indique qu'il s'agit sans doute d'une injection de type numérique et non plus de type String (nombre de "'"
entourant notre donnée).
Sans reprendre toutes les étapes de reconnaissance (déjà effectuées pour le niveau "Low"), voici l'exploitation de l'injection :
L'échappement effectué par l'application est un peu embêtant car il m'empêche d'effectuer ma clause WHERE
:
Afin de contourner cette limitation je peux, soit supprimer la clause, ce qui aura pour conséquence de retourner une liste de toutes les tables des différentes bases, ou alors, utiliser la fonction CHAR()
de MySQL :
Maintenant que je peux contourner l'échappement en place, la suite est facile :
Puis finalement :
Une fois fait, la dernière étape reste de cracker les hash md5 (32 caractères) des mots de passe en utilisant par exemple crackstation.net :