Les injections SQL
Les injections SQL
-
Objectifs
- Etre capable d’exploiter l’injections SQL comme : bypass de formulaire, récupération de données etc… ;
-
Présentations
- Une injection SQL est un type d’exploitation d’une faille de sécurité d’une application interagissant avec une base de données. L’attaquant détourne les requêtes en y injectant une chaîne non prévue par le développeur et pouvant compromettre la sécurité du système.
- L’injection SQL est une vulnérabilité qui permet à un attaquant d’exécuter du code SQL frauduleux sur une base de données, permettant l’accès, la modification ou la suppression des données quelque soit le droit de l’utilisateur.
- C’est un cas particulier d’un type de vulnérabilité plus général qui peut se manifester lorsqu’un langage est imbriqué dans un autre.
- Lorsqu’on évoque l’injection SQL, on parle tout le temps de faille dans un site Web, mais il n’y a pas que les sites qui sont touchés par cette faille: n’importe quelle application dialoguant avec une base de données en utilisant des requêtes sur lesquelles l’utilisateur a une influence peut être vulnérable aux injections SQL.
- Les attaques par injection SQL sont l’une des vulnérabilités des applications Web les plus anciennes, les plus répandues et les plus dangereuses. L’organisation OWASP (Open Web Application Security Project) répertorie les injections dans son document OWASP Top 10 2017 comme la menace numéro un pour la sécurité des applications Web.
-
Qu’est-ce qu’une attaque par injection SQL?
- L’injection SQL (SQLi) est un type d’ attaque par injection qui permet d’exécuter des instructions SQL malveillantes. Ces instructions contrôlent un serveur de base de données derrière une application Web. Les attaquants peuvent utiliser les vulnérabilités de SQL Injection pour contourner les mesures de sécurité des applications. Ils peuvent contourner l’authentification et l’autorisation d’une page Web ou d’une application Web et récupérer le contenu de la base de données SQL entière. Ils peuvent également utiliser SQL Injection pour ajouter, modifier et supprimer des enregistrements dans la base de données.
- Semblable à son nom, une injection SQL est une technique d’injection de code , utilisée pour attaquer des applications pilotées par les données, dans laquelle des instructions SQL malveillantes sont insérées dans un champ de saisie pour exécution.
- Les injections SQL sont généralement effectuées sur des applications Web défectueuses et mal conçues qui ne tiennent pas compte des vulnérabilités de sécurité éventuellement présentes dans le système de gestion de base de données de l’application Web.
- Une attaque par injection SQL ne consiste pas en une seule ligne de code. C’est une simple mais puissante technique qui peut compromettre la quasi – totalité d’une données de l’ application Web, y compris des informations sensibles comme les connexions des utilisateurs et des mots de passe, informations sur les employés, les numéros de sécurité sociale, etc. Ca fait peur!
- Il y a quatre sous-classes principales d’injection SQL
- SQLI classique
- Injection SQL aveugle ou inférentielle
- SQLI spécifique au système de gestion de base de données
- SQLI composé
-
Types d’injections SQL
- Les injections SQL se répartissent généralement en trois catégories : SQLi intrabande (classique), SQLi inférentiel (aveugle) et SQLi hors bande.
- Vous pouvez classer les types d’injections SQL en fonction des méthodes qu’elles utilisent pour accéder aux données principales et de leur potentiel de dommages.
-
SQLi intrabande
- L’attaquant utilise le même canal de communication pour lancer ses attaques et recueillir ses résultats. La simplicité et l’efficacité de SQLi intrabande en font l’un des types d’attaques SQLi les plus courants. Il existe deux sous-variantes de cette méthode :
- SQLi basé sur les erreurs : l’attaquant effectue des actions qui amènent la base de données à produire des messages d’erreur. L’attaquant peut potentiellement utiliser les données fournies par ces messages d’erreur pour recueillir des informations sur la structure de la base de données.
- SQLi basé sur l’union : cette technique tire parti de l’opérateur SQL UNION, qui fusionne plusieurs instructions de sélection générées par la base de données pour obtenir une seule réponse HTTP. Cette réponse peut contenir des données qui peuvent être exploitées par l’attaquant.
-
SQLi inférentiel (aveugle)
- L’attaquant envoie des données utiles au serveur et observe la réponse et le comportement du serveur pour en savoir plus sur sa structure. Cette méthode est appelée SQLi aveugle car les données ne sont pas transférées de la base de données du site Web à l’attaquant, de sorte que l’attaquant ne peut pas voir les informations sur l’attaque intrabande.
- Les injections SQL aveugles reposent sur la réponse et les modèles de comportement du serveur, elles sont donc généralement plus lentes à exécuter, mais peuvent être tout aussi dangereuses. Les injections SQL aveugles peuvent être classées comme suit :
- Booléen : cet attaquant envoie une requête SQL à la base de données invitant l’application à renvoyer un résultat. Le résultat variera selon que la requête est vraie ou fausse. En fonction du résultat, les informations contenues dans la réponse HTTP seront modifiées ou resteront inchangées. L’attaquant peut alors déterminer si le message a généré un résultat vrai ou faux.
- L’ attaquant basé sur le temps envoie une requête SQL à la base de données, ce qui fait attendre la base de données (pendant une période en secondes) avant de pouvoir réagir. L’attaquant peut voir à partir du temps que prend la base de données pour répondre, si une requête est vraie ou fausse. En fonction du résultat, une réponse HTTP sera générée instantanément ou après une période d’attente. L’attaquant peut ainsi déterminer si le message qu’il a utilisé a renvoyé vrai ou faux, sans se fier aux données de la base de données.
-
SQLi hors bande
- L’attaquant ne peut mener cette forme d’attaque que lorsque certaines fonctionnalités sont activées sur le serveur de base de données utilisé par l’application web. Cette forme d’attaque est principalement utilisée comme alternative aux techniques SQLi in-band et inférentielles.
- Le SQLi hors bande est effectué lorsque l’attaquant ne peut pas utiliser le même canal pour lancer l’attaque et collecter des informations, ou lorsqu’un serveur est trop lent ou instable pour que ces actions soient effectuées. Ces techniques misent sur la capacité du serveur à créer des requêtes DNS ou HTTP pour transférer des données à un attaquant.
-
Exemple d’injection SQL
- La partie gauche de la figure décrit un scénario d’utilisation normale et présente les données fournies par l’utilisateur au niveau du navigateur et les requêtes correspondantes au niveau du serveur Apache et du serveur de bases de données MySQL.
- Si l’application utilise des données non assainies, la requête SQL envoyée s’écrit sous la forme :
query="SELECT id, login FROM users WHERE login=’ ’’.$_GET[’login’]. ’’ AND password=’ ’’.$_GET[’password’])." ’ " ;
- L’injection SQL considérée dans la figure consiste à modifier le paramètre ’login’ dans la requête en insérant la tautologie :’ or ’1’=’1. Cette tautologie est utilisée lors de l’évaluation de la requête SQL qui, par conséquent, est toujours valide, quel que soit le mot de passe, ce qui permet de contourner le processus d’authentification.
- Ce type d’injection peut être classé dans la catégorie des “Blind SQL Injections”. On les utilise dans le cas de scripts à réponse binaire, c’est à dire qui retournent une réponse du type soit vrai, soit
Remarque: cette activité est purement éducative et démonstrative. Nous vous déconseillons vivement d’exécuter une application SQLI sur une application Web établie, car elle est illégale.
Source:
- https://towardsdatascience.com/being-aware-of-malicious-data-corruption-as-a-data-scientist-sql-injection-attack-63f235fb2a97