La Vie Française
đ Introduction
Lâobjectif de ce challenge est dâutiliser une faille dâinjection SQL UNION pour se connecter en tant quâadministrateur.
đ Solution
La page dâaccueil nous prĂ©sente un lien pour se connecter et un lien pour postuler qui nous permet de nous enregistrer. La premiĂšre approche consiste Ă essayer une faille SQL sur le formulaire dâauthentification pour se connecter en tant quâadministrateur.
Cependant, nous sommes rapidement confrontĂ©s Ă une limitation : le formulaire nâaccepte que les caractĂšres alphanumĂ©riques, excluant ainsi lâutilisation de guillemets, de parenthĂšses ou dâautres caractĂšres spĂ©ciaux.
Le compte administrateur âadminâ a Ă©tĂ© dĂ©sactivĂ©, donc nous devons trouver une autre mĂ©thode pour exploiter la faille SQL et trouver un compte administrateur.
La seule option qui reste est de crĂ©er un compte en utilisant le lien de âpostulerâ. Nous allons crĂ©er un compte avec le nom dâutilisateur et le mot de passe âtotoâ.
Une fois connectĂ©, si nous essayons dâaccĂ©der Ă la page â/adminâ, nous obtenons une erreur indiquant que nous ne sommes pas autorisĂ©s Ă y accĂ©der.
Les seuls Ă©lĂ©ments manipulables par lâutilisateur sont :
- Le formulaire dâauthentification (qui nâest pas exploitable comme nous lâavons vu prĂ©cĂ©demment).
- Le cookie de session UUID.
đđ UNION SQLI
Nous allons essayer de faire une injection SQL sur le cookie de session. Si nous utilisons une valeur alĂ©atoire, nous sommes redirigĂ©s vers â/loginâ.
Essayons maintenant de faire une injection SQL !
En utilisant le payload :
' OR 1=1-- -
Nous constatons que nous avons une faille SQL dans le cookie de session. Nous allons maintenant essayer de dĂ©terminer combien de colonnes peuvent ĂȘtre exploitĂ©es et si elles sâaffichent ou non dans la construction de la page.
En utilisant le payload :
' UNION SELECT 1,2,3-- -
Nous constatons que trois colonnes sont exploitables et seulement deux sont affichées dans la construction de la page.
Nous allons maintenant déterminer la base de données sur laquelle nous nous trouvons en utilisant la fonction database().
En utilisant le payload :
' UNION SELECT database(),2,3-- -
Nous dĂ©couvrons que nous sommes actuellement sur la base de donnĂ©es âusersdbâ.
Nous allons ensuite essayer de déterminer les tables disponibles dans cette base de données en utilisant le payload :
' UNION SELECT TABLE_NAME,TABLE_SCHEMA,3 from INFORMATION_SCHEMA.TABLES where table_schema='usersdb'-- -
Nous dĂ©couvrons quâil y a une table appelĂ©e âusersâ dans la base de donnĂ©es âusersdbâ.
Nous allons maintenant dĂ©terminer les noms des colonnes dans la table âusersâ En utilisant le payload :
' UNION select COLUMN_NAME,TABLE_SCHEMA,3 from INFORMATION_SCHEMA.COLUMNS where table_name='users'-- -
Nous ne trouvons quâune seule colonne, qui est âidâ. Nous devons utiliser la fonction âgroup_concatâ pour concatĂ©ner les valeurs en une seule chaĂźne, sĂ©parĂ©e par une virgule et voir toutes les colonnes ! .
En utilisant le payload :
' UNION select GROUP_CONCAT(COLUMN_NAME),TABLE_SCHEMA,3 from INFORMATION_SCHEMA.COLUMNS where table_name='users'-- -
Nous obtenons toutes les colonnes de la tables users.
Les colonnes qui nous intĂ©ressent sont : âidâ, âusernameâ, âpasswordâ et âstatusâ.
Nous allons maintenant regarder le contenu de la table âusersâ en utilisant les colonnes mentionnĂ©es prĂ©cĂ©demment En utilisant le payload :
'UNION SELECT group_concat(id,'|', username,'|',password,'|', status SEPARATOR '\n'),NULL,3 FROM users-- -
Nous pouvons voir quâil y a un seul compte âadminâ avec les informations suivantes : {madeleineforestier:fo2DVkgShz2pPJ}.
đđ Authentification en tant quâadministrateur
Maintenant, nous avons deux options pour nous connecter en tant quâadministrateur :
- RĂ©cupĂ©rer lâUUID avec la SQLI pour lâutilisateur âmadeleineforestierâ et le remplacer.
- Se connecter en utilisant les identifiants de lâadministrateur.
Une fois connectĂ© en tant quâadministrateur, nous accĂ©dons Ă la page â/adminâ pour obtenir le flag !
đ FLAG : 404CTF{B3w4Re_th3_d3STruct1v3s_Qu0tes}
đ
đ Conclusion
En utilisant une faille dâinjection SQL UNION sur le cookie de session, nous avons pu contourner les limitations du formulaire dâauthentification et accĂ©der au compte administrateur.