Bienvenue sur ce nouvel article !

Beaucoup de personnes, une fois face à une potentielle faille SQL, vont tenter de l’exploiter, certes, mais avec des outils automatisés tel que Sqlmap ou autres.

Il est vrai que cela peut faire gagner beaucoup de temps, cependant, il y’a 2 problèmes majeurs qui se posent :

1 – Dans certains cas, la discrétion sera plus qu’importante lors d’un pentest, et dieu sait que Sqlmap n’est pas vraiment discret
2 – Certaines personnes utilisant ce genre d’outils ne savent pas réellement comment marche une faille SQL

Ne pouvant remédier aux problème n°1, je vais tenter au mieux d’expliquer le fonctionnement des failles SQL dans ce tutoriel 🙂

# La connexion SQL

Prenons pour exemple un formulaire de connexion admin simple

et testons si il est faillible en insérant une single quote (‘) dans le champ Identifiant

Attention : Insérer un single quote dans un champ ou un paramètre ne permet en AUCUN CAS de déterminer si tel ou tel site est vulnérable ou pas.

et voici le résultat

Donc là c’est le moment où on lance sqlmap

# Comprendre l’erreur

Voici comment :

  • “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax” => Juste un message pour nous indiquer que quelque chose ne tourne pas rond
  • “to use near ” AND Password=[…]'” => Grossomodo, c’est ici que ça flanche, et c’est ici que notre injection SQL va être effectuée, par exemple : ‘ OR 1=1 # génèrera l’erreur : “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near “AND Password=[…]’ OR 1=1 # at line […]”

Cette erreur nous permet donc d’avoir un extrait de la ligne (potentiellement) vulnérable et ainsi d’adapter notre payload.

# Comprendre la syntaxe SQL et comment injecter

Il est maintenant temps de comprendre la syntaxe SQL. Je ne vais pas vous apprendre à effectuer une injection SQL complète, mais seulement à envoyer une instruction vraie.

Cette partie est un peu complexe à expliquer mais c’est pourtant une notion très simple que vous devriez déjà avoir acquise.

Entrer un single quote dans un paramètre (POST ou GET) permet de clore le champ dans lequel vous écrivez, par exemple, lors d’une connexion à un site, cette requête (SQL) va être effectuée :

SELECT password from member where username = ‘username’

Vous avez la possibilité d’écrire dans ‘username’. Utiliser un single quote vous permet de clore ce champ et d’écrire une suite à la requête, comme ‘ AND SLEEP(5), la requête deviendra donc :

SELECT password from member where username = ‘username’ AND SLEEP(5)’

Et la suite de votre requête sera correctement interprété. Si vous avez du mal à vous y faire, il suffit de vous imaginer entrain d’écrire dans le champ username et d’avoir l’obligation d’exécuter plusieurs commandes en un ligne, ce qui, quelque fois, donnera ça :

&&(name)like(0x61646D696E)&&(mid(pass,1,1))like(0x61);%00

# Non, il y a pas de faille !

Si. Enfin, c’est possible que tu te trompes. Comme dit précédemment, c’est pas parce qu’entrer un single quote ne cause pas d’erreur qu’il n’y a pas de faille (et inversement), et c’est notemment le cas pour les Blind SQL Injection.

Le but, c’est d’interroger le serveur, sauf qu’au lieu de nous répondre des données, il va nous répondre oui, ou non (True, or False). Dans le cas d’un système de connexion (je ne prends pas l’exemple le plus simple), le “Oui” représenterai un “Connexion successfull” et le “Non” un “Connexion error”. Si vous interrogez le serveur en lui demandant si la longueur de “password” est de 25 (length(password)=25) et qu’il vous réponds “Connexion successfull”, c’est que vous avez vu juste.

Le cas des Blind SQL Injection peut s’appliquer dans les mêmes cas que pour les injections SQL classiques (article, recherche, produits, etc.), elles sont justes un peu plus emmerdantes 😉

# Vous avez compris ?

En tout cas, je l’espère. Si vous trouvez ça encore flou, n’hésitez pas à poser vos questions dans les commentaires. 🙂

Article par Null et Aku.

Published by Aku

Laisser un commentaire

Hacking/Coding Fr

122 User(s) Online Join Server
  • Djess
  • Gummin
  • B00um
  • Akaris
  • astro
  • l'exploseurde gueule[\nemesis/]
  • Shuiza
  • Louisgab54
  • Amexal
  • Camarade Lelouch ☭
  • johnlenon
  • TryHarder