Injections SQL
Alex GARRIDO - @Zeecka_
WHOAMI
Alex GARRIDO - Zeecka




Définitions
La faille SQLi, abréviation de SQL Injection, soit injection SQL en français, est un groupe de méthodes d'exploitation de faille de sécurité d'une application interagissant avec une base de données (sql).
Risques
- Accès en lecture à tout ou partie de la base de données
- Accès en écriture à tout ou partie de la base de données
- Accès en lecture à tout ou partie du système de fichier
- Accès en écriture à tout ou partie du système de fichier
Bases de données SQL






Bases de données SQL






Structure de requête (RAPPEL)

Stacked Query ?
Exécution de plusieurs requêtes en une seule transaction.
SQL Serv | MySQL | PostGre | Oracle | Access | |
ASP | O | ? | ? | ? | N |
ASP.net | O | ? | ? | ? | N |
PHP | O | N | O | ? | N |
JAVA | ? | ? | ? | N | N |
Source: https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/
Cas d'école - Authentification

Cas d'école - Authentification


Cas d'école - Authentification
$user: Zeecka
$pass: p@$$w0rd

Cas d'école - Authentification
$user: Zeecka
$pass: " OR "1"="1

Cas d'école - Authentification
$user: Zeecka" --
$pass:
MySQL: #, -- , /*
MS SQL: -- , /*
MS Access: %00
Oracle: -- , /*

Injection SQL - Basique

Injection SQL - Basique
Exploitation d'injections dites "Union Based":
- Trouver le nombre de colonnes ( GROUP BY )
- Trouver les colonnes reflétées sur la page ( UNION SELECT )
- Exfiltrer les données de la bases de données dans les champs réflétés
Injection SQL - Exfiltration
MySQL
- Version de la base de donnée: @@version
- Nom de l'utilisateur courrant: user()
- Liste des utilisateurs: SELECT user FROM mysql.user;
- Liste des hash des mots de passes: SELECT password FROM mysql.user;
- Nom de la base de données courrante: database()
Injection SQL - Exfiltration
MySQL
- Lister les bases de données
-
SELECT schema_name FROM information_schema.schemata;
-
SELECT distinct(db) FROM mysql.db;
-
- Lister les tables
-
SELECT table_name FROM information_schema.tables WHERE table_schema = "dbname";
-
- Lister les colones
-
SELECT column_name FROM information_schema.columns WHERE table_schema = "dbname" AND table_name = "matable";
-
- Exfiltrer le contenu
Injection SQL - Aveugle

Injection SQL - Aveugle
Tester des conditions booléennes
Exemple:
- AND LENGTH(pass) < 10
- AND SUBSTR(pass,1,1) = 'p'
- AND ASCII(SUBSTR(pass,1,1)) >= 107
Injection SQL - Time Based

Remédiation
Requêtes préparées


Ressources
Ressources
Ressources
Injections SQL Alex GARRIDO - @Zeecka_
Injections SQL
By Zeecka
Injections SQL
- 1,452