L’outil SQLMap se trouve dans la boîte à outils de tout testeur de pénétration. C’est l’un des outils les plus populaires et les plus puissants lorsqu’il s’agit d’exploiter la vulnérabilité d’injection SQL, elle-même en tête de la liste des 10 principales vulnérabilités de l’OWASP. De la confirmation de la vulnérabilité d’injection SQL à l’extraction du nom de la base de données, des tables, des colonnes et à l’obtention d’un système complet, il peut être utilisé à de multiples fins.
Dans cet article, nous verrons différents types de commandes SQLMap qui peuvent s’avérer pratiques tout en exploitant différents scénarios d’injection SQL.
SQLMap peut être téléchargé à partir des liens suivants :
Windows
Linux : git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
À des fins de démonstration, j’utilise cette machine de Vulnhub.
Regardons l’utilisation de base de l’outil SQLMap sur les requêtes GET et POST.
sqlmap -u http://site-to-test.com/test.php?id=1 -p id
sqlmap -u http://site-to-test.com/test.php?id=1*
-u : URL à scanner
-p : paramètre à scanner
* : Paramètre à scanner (si le commutateur -p n’est pas fourni)
Demande POST
Nous pouvons fournir les données qui sont passées dans le corps de la demande POST à scanner par l’outil SQLMap.
sqlmap -u http://site-to-test.com/admin/index.php -data= »user=admin&password=admin » -p user
-data = POST data
Une autre façon est de copier la requête Burp dans un fichier et de passer le même à SQLMap.
sqlmap -r <chemin vers le fichier de requête>
Allons un peu plus loin pour comprendre les autres options fournies par l’outil SQLMap.
Scanner les pages de connexion POST
Les pages de connexion post sont autorisées par l’en-tête cookie, qui est passé dans l’en-tête HTTP d’une requête GET/POST. Pour scanner la ou les pages de post connexion, nous devons fournir le cookie valide à SQLMap.
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie= »cookie value »
/admin/index.php?id=1 est une page de post connexion.
De même, beaucoup de pages sont protégées par l’en-tête User-Agent ou Referrer. Les mêmes peuvent être inclus dans la commande:
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php
En outre, nous pouvons randomiser l’en-tête user-agent en utilisant l’option -random-agent.
CRAWL
Crawl est une option importante qui permet à l’outil SQLMap de crawler le site web, en commençant par l’emplacement de la racine. La profondeur à crawler peut être définie dans la commande.
sqlmap -u http://192.168.202.160/ -crawl=1
-crawl : Définir une profondeur pour crawler. (Exemple : Définir 2 permettra à l’outil de crawler jusqu’à deux répertoires)
Si nous voulons exclure toute page de la portée du crawler, nous pouvons le définir par -crawl-exclude. C’est une option utile lorsque nous crawlons une page de post connexion.
sqlmap -u http://192.168.202.163/ -crawl=3 -cookie= »valeur du cookie » -crawl-exclude= »logout »
Cette commande va crawler le site web jusqu’à trois répertoires et exclure toute URL où le mot clé « logout » est présent.
Comme vous pouvez le voir ci-dessous, SQLMap a crawlé le site web mais a exclu l’URL de déconnexion.
Exécutons la même commande sans l’option -crawl-exclude:
Comme on le voit ci-dessous lorsque -crawl-exclude n’est pas défini, SQLMap a crawlé l’URL de déconnexion. Cela permettrait à la session existante d’être invalidée (en raison de la déconnexion) et de ne pas terminer l’analyse.
SQLMap à travers un proxy
Nous pouvons définir les détails d’un proxy à partir duquel nous permettons à la requête de passer. Si nous voulons faire passer la requête par un outil de proxy comme Burp, démarrez Burp Suite et configurez-le pour qu’il s’exécute sur localhost sur le port 8080. Maintenant, utilisez la commande SQLMap suivante:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy= »http://localhost:8080″
Maintenant, pensez à un scénario où les mots-clés de sqlinjection comme OrderBy et Union sont blacklistés sur le serveur. Nous pouvons contourner ces types d’implémentations en utilisant la technique du camel casing. Nous utiliserons SQLMap pour envoyer le trafic à Burp et utiliserons la fonctionnalité « match and replace » de Burp pour contourner la restriction ci-dessus.
La fonctionnalité « Match and Replace » peut être trouvée sous l’onglet « Options », sous l’onglet « Proxy » de Burp.
Ceci vérifiera si la requête a un mot clé comme « union ». Si oui, alors remplacez-le par « UnIoN. »
Dans un scénario où l’application n’est accessible que par un serveur proxy, le même peut être défini en utilisant la commande suivante:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy= »http://localhost:8080″ -proxy-cred=username:password
Batch
La commande batch est utilisée pour les sessions non interactives. Lorsque nous essayons d’analyser quelque chose, SQLMap peut nous demander de fournir des entrées pendant l’analyse : par exemple, lors de l’utilisation de la fonction crawl, l’outil demande à l’utilisateur s’il veut analyser l’URL identifiée. Lorsque -batch est défini dans la commande, l’outil utilise une valeur par défaut pour procéder sans demander à l’utilisateur.
Form
Une URL de page avec un champ de formulaire (disons la page de connexion) peut être fournie avec l’option -form pour analyser la page et guider l’utilisateur pour tester les champs identifiés.
Maintenant les pages avec un grand nombre de champs de formulaire peuvent être testées efficacement en utilisant l’option -form et -batch ensemble. Cela analysera la page et vérifiera les champs de formulaire et fournira automatiquement la saisie au nom de l’utilisateur.
Si l’application entière doit être scannée, l’option crawl avec l’option form et switch peut être utilisée.
Threads
L’option threads permet à l’utilisateur de définir le nombre de requêtes concurrentes à envoyer par l’outil SQLMap. Cela permettrait de réduire le temps global de test. Cette valeur ne doit pas être maintenue à un niveau élevé, car elle peut avoir un impact sur la précision du résultat.
Risque et niveau
Le risque permet de définir le type de charges utiles utilisées par l’outil. Par défaut, il utilise la valeur 1 et peut être configuré jusqu’au niveau 3. Le niveau 3, étant le maximum, inclut certaines requêtes SQL lourdes.
Le niveau définit le nombre de vérifications/charges utiles à effectuer. La valeur va de 1 à 5. 5, étant le maximum, inclut un grand nombre de charges utiles dans le scan.
Il est recommandé d’augmenter le risque et le niveau si SQLMap n’est pas capable de détecter l’injection dans les paramètres par défaut.
Verbose
Dans le cas où nous voulons voir la charge utile envoyée par l’outil, nous pouvons utiliser l’option verbose. Les valeurs vont de 1 à 6.
Database Enumeration
Comme nous savons que SQLMap est principalement utilisé pour l’exploitation par injection SQL, voyons quelques-unes des commandes pour énumérer la base de données à travers une application vulnérable à l’injection SQL.
1. -dbs : Cette option est utilisée pour énumérer la base de données.
2. Maintenant nous avons le nom de la base de données. Pour extraire la table de la base de données « photoblog », exécutez la commande suivante:
3. Pour extraire les détails des colonnes de la table « users », exécutez la commande suivante:
4. Pour vider les données de la table « users », utilisez la commande -dump:
5. Pour identifier l’utilisateur actuel de la base de données :
6. Pour identifier le nom actuel de la base de données :
7. Identifier les privilèges, les rôles, et si l’utilisateur actuel de la BD est l’administrateur de la BD:
Bypassing WAF Using Tamper Script
De nombreuses fois, nous rencontrons un scénario où l’application est maintenue derrière le pare-feu d’application web (WAF). Pour vérifier si le site est protégé par le WAF, nous pouvons utiliser les options suivantes :
-identifier le WAF
Une fois le WAF identifié, nous pouvons utiliser le tamper script pour attaquer les applications protégées par le WAF. Le script tamper peut modifier la requête pour échapper à la détection du WAF. Les scripts se trouvent dans le répertoire /usr/share/sqlmap/tamper/.
Exécution de commandes système
Nous pouvons exécuter les commandes de niveau OS/système si l’utilisateur actuel de la base de données a des droits DBA. Nous pouvons utiliser les options suivantes:
Pour un serveur Linux:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell
Pour un serveur Windows :
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>
Exécution de requêtes SQL
Nous pouvons exécuter l’instruction SQL sur la base de données en exécutant les commandes suivantes :
sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell
Autres options
Certaines autres options incluent:
1. Scanner une page protégée par une authentification HTTP comme Basic, NTLM et Digest:
sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred « admin:admin »
2. Scanner une page protégée par une authentification basée sur une clé
sqlmap -u http://example.com/admin.aspx -auth-file=<chemin vers le certificat PEM ou le fichier de clé privée>
3. Pour randomiser les IP d’attaque (cela peut aider dans des cas comme la détection WAF, ou lorsque cacher la source d’attaque augmenterait la difficulté de tracer l’IP).
Pour utiliser le réseau d’anonymat Tor par défaut:
sqlmap -u http://example.com/admin.aspx -tor
Pour définir un port Tor:
sqlmap -u http://example.com/admin.aspx -tor-port=<tor proxy port>
4. Si un délai est nécessaire entre chaque requête HTTP :
sqlmap -u http://example.com/admin.aspx -delay=1 délai de #1 seconde
5. Si une page est protégée par un jeton CSRF, nous pouvons inclure le même dans la commande:
sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf token>
Injection SQL de second ordre : Dans ce type d’injection SQL, la charge utile SQL est stockée dans la base de données et récupérée ultérieurement lors de l’accès à une autre page. Nous fournissons une URL, qui sera demandée par l’outil SQLMap après chaque injection. Nous pouvons demander à l’outil SQLMap de tester cette injection en utilisant les commandes suivantes:
sqlmap -r /root/Desktop/Burp.txt -second-order « http://target/vulnerbalepage.php »
Le fichier Burp.txt contient la requête sur laquelle l’injection doit être effectuée.
-second-order « URL » contient l’URL qui sera accédée par SQLMap après chaque injection.
Conclusion
.