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
By Zeecka
Injections SQL
- 1,369