Time-Based SQL Injection
hackingDéfinition
L'injection SQL time-based (ou SQL Injection basée sur le temps) est une technique d'injection SQL aveugle (blind SQL injection) qui exploite le comportement temporel de la base de données pour extraire des informations sans résultats visibles dans la réponse HTTP. Quand l'application ne retourne pas de résultats de requête SQL et ne révèle pas d'erreurs, les techniques time-based permettent de déduire des informations via les délais de réponse.
Le principe repose sur des fonctions de délai spécifiques à chaque SGBD : MySQL utilise SLEEP(N), PostgreSQL pg_sleep(N), SQL Server WAITFOR DELAY '0:0:N', et Oracle dbms_pipe.receive_message. L'attaquant injecte une condition IF qui déclenche un délai si une condition donnée est vraie : si le délai est observé, la condition est vraie ; sinon, elle est fausse. Cela permet d'extraire des données bit par bit ou caractère par caractère.
Un payload typique MySQL : ' AND IF(SUBSTRING(password,1,1)='a', SLEEP(5), 0)--. Si la première lettre du mot de passe commence par 'a', la réponse sera retardée de 5 secondes. En testant tous les caractères possibles pour chaque position, l'attaquant peut reconstruire la valeur complète. SQLMap automatise ce processus avec l'option --technique=T.
Les techniques time-based sont particulièrement lentes (quelques secondes par bit, plusieurs minutes par valeur complète) mais constituent souvent le seul vecteur disponible quand les autres techniques (error-based, union-based) sont inapplicables. L'automatisation avec SQLMap, adaptée pour minimiser le nombre de requêtes tout en fiabilisant les mesures de délai (en tenant compte des variations de latence réseau), est essentielle.
Des optimisations existent pour accélérer l'extraction : la technique de recherche binaire (binary search) sur les valeurs ASCII des caractères réduit de 256 requêtes à 8 requêtes par caractère. Des injections avec OR 1=1 conditionnels permettent d'extraire plusieurs bits par requête.
Fonctionnement
Extraction du username MySQL avec SQLMap : sqlmap -u 'http://target.com/?id=1' --technique=T --dbms=mysql -D database_name -T users -C username,password --dump. Sans SQLMap, payload manuel : 1 AND IF((SELECT COUNT(*) FROM users WHERE username='admin')>0, SLEEP(3), 0)--. Si la réponse prend 3s, admin existe. Puis extraction caractère par caractère avec SUBSTRING et IF. Environ 8 requêtes par caractère avec recherche binaire.
Exploitation offensive
La time-based SQLi est le dernier recours quand l'union-based et l'error-based sont bloquées. Elle est souvent applicable dans des paramètres injectables (headers HTTP comme X-Forwarded-For, User-Agent, Referer) qui ne retournent pas de résultats dans la page mais affectent les requêtes SQL. Les applications avec des erreurs génériques (500 Internal Server Error) peuvent être vulnérables à la time-based même si elles ne révèlent rien.
Détection et mitigation
Les WAF avec limitations de taux (rate limiting) rendent les techniques time-based impraticables en bloquant les rafales de requêtes similaires. Les requêtes préparées (paramétrisées) éliminent totalement la vulnérabilité SQLi. Les logs d'application montrent des requêtes avec des délais anormaux et des paramètres contenant des fonctions SLEEP ou WAITFOR comme indicateurs d'attaque.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h