Demonstration injection de code

Preview:

Citation preview

Démonstration :Injection de code

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

Thomas VIAUD

Contenu

• Présentation du scénario et des objectifs

• Base de données SQL

• Langage SQL

• Injection SQL

• Failles XSS

• Conclusion

Présentation du scénario et des objectifs

Utilisateur Site internet Base de données

Base de données

Présentation du scénario et des objectifs

Hacker Maître de l’univers ?

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

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

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 :

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

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

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.

Injection SQL

Exemple d’attaque :

Qui sait ? Sur un malentendu…

Injection SQL

Attaque avancée :

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

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>

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

Questions ?

Mail : thomas.viaud@outlook.com

Recommended