4. Introduction
Structured Query Language
– Communication avec une base de données
– Sites Web utilisent SQL pour extraire le
contenu des pages à afficher
Exemple typique
– SELECT * FROM news WHERE id=1
Application Security Forum - Western Switzerland
27.10.2011 4
- 2011
5. Utilisation
Application Security Forum - Western Switzerland
27.10.2011 5
- 2011
6. Injection SQL
Existent depuis plus de 10 ans
– Reste une des attaques les plus ravageuses
sur Internet
– TOP 10 OWASP depuis 2004
Application Security Forum - Western Switzerland
27.10.2011 6
- 2011
7. Et pourtant...
Application Security Forum - Western Switzerland
27.10.2011 7
- 2011
8. Injection SQL
Faille permettant à un attaquant de
modifier la requête SQL envoyée par un
serveur Web à la BDD
– Dû à une mauvaise validation des
paramètres
Exemples
– SELECT * FROM news WHERE id = -1
– SELECT * FROM news WHERE id = 1 or 1=1
– SELECT * FROM news WHERE id = 1 union ...
Application Security Forum - Western Switzerland
27.10.2011 8
- 2011
9. Types de faille
Essentiellement 3 méthodes pour
extraire les informations de la base
– “Error-based”
• Messages d'erreur affichés révélant les
informations convoitées
– Failles “union”
• Attaquant peut concaténer les résultats de
plusieurs requêtes qui se retrouvent sur la page
– Failles “blind”
• La requête est effectuée mais le résultat jamais
27.10.2011 affiché
Application Security Forum - Western Switzerland
9
- 2011
10. Déroulement d'attaque
Recherche d'une faille
– Où est la faille ?
Identification de la faille
– Quel type de faille ?
Exploitation de la faille
– Extraction des données
Application Security Forum - Western Switzerland
27.10.2011 10
- 2011
11. Recherche d'une faille
Découvrir comment on peut interagir
avec le site
– Quels sont les paramètres ?
• URL (GET), Formulaire (POST), Cookies
Application Security Forum - Western Switzerland
27.10.2011 11
- 2011
12. Recherche d'une faille
Or 1=1 ?
– Non non non
• Pas toujours de différence
• Détecté par la plupart des WAF/IDS/IPS
Utiliser des requêtes donnant des
résultats différents
– AND 1=1 (aucun changement)
– AND 1=2 (toujours faux, aucun résultat)
• Si les pages générées ne sont pas identiques,
grande probabilité Forum -failleSwitzerland
Application Security
de Western
27.10.2011 12
- 2011
13. Recherche d'une faille
Requête initiale
Requête AND 1=1
Requête AND 1=2
Application Security Forum - Western Switzerland
27.10.2011 13
- 2011
14. Obfuscation
AND 1=1
– Souvent détecté par un WAF/IPS/IDS
AND 1<2
AND/*toto*/0x41!=0x42
HaVinG%0a1337=1337
Application Security Forum - Western Switzerland
27.10.2011 14
- 2011
15. Identification de la faille
Détecter si c'est un champ numérique
ou texte
– Si texte, détecter le type de quote
Analyser quel type de commentaire est
possible
– /**/, --, #, %00
Application Security Forum - Western Switzerland
27.10.2011 15
- 2011
16. Identification de la faille
Déterminer nombre de colonnes de la
requête initiale
– Permet de créer des unions correctes
– Id=1 order by 1,2,3,4,...,X
Déterminer si une colonne est affichée
sur la page
– UNION SELECT 'toto','titi','tata',...,X
– Sinon c'est une injection “blind”
Application Security Forum - Western Switzerland
27.10.2011 16
- 2011
17. Exploitation de la faille
Explorer le contenu de la base de
données
– MySQL : information_schema
– MSSQL : sysobjects
– Oracle : all_tab_columns
– Bruteforcer le nom des tables/colonnes à
l'aide d'un dictionnaire
Application Security Forum - Western Switzerland
27.10.2011 17
- 2011
18. Démonstration
Application Security Forum - Western Switzerland
27.10.2011 18
- 2011
19. SQLat0r
Automatisation de la recherche et
exploitation de failles type 'UNION'
Buts
– Simple et intuitif
– Couverture d'un maximum de failles
Application Security Forum - Western Switzerland
27.10.2011 19
- 2011
20. Fonctionnement
Un module de détection
– Crawling du site
– Détection de paramètres
– Détection d'injections
Un module d'exploitation
– Exploration de la base de données
Application Security Forum - Western Switzerland
27.10.2011 20
- 2011
21. Crawler
Crawler traditionnel
– Détecte les pages liées de manière
statiques
– <a href=””>
– Récupère liste de pages, de paramètres, ...
– Impossible de détecter les pages chargées
de manière dynamique
• Ajax
• XMLHttpRequest
Application Security Forum - Western Switzerland
27.10.2011 21
- 2011
22. Crawler 2.0
Comment détecter les pages chargées
dynamiquement ?
– Analyse statique...
– Analyse dynamique
• Exécution du code et analyse
Application Security Forum - Western Switzerland
27.10.2011 22
- 2011
23. Idée 1
Interpréteur JavaScript
– Extraction de tout code JS
– Insertion dans l'interpréteur
– Interception des appels à
XMLHttpRequest()
Application Security Forum - Western Switzerland
27.10.2011 23
- 2011
24. Idée 2
“Browsing forcé”
– Chargement de la page dans un mini-
navigateur
– Recherche de tous les events de la page
• onload, onmouseover, onclick, ...
– Exécution de chaque event dans le
contexte de la page
Interception des requêtes par un Proxy
Application Security Forum - Western Switzerland
27.10.2011 24
- 2011
25. Problèmes
Forced Browsing
– “this”
• updateTable(this)
Paramètres vides par défaut
– Requièrent une interaction de
l'utilisateur
• Propositions, ...
Application Security Forum - Western Switzerland
27.10.2011 25
- 2011
26. Détection de vulnérabilité
Algorithme de recherche des
paramètres vulnérables
– Base = contenu de la page “standard”
– pTrue = contenu de la page “AND 1=1”
– pFalse = contenu de la page “AND 1=2”
– if(diff(Base,pTrue) < diff(pTrue,pFalse))
• Vulnerable !
diff basé sur le nombres de mots
différents sur les deux pages
Application Security Forum - Western Switzerland
27.10.2011 26
- 2011
27. Détection de vulnérabilité
Ajout d'une “tolérance”
– Chargement d'une même page pas
toujours égale
• Publicité
• Commentaires
• ...
Application Security Forum - Western Switzerland
27.10.2011 27
- 2011
28. Exploitation
Récupération du schéma de la base
sous la forme d'un arbre
– Navigation simple dans la BDD
Application Security Forum - Western Switzerland
27.10.2011 28
- 2011
29. Démonstration
Application Security Forum - Western Switzerland
27.10.2011 29
- 2011
30. Conclusion
Outil simple et efficace
– Point & Click
Crawler Web 2.0
– Nécessaire pour tout scanner actuel
Application Security Forum - Western Switzerland
27.10.2011 30
- 2011