5. Base de données SQL*
Users
Posts
Comments
userid intPK
firstname text
name text
postid intPK
title text
content text
commentid intPK
content text
postid intFK
userid intFK
userid intFK
username text
password text
Un article ne peut
appartenir qu’à un
seul utilisateur.
Plusieurs
utilisateurs
peuvent
commenter le
même article.
Fonctionnement simplifié d’un blog :
SQL : StructuredQuery Language
6. SELECT * FROM users;
+------------+-----------+-----------+----------------------------------+-------+
| username | firstname | name | password | level |
+------------+-----------+-----------+----------------------------------+-------+
| dscott | Debie | SCOTT | e80b5017098950fc58aad83c8c14978e | user |
+------------+-----------+-----------+----------------------------------+-------+
| edorsa | Elsa | DORSA | f25a2fc72690b780b2a14e140ef6a9e0 | user |
+------------+-----------+-----------+----------------------------------+-------+
| ikeurien | Iris | KEURIEN | e99a18c428cb38d5f260853678922e03 | user |
+------------+-----------+-----------+----------------------------------+-------+
| jbombeur | Jean | BOMBEUR | adff44c5102fca279fce7559abf66fee | user |
+------------+-----------+-----------+----------------------------------+-------+
| jhultou | Jeanne | HULTOU | ab4f63f9ac65152575886860dde480a1 | user |
+------------+-----------+-----------+----------------------------------+-------+
| ktartines | Kimberley | TARTINES | aa47f8215c6f30a0dcdb2a36a9f4168e | user |
+------------+-----------+-----------+----------------------------------+-------+
| ktrophobe | Klaus | TROPHOBE | fc63f87c08d505264caba37514cd0cfd | user |
+------------+-----------+-----------+----------------------------------+-------+
| lgolade | Larry | GOLADE | c33367701511b4f6020ec61ded352059 | user |
+------------+-----------+-----------+----------------------------------+-------+
| mtete | Maude | TETE | fe01ce2a7fbac8fafaed7c982a04e229 | user |
+------------+-----------+-----------+----------------------------------+-------+
| shuttofond | Sacha | HUTTOFOND | 8afa847f50a716e64932d995c8e7435a | user |
+------------+-----------+-----------+----------------------------------+-------+
| sstiquet | Sophie | STIQUET | 70e76a15da00e6301ade718cc9416f79 | admin |
+------------+-----------+-----------+----------------------------------+-------+
users
firstname varchar(50)
name varchar(50)
username varchar(100)PK
password varchar(32)
level enum('user','admin')
Schéma de la table :
Langage SQL
7. Langage SQL
SELECT * FROM users WHERE username LIKE 'dscott';
+------------+-----------+-----------+----------------------------------+-------+
| username | firstname | name | password | level |
+------------+-----------+-----------+----------------------------------+-------+
| dscott | Debie | SCOTT | e80b5017098950fc58aad83c8c14978e | user |
+------------+-----------+-----------+----------------------------------+-------+
SELECT firstname,name,'OK' FROM users WHERE username LIKE 'e%';
+-----------+-------+----+
| firstname | name | OK |
+-----------+-------+----+
| Elsa | DORSA | OK |
+-----------+-------+----+
SELECT * FROM users WHERE level LIKE 'admin';#Commentaire
+----------+-----------+---------+----------------------------------+-------+
| username | firstname | name | password | level |
+----------+-----------+---------+----------------------------------+-------+
| sstiquet | Sophie | STIQUET | 70e76a15da00e6301ade718cc9416f79 | admin |
+----------+-----------+---------+----------------------------------+-------+
users
firstname varchar(50)
name varchar(50)
username varchar(100)PK
password varchar(32)
level enum('user','admin')
Schéma de la table :
8. SELECT GROUP_CONCAT(username),COUNT(*) FROM users WHERE username LIKE 'j%';
+------------------------+----------+
| GROUP_CONCAT(username) | COUNT(*) |
+------------------------+----------+
| jbombeur,jhultou | 2 |
+------------------------+----------+
SELECT 1,2,3,4,5 UNION SELECT * FROM users WHERE username LIKE 'k%';
+-----------+-----------+----------+----------------------------------+------+
| 1 | 2 | 3 | 4 | 5 |
+-----------+-----------+----------+----------------------------------+------+
| 1 | 2 | 3 | 4 | 5 |
+-----------+-----------+----------+----------------------------------+------+
| ktartines | Kimberley | TARTINES | aa47f8215c6f30a0dcdb2a36a9f4168e | user |
+-----------+-----------+----------+----------------------------------+------+
| ktrophobe | Klaus | TROPHOBE | fc63f87c08d505264caba37514cd0cfd | user |
+-----------+-----------+----------+----------------------------------+------+
SELECT @@version AS 'Version:';
+--------------------------+
| Version: |
+--------------------------+
| 10.0.23-MariaDB-0+deb8u1 |
+--------------------------+
users
firstname varchar(50)
name varchar(50)
username varchar(100)PK
password varchar(32)
level enum('user','admin')
Schéma de la table :
Langage SQL
9. • Recherche de points
d’entrées
• Exécution de
requêtes forgées
ReconnaissanceReconnaissance
• Présence de
messages d’erreur
• Comportement
inattendu du site
VulnérabilitéVulnérabilité
• Contournement de
l’authentification
• Altération ou
exfiltration des
données
ExploitationExploitation
Injection SQL
Méthode d’attaque :
10. Injection SQL
SELECT * FROM users WHERE username LIKE '<user>' AND password = '<password>';
L’injection n’est possible que dans le champ 'username' car le champ 'password' est un hash :
SELECT * FROM users WHERE username LIKE 'mtete' AND password = 'fe01ce2a7fbac8fafaed7c982a04e229';
+----------+-----------+------+----------------------------------+-------+
| username | firstname | name | password | level |
+----------+-----------+------+----------------------------------+-------+
| mtete | Maude | TETE | fe01ce2a7fbac8fafaed7c982a04e229 | user |
+----------+-----------+------+----------------------------------+-------+
fe01ce2a7fbac8fafaed7c982a04e229 = md5('demo‘);
Exemple d’attaque :
Pour les besoins de démonstration notre site test ne possède
aucun filtrage sur les données entrées dans le formulaire.
13. XSS : Cross-Site Scripting
Failles XSS*
Méthode d’attaque :
Injecter du contenu malveillant dans une page, qui sera exécuté par le navigateur.
Exemple d’attaque :
Insertion du code suivant dans la page :
<script>alert('xss');</script>
14. Conclusion
Il faut protéger son code et filtrer
systématiquement les données en
entrée autant qu’en sortie !
Sites proposant des challenges en sécurité :
www.newbiecontest.org
www.root-me.org
Listing des challenges « Capture The Flag » :
www.ctftime.org
Exemples de challenges :
www.0x90r00t.com