Aller au contenu

Prochaine Édition du Bootcamp
4 mai 2026

Injection SQL

Une attaque par injection de code qui exploite les vulnerabilites des applications web en inserant des instructions SQL malveillantes dans les champs de saisie, permettant aux attaquants de manipuler les bases de donnees, d'acceder a des donnees non autorisees ou d'executer des operations administratives.

Auteur
Unihackers Team
Temps de lecture
3 min de lecture
Dernière mise à jour

Pourquoi c'est Important

L'injection SQL a constamment figure parmi les vulnerabilites d'applications web les plus critiques depuis plus de deux decennies. Malgre sa bonne comprehension et sa prevention possible, la SQLi continue d'affliger les applications, permettant des violations de donnees qui exposent des millions d'enregistrements.

L'impact de l'injection SQL s'etend bien au-dela du simple acces aux donnees. Les attaques reussies peuvent :

  • Extraire des bases de donnees entieres incluant mots de passe et informations personnelles
  • Modifier ou supprimer des donnees, causant des perturbations operationnelles
  • Contourner l'authentification et usurper des utilisateurs
  • Executer des commandes sur le serveur sous-jacent
  • Pivoter pour attaquer les systemes du reseau interne

Certaines des plus grandes violations de donnees de l'histoire ont resulte d'injections SQL, affectant des detaillants majeurs, des agences gouvernementales et des entreprises technologiques.

Comment Fonctionne l'Injection SQL

L'injection SQL se produit quand l'entree utilisateur est incorporee dans les requetes de base de donnees sans validation ou assainissement adequat :

Exemple de Code Vulnerable

vulnerable-login.php
PHP

// CODE VULNERABLE - Ne jamais faire cela !
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users
        WHERE username = '$username'
        AND password = '$password'";

$result = mysqli_query($connection, $query);

Execution de l'Attaque

sql-injection-attack.txt
Text

Entree normale :
username: admin
password: motdepasse123

La requete devient :
SELECT * FROM users WHERE username = 'admin' AND password = 'motdepasse123'

Entree malveillante :
username: admin' --
password: n'importe_quoi

La requete devient :
SELECT * FROM users WHERE username = 'admin' --' AND password = 'n'importe_quoi'

Le -- commente la verification du mot de passe, accordant l'acces !

Types d'Injection SQL

SQLi In-Band

Les resultats sont retournes directement dans la reponse de l'application.

Basee sur UNION : Combine les resultats de la requete de l'attaquant avec la sortie de la requete legitime.

union-injection.sql
SQL

-- Requete originale : SELECT name, price FROM products WHERE id = '1'

-- Injection : 1' UNION SELECT username, password FROM users --
-- La requete combinee extrait les identifiants utilisateurs aux cotes des donnees produit

Basee sur Erreur : Extrait des donnees a travers les messages d'erreur de la base de donnees.

SQLi Aveugle (Blind)

Aucune sortie directe visible ; les attaquants inferent les resultats a travers le comportement de l'application.

Basee sur Booleen : Differentes reponses basees sur des conditions vrai/faux.

boolean-blind.sql
SQL

-- Si le premier caractere du mot de passe est 'a', la page charge normalement
1' AND SUBSTRING((SELECT password FROM users WHERE id=1),1,1)='a' --

-- Iterer a travers les caracteres pour extraire les donnees

Basee sur le Temps : Utilise des delais de base de donnees pour extraire l'information.

time-based.sql
SQL

-- Si la condition est vraie, la reponse est retardee de 5 secondes
1' AND IF(SUBSTRING(password,1,1)='a', SLEEP(5), 0) --

Techniques de Prevention

Requetes Parametrees (Prepared Statements)

La defense principale : separe le code SQL des donnees utilisateur.

secure-python.py
Python

# SECURISE - Utilisation de requete parametree
cursor.execute(
  "SELECT * FROM users WHERE username = %s AND password = %s",
  (username, password)
)
secure-java.java
JAVA

// SECURISE - Utilisation de PreparedStatement
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();

Validation des Entrees

  • Valider les types de donnees (attendre un entier, rejeter les chaines)
  • Whitelister les caracteres autorises
  • Rejeter les patterns malveillants connus
  • Valider les contraintes de longueur

Defense en Profondeur

  • Pare-feu Applicatif Web (WAF) pour detecter les patterns d'attaque
  • Principe du moindre privilege pour les comptes de base de donnees
  • Desactiver les fonctionnalites de base de donnees inutiles
  • Chiffrer les donnees sensibles au repos
  • Tests de securite reguliers et revue de code

Lien avec les Carrieres

L'expertise en injection SQL est precieuse dans les roles de securite. Les testeurs de penetration d'applications web testent et exploitent regulierement la SQLi ; les reviseurs de code securise identifient les patterns vulnerables.

Roles Securite Applicative (Marche US)

RoleEntry LevelMid LevelSenior
Analyste Securite Applicative75 000 $US100 000 $US135 000 $US
Pentester Applications Web80 000 $US110 000 $US145 000 $US
Ingenieur Securite Applicative95 000 $US125 000 $US165 000 $US

Source: CyberSeek

Dans le Bootcamp

Comment nous enseignons Injection SQL

Dans notre programme de cybersécurité, vous n'apprendrez pas seulement Injection SQL en théorie — vous pratiquerez avec de vrais outils dans des travaux pratiques, guidé par des professionnels du secteur qui utilisent ces concepts quotidiennement.

Couvert dans :

Module 10: Tests d'Intrusion et Hacking Éthique

Sujets connexes que vous maîtriserez :MetasploitNmapBurp SuiteÉlévation de Privilèges
Voir comment nous enseignons cela

360+ heures de formation par des experts • 94% de taux d'emploi