0Pricing
Security+ Academy · Leçon

Injection SQL et injection de commandes

Apprenez comment les attaquants élaborent des charges d’injection qui manipulent des requêtes de base de données ou des commandes du système d’exploitation, et comment les requêtes paramétrées et la validation des entrées les empêchent.

Injection SQL et injection de commandes est une leçon Security+ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Security+ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Security+ Academy comprend 4 leçons au total.

Qu’est-ce que SQL Injection ?

SQL Injection (SQLi) se produit lorsqu’un attaquant insère ou « injecte » du code SQL malveillant dans un champ de saisie qui est ensuite transmis à une requête de base de données. Comme l’application concatène directement les données fournies par l’utilisateur dans une instruction SQL, la base de données ne peut pas distinguer les données légitimes des Commands fournies par l’attaquant. SQLi figure régulièrement parmi les Vulnerabilities Web les plus dangereuses de l’OWASP Top 10.

Exemple classique de charge utile SQLi

Une requête de connexion Vulnerable peut ressembler à ceci : SELECT * FROM users WHERE username='INPUT' AND password='INPUT'. Un attaquant qui fournit ' OR '1'='1 comme nom d’utilisateur transforme la requête : la clause WHERE devient toujours vraie et l’authentification est entièrement contournée. Il s’agit de l’Injection fondée sur une tautologie classique.

-- Vulnerable query (DO NOT use in production)
SELECT * FROM users
WHERE username = '' OR '1'='1'
  AND password = 'anything';
-- Returns ALL rows — auth bypassed

Types de SQL Injection

Les attaques par SQL Injection prennent plusieurs formes : SQLi In-band renvoie directement les résultats dans la réponse HTTP (fondée sur les erreurs ou sur une union). SQLi Blind déduit les données à partir de réponses booléennes vraies ou fausses, ou de délais délibérés (SLEEP(5)). SQLi Out-of-band utilise des canaux secondaires, comme les recherches DNS, pour exfiltrer des données lorsque les réponses ne sont pas visibles.

-- Time-based blind SQLi example
SELECT * FROM users
WHERE id = '1' AND SLEEP(5)--';
-- If response is delayed 5s, injection succeeded

Prévenir SQLi : requêtes paramétrées

La principale défense contre SQL Injection est l’utilisation de requêtes paramétrées (également appelées instructions préparées). Dans une requête paramétrée, la structure SQL est d’abord compilée et les données fournies par l’utilisateur sont transmises comme paramètre distinct : elles ne peuvent jamais modifier la structure de la requête. Cette approche est indépendante du langage et bien plus fiable que la seule assainisation des données saisies.

# Python example — parameterized query (safe)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
username = 'admin'
password = 'secret'
cursor.execute(
    'SELECT * FROM users WHERE username=? AND password=?',
    (username, password)  # parameters, never concatenated
)

La validation des données saisies comme défense en profondeur

Bien que les requêtes paramétrées constituent la défense principale, la validation des données saisies fournit une couche secondaire importante. La validation par liste d’autorisation n’accepte que les caractères attendus (par exemple, uniquement des caractères alphanumériques dans un champ de nom d’utilisateur) et rejette tout le reste. La validation par liste de refus bloque les caractères malveillants connus, mais les attaquants encodent ou masquent souvent leurs charges utiles pour contourner ces listes, ce qui rend les listes d’autorisation bien plus robustes.

Qu’est-ce que l’injection de Commands ?

L’injection de Commands (injection de Commands OS) se produit lorsqu’une application transmet des données saisies par l’utilisateur, non assainies, à un Shell système. Contrairement à SQL Injection, qui cible les bases de données, l’injection de Commands cible directement le système d’exploitation : elle permet aux attaquants d’exécuter des Commands arbitraires avec les Privileges du processus du serveur Web. Sa gravité est classée CRITICAL et elle conduit souvent à la compromission complète du système.

Exemple d’injection de Commands

Une application Web qui envoie une requête ping vers une adresse IP fournie par l’utilisateur peut utiliser : ping -c 1 INPUT. Si un attaquant fournit 8.8.8.8; cat /etc/passwd, le Shell interprète ; comme un séparateur de Commands et exécute les deux Commands. Les opérateurs d’Injection courants comprennent ;, &&, ||, | et la substitution de Commands par backticks.

