Description
Loguez-vous en tant qu’admin et récupérez le flag.
Le flag est le password de l’admin.
Vous pouvez utiliser test:test.
Resolution
Nous nous retrouvons devant une basique page d’identification, avec deux champs, un pour le nom d’utilisateur, l’autre pour le mot de passe.
Lorsqu’on se logue avec les identifiants de test, nous arrivons sur une page contenant le message « Vous êtes l’utilisateur test. » ainsi qu’un lien pour se déloguer.
Rien de spécial ici, on va donc essayer de se loguer en tant qu’admin avec une injection SQL classique.
Imaginons à quoi peut ressembler la requête SQL d’identification :
SELECT login, password FROM users WHERE login='$login' AND password='$password'
En partant de cette idée, il suffit d’envoyer « admin'--
» dans $login
pour s’identifier en tant qu’admin sans devoir saisir de password.
On se retrouve bien logué en tant qu’admin, mais un message s’est ajouté en nous disant que le flag est dans le mot de passe de l’admin.
Revoyons alors notre requête SQL afin de remplacer le nom d’utilisateur affiché après s’être logué par le mot de passe de l’admin à l’aide d’une injection par UNION :
' UNION SELECT password,password FROM user WHERE user='admin'--
Comme le login « » (vide) n’existe pas, c’est notre requête qui est prise en compte pour le SELECT, dans lequel nous demandons à récupérer le password dans les deux colonnes utilisées dans la page d’après identification.
Parfait !
Le flag est : MMA{cats_alice_band}