Injection SQL aveugle par délai — exfiltration

Blind SQL injection with time delays and information retrieval

La valeur du cookie TrackingId est interpolée dans une requête SQL exécutée synchrone. On provoque une pause conditionnelle (SLEEP / pg_sleep) lorsque une assertion est vraie ; on déduit l’information en mesurant le temps de réponse (≈ délai si condition vraie).

PostgreSQL

  • Sleep 5 s simple :

  • Conditionnelle (tester si username='administrator' → 5 s) :

  • Tester longueur du mot de passe = 20 :

  • Tester caractère à la position pos :

Remarque Postgres : parfois il faut adapter la position du FROM selon la requête injectée ; les exemples ci-dessus sont des patterns courants.

MySQL

  • Sleep 5 s simple :

  • Conditionnelle (substring) :

  • Tester longueur = N :

MySQL : IF(condition, sleep(sec), 0) est la forme standard ; utiliser SUBSTRING(...) et LENGTH(...).


Supposons BASE=abc123 et session 'SESSION=XYZ'.

  • Postgres — test caractère pos=1 == 'a' :

  • MySQL — test caractère pos=1 == 'a' :

Script Python automatisé (corrigé, Postgres & MySQL adaptables)

Ce script mesure la latence et reconstruit caractère par caractère. Paramètres : TARGET, BASE_TRACKING, SESSION, SGDB ('postgres' ou 'mysql'), alphabet, délai attendu (SLEEP_SEC) et MAX_LEN.

  • Pour Postgres, SGDB="postgres".

  • Pour MySQL, SGDB="mysql".

  • Réduis ALPHABET si tu connais charset (gain énorme).

  • Ajuste MAX_LEN / SLEEP_SEC selon la cible.

  • Gère retries/exponential backoff si nécessaire.

Mis à jour

Ce contenu vous a-t-il été utile ?