SQL Injection Wargame Tutorial :: Level 4


Détails du niveau

But : Exploiter le script du niveau 4 (ici) afin d'obtenir le mot de passe de l'utilisateur "Xen". Le script vulnérable ne sert normalement qu'à afficher, pour un membre identifié par son id, diverses informations comme son emplacement ou le nombre de messages postés.

Structure de table contenant les informations sur les membres :

id - int
username - char
password - char
location - char
post - integer

Configuration de l'interpréteur PHP :

magic_quotes_gpc est activé.

Version MySQL : MySQL 3.x

Le support du mot-clé UNION ne sera donc pas disponible.

Reconaissance


Donc, nous avons un script où :
- nous ne pouvons pas utiliser le mot-clé UNION et donc ne pouvons donc pas choisir quels champs seront affichés
- nous ne pouvons pas non plus utiliser de quotes ou de guillemets, mais cela ne sera pas très génant (cf. l'utilisation de char() au niveau 2)

Exploitation

Nous allons donc devoir utiliser les critères de recherche sur les chaines pour obtenir des informations sur le mot de passe.

Recherche de la longueur du mot de passe :

Recherche du premier caractère du mot de passe :

En utilisant la fonction substring() de MySQL, il nous est possible de rechercher un caractère à la fois.
Ceci permet de diminuer très fortement le nombre d'essais à effectuer.
De plus, les comparaisons de chaine étant par défaut non sensibles à la casse sous MySQL, nous allons forcer
le comportement inverse grâce à l'opérateur BINARY.

Script de recherche du mot de passe :

En utilisant la fonction substring() de MySQL, il nous est possible de rechercher un caractère à la fois.
Ceci permet de diminuer très fortement le nombre d'essais à effectuer.
De plus, les comparaisons de chaine étant par défaut non sensibles à la casse sous MySQL, nous allons forcer
le comportement inverse grâce à l'opérateur BINARY.
Fin du concours ....