Qu’est-ce qu’une injection SQL ?

Cet article aborde la notion d’attaque par injection SQL : une technique très populaire lorsque l’on s’attaque à une application Web ou un site Web.
Injection SQL – Définition
L’injection SQL est une technique d’attaque courante utilisée pour compromettre un site Web au travers de sa base de données. Elle consiste à injecter des commandes SQL malveillantes dans une application Web, à partir d’un formulaire accessible (par exemple : un formulaire de connexion), dans le but de contourner les contrôles d’accès et d’accéder à l’application Web sans même disposer de comptes.
Pour que l’injection SQL fonctionne, elle doit exploiter une faiblesse de l’application Web. Cela est possible lorsque le code de l’application n’est pas suffisamment sécurisé et qu’elle ne vérifie pas correctement les données entrées par l’utilisateur (dans le formulaire pris pour cible).
L’attaquant peut insérer des commandes SQL malveillantes dans les champs de saisie d’un formulaire ou dans l’URL de la page. Lorsqu’une attaque par injection SQL réussie, l’attaquant peut parvenir à prendre le contrôle total de la base de données, compromettre l’application Web et accéder à des informations sensibles, en fonction de l’utilisation qui est faite de ladite application.
Supposons qu’il existe une page de connexion sur un site Web avec deux champs : nom d’utilisateur et mot de passe. On peut attaquer ce formulaire avec une requête d’injection SQL qui peut être utilisée pour accéder au site sans connaître le nom d’utilisateur et le mot de passe :
' OR 1=1--
Cette requête doit être insérée dans le champ du nom d’utilisateur. La partie « OR 1=1 » permet d’indiquer que toutes les conditions sont vraies (car 1 est bien égal à 1), tandis que les deux tirets à la fin commentent le reste de la requête et évitent les erreurs de syntaxe.
Il existe plusieurs types d’injection SQL :
– L’injection SQL classique
– L’injection SQL aveugle
– L’injection SQL basée sur les erreurs
L’injection SQL par entités multiples
L’injection SQL out-of-band
L’injection SQL de contournement d’authentification
Exemples d’outils pour réaliser une injection SQL
On peut citer plusieurs outils tels que NoSQLMap, SQLMap, SQLninja ou encore BBSQL.
– SQLMap : C’est l’un des outils d’injection SQL les plus populaires et les plus complets. Il peut détecter et exploiter les vulnérabilités d’injection SQL automatiquement et peut être utilisé pour extraire des données, exécuter des commandes à distance et prendre le contrôle de la base de données.

– NoSQLMap : C’est un outil d’injection SQL spécialisé pour les bases de données NoSQL. Il peut être utilisé pour détecter et exploiter les vulnérabilités d’injection SQL dans des systèmes de bases de données NoSQL tels que MongoDB, CouchDB et Cassandra.
– SQLninja : C’est un outil d’injection SQL avancé qui peut être utilisé pour exécuter des commandes à distance, prendre le contrôle de la base de données et obtenir un accès complet au système d’hébergement.
– BBSQL : C’est un outil d’injection SQL open source basé sur Perl.
Il est important de noter que l’utilisation de ces outils sans autorisation préalable est illégale et peut entraîner des poursuites pénales. Ces outils doivent être utilisés à des fins éthiques, dans le cadre d’une mission ou d’un contrat avec une entreprise.
Comment se protéger des injections SQL ?
Pour se protéger contre les attaques d’injection SQL, les développeurs doivent suivre les meilleures pratiques de sécurité des applications Web, à commencer par sécuriser le code de l’application.
On peut citer quelques exemples :
– Utilisez une liste blanche : la liste blanche permet d’accepter uniquement les entrées qui correspondent à un format prédéfini. Les entrées qui ne correspondent pas à la liste blanche seront rejetées.
– Échappez les caractères spéciaux : les caractères spéciaux dans les entrées utilisateur, tels que les guillemets simples et les guillemets doubles, peuvent être utilisés pour insérer du code malveillant dans une requête SQL, comme vu précédemment. Échappez ces caractères spéciaux pour vous protéger.
– Mettez à jour votre application : si vous utilisez une application spécifique pour votre site Web ou votre application Web, par exemple WordPress, veillez à bien faire les mises à jour. Ceci va permettre de vous protéger contre les failles de sécurité connues.
– Limitez les messages d’erreur : évitez d’afficher des messages d’erreur détaillés aux utilisateurs finaux, car cela peut donner des informations sur la structure de la base de données. Des informations exploitables par la suite…