Mini MySqlat0r Recherche et exploitation automatisée de failles d'injection SQL SCRT Information Security Switzerland http://www.scrt.ch Contenu ● ● ● Introduction – Structured Query Language – Injections SQL – Attaque « classique » Mini MySqlat0r – Recherche de failles – Exploitation – Démonstration Conclusion -2- Introduction Structured Query Language ● ● ● Langage utilisé pour communiquer avec une base de données Sites Web utilisent SQL pour récupérer le contenu à afficher pour une requête Exemple type : – ● SELECT * FROM news WHERE id = 1 Implémentations légèrement différentes en fonction de la base de données – Ciblé sur MySQL -4- Injections SQL ● Faille permettant à un attaquant de modifier la requête envoyée à la base de données – ● mauvaise validation des requêtes Exemples : – SELECT * FROM news WHERE id = -1 – SELECT * FROM news WHERE id = 1 or 1=1 – SELECT * FROM news WHERE id = 1 union select .... -5- Types de failles ● 3 types de failles principales: – Failles basées sur des erreurs ● – Failles « union » ● – Message d'erreur de la base de données révèle le contenu à l'attaquant Attaquant peut concaténer les résultats de plusieurs requêtes qui sont affichées sur la page Failles « blind » ● Résultat de la requête n'est pas affiché sur la page -6- Déroulement d'une attaque ● Recherche d'une faille – Chercher différence de comportement avec 2 entrées différentes ● Exemple : – – ● id=1 and 1=1 id=1 and 1=2 (toujours FAUX) Si les pages générées ne sont pas identiques, grande probabilité de faille -7- Déroulement d'une attaque ● Exploitation de la faille – Découvrir nombre de colonnes dans la requête initiale ● ● – id = 1 ORDER BY 1,2,3,...,X permet de créer une union correcte Explorer le contenu de la base de données ● ● ● Table information_schema (si accessible...) à la main long et pénible, surtout si un seul résultat affiché à la fois -8- Mini MySqlat0r Fonctionnement ● Automatisation des tâches répétitives et ennuyantes – ● Reste le plaisir de découvrir le contenu de la base de données 3 modules distincts mais liés – Crawler – Searcher – Exploiter - 10 - Recherche automatisée ● ● Crawler récupère liste de paramètres Module de recherche parcourt cette liste pour découvrir quels paramètres sont vulnérables – 2 types de paramètres ● ● – numériques alphabétiques chaque type peut être « fermé » par un commentaire ● 4 types d'injection possibles - 11 - Détection de paramètre vulnérable ● ● Comparaison de la page avec des paramètres « par défaut » (requête 0) avec – param=default AND 1=1 (requête 1) – param=default AND 1=2 (requête 2) Si la différence entre les pages générées par les requêtes 1 et 2 est plus grande qu'entre les requête 0 et 1, la page est considérée comme vulnérable – if(diff(r0,r1) < diff(r1,r2)) then vulnerable - 12 - Exploitation de la faille ● ● Automatisation de la recherche du nombre de colonnes Récupération du schéma de la base via la table information_schema – OU recherche par dictionnaire des noms de tables/colonnes ● Vision du contenu des tables ● Extraction de fichiers contenus sur la machine – si les droits le permettent - 13 - Démonstration Conclusion Améliorations futures ● Authentification (Cookie / NTLM) ● Autres bases de données (MS SQL, Oracle, ...) ● Optimisations crawler ● Multi-threading - 16 -