ATTAQUE INJECTION SQL
Comment et pourquoi une attaque par injection SQL est-elle effectuée?
Pour lancer une attaque par injection SQL, un attaquant doit d'abord trouver
des entrées d'utilisateur vulnérables dans la page Web ou l'application Web.
Une page Web ou une application Web présentant une vulnérabilité
d'injection SQL utilise cette entrée utilisateur directement dans une requête
SQL. L'attaquant peut créer du contenu en entrée. Ce contenu s'appelle
souvent une charge malveillante et constitue l'élément clé de l'attaque. Après
que l'attaquant ait envoyé ce contenu, des commandes SQL malveillantes
sont exécutées dans la base de données.
SQL est un langage de requête conçu pour gérer les données stockées dans
des bases de données relationnelles. Vous pouvez l'utiliser pour accéder,
modifier et supprimer des données. De nombreuses applications Web et sites
Web stockent toutes les données dans des bases de données SQL. Dans
certains cas, vous pouvez également utiliser des commandes SQL pour
exécuter des commandes du système d'exploitation. Par conséquent, une
attaque par injection SQL réussie peut avoir des conséquences très graves.
Les attaquants peuvent utiliser les injections SQL pour rechercher les
informations d'identification d'autres utilisateurs de la base de données. Ils
peuvent ensuite se faire passer pour ces utilisateurs. L'utilisateur emprunté
peut être un administrateur de base de données avec tous les privilèges de
base de données.
SQL vous permet de sélectionner et d'extraire des données de la base de
données. Une vulnérabilité d'injection SQL pourrait permettre à l'attaquant
d'obtenir un accès complet à toutes les données d'un serveur de base de
données.
SQL vous permet également de modifier les données d'une base de données
et d'ajouter de nouvelles données. Par exemple, dans une application
financière, un attaquant pourrait utiliser SQL Injection pour modifier les
soldes, annuler des transactions ou transférer de l'argent sur son compte.
Vous pouvez utiliser SQL pour supprimer des enregistrements d'une base de
données, voire supprimer des tables. Même si l'administrateur effectue des
sauvegardes de la base de données, la suppression des données peut affecter
la disponibilité des applications jusqu'à la restauration de la base de données.
De plus, les sauvegardes peuvent ne pas couvrir les données les plus récentes.
Sur certains serveurs de base de données, vous pouvez accéder au système
d'exploitation à l'aide du serveur de base de données. Cela peut être
intentionnel ou accidentel. Dans ce cas, un attaquant pourrait utiliser une
injection SQL comme vecteur initial, puis attaquer le réseau interne derrière
un pare-feu.
Il existe plusieurs types d'attaques d'injection SQL: SQLi intrabande (à l'aide
d'erreurs de base de données ou de commandes UNION), SQLi aveugle et
SQLi hors bande. Vous pouvez en apprendre plus à leur sujet dans les articles
suivants: Types d'injection SQL (SQLi), Injection SQL aveugle: de quoi s'agit-il.
Pour suivre pas à pas le déroulement d’une attaque par injection SQL et ses
conséquences graves, voir: Exploitation de l’injection SQL: exemple pratique.
Exemple d'injection SQL simple
Le premier exemple est très simple. Cela montre comment un attaquant peut
utiliser une vulnérabilité d'injection SQL pour contourner la sécurité des
applications et s'authentifier en tant qu'administrateur.
Le script suivant est un pseudocode exécuté sur un serveur Web. C'est un
exemple simple d'authentification avec un nom d'utilisateur et un mot de
passe. La base de données exemple contient une table nommée utilisateurs
avec les colonnes suivantes: nom d'utilisateur et mot de passe.
# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']
# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passw
d + “’”
# Execute the SQL statement
database.execute(sql)
Ces champs de saisie sont vulnérables à l'injection SQL. Un attaquant pourrait
utiliser les commandes SQL en entrée de manière à altérer l'instruction SQL
exécutée par le serveur de base de données. Par exemple, ils pourraient utiliser
une astuce impliquant un seul devis et définir le champ passwd sur:
password' OR 1=1
:En conséquence, le serveur de base de données exécute la requête SQL suivante:
SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'
En raison de l'instruction OR 1 = 1, la clause WHERE renvoie le premier ID de la
table users, quels que soient le nom d'utilisateur et le mot de passe. Le premier
identifiant d'utilisateur dans une base de données est très souvent
l'administrateur. De cette manière, l'attaquant contourne non seulement
l'authentification, mais obtient également les privilèges de l'administrateur. Ils
peuvent également commenter le reste de l'instruction SQL pour contrôler
davantage l'exécution de la requête SQL:
-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16
Dr DJOUSSE