Demonstration injection de code

15
Démonstration : Injection de code 18 mars 2016 – Polytech Marseille Thomas VIAUD

Transcript of Demonstration injection de code

Page 1: Demonstration injection de code

Démonstration :Injection de code

18 mars 2016 – Po l yte ch M ars e i l le

Thomas VIAUD

Page 2: Demonstration injection de code

Contenu

• Présentation du scénario et des objectifs

• Base de données SQL

• Langage SQL

• Injection SQL

• Failles XSS

• Conclusion

Page 3: Demonstration injection de code

Présentation du scénario et des objectifs

Utilisateur Site internet Base de données

Page 4: Demonstration injection de code

Base de données

Présentation du scénario et des objectifs

Hacker Maître de l’univers ?

Page 5: Demonstration injection de code

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 : Structured Query Language

Page 6: Demonstration injection de code

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

Page 7: Demonstration injection de code

Langage SQLSELECT * 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 :

Page 8: Demonstration injection de code

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

Page 9: Demonstration injection de code

• 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 :

Page 10: Demonstration injection de code

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.

Page 11: Demonstration injection de code

Injection SQL

Exemple d’attaque :

Qui sait ? Sur un malentendu…

Page 12: Demonstration injection de code

Injection SQL

Attaque avancée :

Utilisation de Sqlmap pour automatiser la récupération des données.

Page 13: Demonstration injection de code

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>

Page 14: Demonstration injection de code

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.orgwww.root-me.org

Listing des challenges « Capture The Flag » :www.ctftime.org

Exemples de challenges :www.0x90r00t.com

Page 15: Demonstration injection de code

Questions ?

Mail : [email protected]