DVWA Low level – Injections SQL

DVWA Low level – Injections SQL

Nous sommes au premier niveau de DVWA le niveau dit “low”.

On se trouve face à un formulaire de recherche. Si on saisit “1” , on obtient en retour “admin”.
La première chose à faire va être de voir à quel point on peut agir sur la requête faite en base de données.

Les requêtes SQL faites via PHP sont délimitées par des guillemets ou des apostrophes.

DVWA Low level

Si on saisit ”1′” on obtient une erreur SQL, cela prouve que l’on peut agir sur la requête SQL.

Voici un exemple de requête possible :

"SELECT first_name, last_name FROM users WHERE user_id = '$id'"
"SELECT first_name, last_name FROM users WHERE user_id = '1' Informations ajoutées dans la requête SQL sans occasionner d'erreur''"

Faisons simple pour l’instant en essayant d’afficher plus d’un utilisateur avec : 0′ OR user_id >’

"SELECT first_name, last_name FROM users WHERE user_id = '1' OR user_id >'"

Voici le résultat que l’on pourra obtenir :

DVWA Low level

Ce que nous voyons ici est une altération de la requête SQL passée par le script PHP.

Au lieu de simplement demander l’affichage des informations pour l’utilisateur ayant l’ID “1” , on a demandé l’affichage des informations pour l’utilisateur dont l’ID est 1 OU ID supérieur à rien (on aurait pu mettre 0). Cela va donc afficher les informations de tous les utilisateurs de la table.

Dans un autre exemple nous pouvons également  essayer de deviner le nom de la colonne contenant les mots de passe puis de les afficher grâce à une requête “UNION” permettant de joindre une autre requête SELECT.

Exemple :  1′ UNION select password, last_name from users# :

"SELECT first_name, last_name FROM users WHERE user_id = '1' UNION select password, last_name from users#"

Ici, nous arrivons donc à exploiter la faille SQL injection afin d’afficher directement les mots de passe des utilisateurs dans la page de réponse, ou plutôt le hash des mots de passe utilisateurs :

DVWA Low level

Fonctionnement et impact d’une attaque SQL Injection Blind

Passons maintenant aux failles de type Injection Blind.

Ici, le principe est le même qu’une injection SQL “standard”. Il s’agit d’injecter des données pour agir sur la base de données de l’application web visée. Sauf qu’il y a absence d’affichage d’erreur permettant de “guider” une injection SQL standard.

Lorsque l’on parle d’injection SQL Blind, c’est que l’on cherche à exploiter une faille de type Injection SQL sans avoir la possibilité de voir les erreurs SQL lorsque aucun code ne renvois d’erreurs dans la page PHP.

 

DVWA – SQL Injection blind – level “low”

Nous pouvons également faire des opérations mathématiques en SQL.

En règle générale dans un requête SQL, si l’on envoie “1+1″, cela sera automatiquement traduit par “2”.
Si l’on essaie d’envoyer la valeur “1+1” dans le formulaire, nous avons en réponse les informations de l’utilisateur “Gordon” :

DVWA Low level

 

Cela signifie deux choses :

  • Il n’y a pas de contrôle précis dans le code PHP, en tout cas pas de contrôle vérifiant que la donnée envoyée est purement un nombre sans caractère spécial par exemple
  • On peut modifier la requête SQL avec les données que l’on envoie
TOUT VOIR Ajouter une remarque
VOUS
Ajouter votre commentaire
Culte du code | 2015-2020  (Vecteurs par Freepik, Parallax par fullvector)