Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Time-Based SQL Injection

hacking

Dé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

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis