SQLI (Conditional Responses) - Pentesting Web

Vulnérabilité SQLI:

Nous découvrons un panneau de réinitialisation de mot de passe vulnérable à une injection SQL

. En interceptant les requêtes avec BurpSuite, nous obtenons le message "We have e-mailed your password".

Lorsque nous tentons une injection SQL basique, cela réussit et nous recevons à nouveau le même message d'erreur, confirmant que l'injection fonctionne. Le test d'injection basique est:

iojfeifif' or 1=1-- -

Sqli Conditional responses:

Bien que les résultats de la requête SQL ne soient pas renvoyés et qu'aucun message d'erreur n'apparaisse, l'application affiche le message "We have e-mailed your password" sur la page si la requête renvoie des lignes.

Nous vérifions cette hypothèse en lançant une injection conditionnelle en utilisant la fonction substring pour extraire les premières lettres du nom de la base de données.

Exemples d'injection :

  • Tester la première lettre du nom de la base : dwwdw' or substring(database(),1,1)='u'-- -

  • Tester la deuxième lettre du nom de la base : dwwdw' or substring(database(),2,1)='s'-- -

Énumeration nom de la base de données:

Nous automatisons le processus de découverte du nom de la base de données en utilisant un script Python qui envoie des requêtes avec des charges utiles spécifiques et récupère les résultats lorsque le serveur affiche la réponse "We have e-mailed your password".

Énumération des bases de données :

Nous modifions la charge utile pour énumérer toutes les bases de données présentes sur le serveur. Nous utilisons la fonction group_concat de la base de données information_schema.schemata pour récupérer toutes les bases de données disponibles. Cette étape permet de découvrir toutes les bases de données présentes.

Énumération des tables de la base usage_blog :

Après avoir trouvé la base de données usage_blog, nous modifions à nouveau la charge utile pour énumérer les tables de cette base de données. Nous utilisons la fonction group_concat pour récupérer les noms de toutes les tables de la base usage_blog.

Énumération des colonnes de la table admin_users :

Une fois les tables identifiées, nous ciblons la table admin_users pour énumérer ses colonnes. Nous utilisons encore une fois la fonction group_concat pour récupérer les noms des colonnes de cette table spécifique.

Affichage des username et password :

Pour afficher les identifiants et mots de passe des utilisateurs dans la table admin_users, la requête SQL sera modifiée de manière à concaténer les champs username et password

admin:$2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2

Mis à jour

Ce contenu vous a-t-il été utile ?