# Vulnerable Python (subprocess with shell=True)
import subprocess
user_ip = '8.8.8.8; cat /etc/passwd'  # attacker input
subprocess.run('ping -c 1 ' + user_ip, shell=True)

# Safe alternative — avoid shell=True, pass args as list
subprocess.run(['ping', '-c', '1', '8.8.8.8'])

Prévenir l’injection de Commands

La défense la plus sûre contre l’injection de Commands consiste à éviter complètement d’appeler des Commands du système d’exploitation à partir de données saisies par l’utilisateur et à utiliser des fonctions de bibliothèque qui accomplissent le même objectif. Lorsque les appels au Shell sont inévitables, transmettez les arguments sous forme de liste (jamais sous forme de chaîne concaténée), désactivez l’interprétation du Shell, validez les données saisies à l’aide d’une liste d’autorisation stricte et exécutez les processus avec le compte d’utilisateur disposant du moins de Privileges possible.

Contexte OWASP : l’injection dans le Top 10

Le Top 10 de l’OWASP classe l’injection (qui englobe les injections SQL, NoSQL, OS et LDAP) parmi les risques les plus critiques pour la sécurité des applications. L’OWASP recommande une approche de défense en profondeur : utiliser des API sûres qui évitent l’interpréteur, effectuer une validation positive des entrées côté serveur (liste d’autorisation), échapper les caractères spéciaux à l’aide de la syntaxe propre à cet interpréteur et utiliser des contrôles SQL comme LIMIT afin d’empêcher la divulgation massive de données.

Détection : WAF et journalisation

Un pare-feu applicatif web (WAF) peut détecter et bloquer les charges utiles d’injection courantes en inspectant les requêtes HTTP à la recherche de motifs correspondant à des signatures. Toutefois, les WAF peuvent être contournés à l’aide de techniques d’encodage et ne remplacent pas un développement sécurisé. Une journalisation correcte de l’application — en enregistrant les paramètres de requête, les codes de réponse et les messages d’erreur — permet aux équipes de sécurité d’identifier les tentatives d’injection lors de l’analyse d’un incident.

Impact réel des attaques par injection

Les attaques par injection ont provoqué certaines des plus grandes fuites de données de l’histoire. La fuite de données d’Equifax en 2017 a exposé 147 millions d’enregistrements à cause d’une faille dans une application web. Une injection SQL visant le réseau PlayStation de Sony a compromis 77 millions de comptes en 2011. Ces incidents montrent que les failles d’injection ont un impact considérable sur l’entreprise : vol de données, amendes réglementaires, atteinte à la réputation et responsabilité juridique peuvent tous découler d’une attaque par injection réussie.

Vérification rapide

Testez votre compréhension des concepts de CompTIA Security+ (SY0-701) présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que : l’injection SQL exploite des entrées non nettoyées concaténées dans des requêtes de base de données, l’injection de commandes transmet des entrées malveillantes à l’interpréteur de commandes de l’OS au moyen d’opérateurs tels que ; et |, et les requêtes paramétrées ainsi que l’évitement de shell=True constituent les principales défenses. Nous allons maintenant étudier les attaques par script intersite (XSS) et CSRF.

Questions Fréquemment Posées

La leçon « Injection SQL et injection de commandes » est-elle gratuite ?

Oui — le texte complet de « Injection SQL et injection de commandes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Security+ Academy, passe à CoddyKit PRO. Le cours Security+ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Injection SQL et injection de commandes » ?

Apprenez comment les attaquants élaborent des charges d’injection qui manipulent des requêtes de base de données ou des commandes du système d’exploitation, et comment les requêtes paramétrées et la… Tu pratiques Security+ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Security+ Academy ?

Aucune expérience préalable n'est requise. Security+ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Injection SQL et injection de commandes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Security+ Academy ?

Oui. Chaque leçon Security+ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Injection SQL et injection de commandes
  2. Cross-Site Scripting (XSS) et CSRF
  3. Authentification défaillante et désérialisation non sécurisée
  4. SDLC sécurisé, outils SAST et DAST
← Retour à Security+ Academy