Jacob is making a simple website to test out his PHP skills. He is certain that his website has absolutely zero security issues. Find out the fatal bug in his website.
Analyse
site web
Lorsque nous arrivons sur le site web, nous arrivons sur la page suivante :
c’est un simple formulaire de login qui nous demande un nom d’utilisateur et un mot de passe. j’ai essayé de me connecter avec l’utilisateur test/test pour voir le fonctionnement du site web. Le site me renvoie un message d’erreur me disant que le nom d’utilisateur est incorrect.
J’ai donc essayé de me connecter avec l’utilisateur admin/admin et le site m’a renvoyé un message d’erreur me disant que le mot de passe est incorrect.
J’ai pensé à une attaque BruteForce, mais cette technique est interdite dans le CTF. J’ai donc analysé le code source de la page pour voir s’il n’y avait pas des informations cachées.
Il s’agit effectivement du code source de la fonction de login.
Exploit
Bypass de la fonction de login
Nous pouvons voir que le login est forcément admin, de plus on remarque rapidement une faille de type juggling dans la ligne suivante :
elseif (hash('sha1', $password) == "0") {
Voici une ressource qui permet d’expliquer le fonctionnement des magic hash et du type juggling.
Connexion en tant qu’admin
Nous pouvons maintenant nous connecter en tant qu’admin en utilisant le mot de passe 10932435112.
Nous arrivons sur la page admin, nous pouvons voir un formulaire qui nous permet de consulter les informations d’un utilisateur en fonction de son ID. J’essaye de saisir les ID 1,2,3 et voici le résultat :
Nous pouvons voir qu’il y’a un flag : dsc{n0_1m_n0t_th3_4dm1n} 👀
ahah les challmakers sont super drôles 😂
j’ai donc creusé légèrement plus loin et j’ai tenté une SQLi basique :
La payload est fausse et elle génère un message d’erreur me laissant comme indice le DBMS utilisé : SQLite3.
Burp suite
J’ai envoyé un ID aléatoire et intercepté la requête avec Burp suite :