Exploitation d'injection SQL
Découvrez comment une faille SQLi (injection SQL) a été exploitée sur le site Mario-no, spécialisé dans la vente de parfums, et les mesures prises pour sécuriser la base de données.
cybersécuritéQu'est-ce qu'une injection SQL (SQLi)?
La faille SQLi, abréviation de SQL Injection, soit injection SQL en français, est un groupe de méthodes d'exploitation de faille de sécurité d'une application interagissant avec une base de données. Elle permet d'injecter dans la requête SQL en cours un morceau de requête non prévu par le système et pouvant en compromettre la sécurité. Plus d'info : https://www.hacksplaining.com/exercises/sql-injection

Rappel sur les Risques Juridiques
Le fait d'entraver ou de fausser le fonctionnement d'un système de traitement automatisé de données est puni de cinq ans d'emprisonnement et de 150 000 € d'amende.Lorsque cette infraction a été commise à l'encontre d'un système de traitement automatisé de données à caractère personnel mis en œuvre par l'Etat, la peine est portée à sept ans d'emprisonnement et à 300 000 € d'amende. Le but est de comprendre le principe de l'attaque afin de mettre en place la sécurité adéquate.
Exemple de Risque d'Injection SQL
Imaginons un formulaire de connexion où l'utilisateur entre son nom d'utilisateur et son mot de passe. Une requête SQL classique pourrait ressembler à ceci :
SELECT * FROM utilisateurs WHERE username = '$username' AND password = '$password';
Si un utilisateur malveillant entre ' OR '1'='1
comme nom d'utilisateur et laisse le mot de passe vide, la requête devient :
SELECT * FROM utilisateurs WHERE username = '' OR '1'='1' AND password = '';
Cela permet à l'attaquant de contourner l'authentification et d'accéder au système sans fournir de mot de passe valide.
Correction pour Éviter les Injections SQL
Pour éviter ce type d'attaque, il est essentiel d'utiliser des requêtes préparées avec des paramètres. Voici un exemple en PHP avec PDO :
<?php // Connexion à la base de données $pdo = new PDO('mysql:host=localhost;dbname=ma_base', 'utilisateur', 'mot_de_passe'); // Requête préparée avec des paramètres $stmt = $pdo->prepare('SELECT * FROM utilisateurs WHERE username = :username AND password = :password'); $stmt->execute([ ':username' => $username, ':password' => $password ]); // Vérification des résultats if ($stmt->rowCount() > 0) { echo 'Connexion réussie'; } else { echo 'Nom d\'utilisateur ou mot de passe incorrect'; } ?>
En utilisant des requêtes préparées, les entrées utilisateur sont automatiquement échappées, ce qui empêche l'injection de code malveillant dans la requête SQL.
Contexte du Projet
Mario-no est un site E-commerce spécialisé dans la vente de parfums. Une cliente a informé le service support d'une usurpation d'identité. Elle fait appel à votre entreprise spécialisée dans la sécurité informatique et plus spécifiquement dans les attaques présentes dans le Top Ten de l'OWASP. Vous êtes le consultant qui a été choisi pour trouver la faille et produire un exemple d'attaque pour faire une démonstration au client, puis proposer de mettre des protections en place pour que le problème ne se reproduise pas.
Méthodologie
Pour résoudre ce problème, nous avons suivi une approche structurée :
-
Installation
Installer la solution en local sur votre poste (pensez à récupérer le script de base de données).
-
Chercher une Faille
Trouver une faille dans le site puis essayez de trouver une façon d'injecter du code malveillant. L'objectif : Vous devez rediriger tous les utilisateurs sur https://btssio-fulbert.fr/.
-
Sécuriser le Site
Sécuriser le site en proposant et mettant en place un correctif pérenne dans le temps.
Fonctionnalités Clés
Les mesures de sécurité mises en place offrent plusieurs avantages :
Fonctionnalité | Description |
---|---|
Validation des Entrées | Empêche l'injection de code malveillant via les formulaires. |
Requêtes Préparées | Protège contre les injections SQL en utilisant des requêtes paramétrées. |
Tests de Sécurité | Assure que le site est protégé contre les attaques SQLi. |
Contexte du TP
Pour mieux comprendre les failles SQLi et comment les exploiter à des fins éducatives, consultez le TP disponible sur GitHub. Ce TP vous guide à travers le processus de découverte d'une faille SQLi, l'injection de code malveillant, et la mise en place de mesures correctives.
Le but est de comprendre le principe de l'attaque afin de mettre en place la sécurité adéquate. Il est crucial de noter que l'accès ou le maintien frauduleux dans un système de traitement automatisé de données est puni par la loi.
Sécuriser l'application
Toi aussi tu veux apprendre ou renforcer tes compétences en sécurité web et en gestion de projets de cybersécurité ? Alors Inscris-toi pour nous rejoindre.