Introduction
Dans ce laboratoire, vous apprendrez à utiliser sqlmap, un puissant outil open-source de test d'intrusion qui automatise le processus de détection et d'exploitation des failles d'injection SQL. Plus précisément, vous vous concentrerez sur une technique d'optimisation clé : cibler un système de gestion de base de données (SGBD) backend spécifique.
Par défaut, sqlmap teste une grande variété de systèmes de bases de données, ce qui peut prendre du temps. En spécifiant le SGBD cible (comme MySQL, PostgreSQL ou MSSQL), vous pouvez accélérer considérablement le processus de scan, réduire le nombre de requêtes envoyées au serveur et rendre vos tests plus efficaces.
Nous avons pré-configuré une application web vulnérable pour que vous puissiez vous entraîner. L'URL cible pour ce laboratoire est : http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#
Commençons !
Identification du SGBD Backend Probable (par exemple, MySQL, PostgreSQL)
Dans cette étape, vous allez exécuter un scan sqlmap de base pour lui permettre d'identifier automatiquement le système de gestion de base de données backend. C'est une première étape courante dans un test d'intrusion. Les informations recueillies ici nous aideront à optimiser notre attaque dans les étapes suivantes.
Nous utiliserons l'option --batch pour que sqlmap s'exécute avec ses réponses par défaut à toutes les questions, rendant le scan non interactif. Nous devons également fournir un cookie de session pour accéder à la page vulnérable. Pour ce laboratoire, le cookie est security=low; PHPSESSID=labex.
Exécutez la commande suivante dans votre terminal :
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=labex" --batch
sqlmap commencera son processus de test. Portez une attention particulière à la sortie. Après une série de tests, sqlmap affichera des informations sur le système d'exploitation du serveur web, la technologie du serveur web et, plus important encore, le SGBD backend.
Vous devriez voir une sortie similaire à celle-ci (certains détails peuvent varier) :
[INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: PHP 8.1.2, Apache 2.4.52
back-end DBMS: MySQL >= 5.0
Comme vous pouvez le constater, sqlmap a identifié la base de données backend comme étant MySQL. C'est l'information cruciale que nous utiliserons ensuite.
Utiliser l'option --dbms pour Spécifier le Système Cible
Dans cette étape, nous allons découvrir l'option --dbms, qui est au cœur de ce laboratoire. Maintenant que nous savons que la cible utilise MySQL d'après l'étape précédente, il est inutile que sqlmap perde du temps à exécuter des tests pour d'autres systèmes de bases de données comme PostgreSQL, Oracle ou Microsoft SQL Server.
L'option --dbms vous permet d'indiquer à sqlmap exactement pour quel système de base de données effectuer les tests. Cela rend l'outil beaucoup plus efficace.
La syntaxe est simple :
--dbms=NOM_SGBD
Vous remplacez NOM_SGBD par le nom de la base de données cible. Voici quelques valeurs courantes :
MySQLPostgreSQLMSSQL(Microsoft SQL Server)OracleSQLiteAccess
En fournissant cette information, vous instruisez sqlmap à n'utiliser que des charges utiles (payloads) et des techniques spécifiques au SGBD spécifié. C'est une compétence fondamentale pour utiliser sqlmap efficacement dans des scénarios réels. Dans la prochaine étape, vous appliquerez cette option à un nouveau scan.
Exécuter un Scan avec --dbms=MySQL
Dans cette étape, vous allez exécuter à nouveau le scan sqlmap, mais cette fois-ci, vous ajouterez l'option --dbms=MySQL. Cela indiquera à sqlmap de concentrer ses efforts exclusivement sur les tests spécifiques à MySQL, en se basant sur les informations que nous avons recueillies à l'étape 1.
Exécutez la commande suivante dans votre terminal. C'est la même commande qu'auparavant, avec la nouvelle option ajoutée.
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=labex" --dbms=MySQL --batch
Le scan démarrera immédiatement. Vous remarquerez que la sortie initiale de sqlmap confirme qu'il force le SGBD backend à être MySQL.
[INFO] forcing back-end DBMS to 'MySQL'
Laissez le scan se terminer. Dans la prochaine étape, nous analyserons les résultats et les comparerons à notre premier scan.
Observer la Réduction du Nombre de Charges Utiles et une Identification Plus Rapide
Dans cette étape, vous observerez les avantages directs de l'utilisation de l'option --dbms. Les principaux avantages sont une réduction significative du nombre de tests effectués et un temps d'exécution beaucoup plus rapide.
Si vous comparez la sortie du scan de l'étape 3 avec le premier scan de l'étape 1, vous remarquerez une différence clé. Le premier scan a passé du temps à essayer d'identifier la base de données, en exécutant des tests génériques puis en les affinant. Le second scan, cependant, a sauté tout cela.
La sortie du scan ciblé montrera que sqlmap n'exécute que des tests pertinents pour MySQL. Vous ne le verrez pas tester d'autres systèmes comme PostgreSQL ou Oracle.
Par exemple, un scan générique pourrait tester des centaines de charges utiles (payloads) à travers différents types d'injections SQL pour plusieurs bases de données. Le scan ciblé, quant à lui, n'exécutera que les charges utiles connues pour fonctionner contre MySQL. Cela se traduit par :
- Moins de Requêtes HTTP : L'outil envoie significativement moins de requêtes au serveur cible.
- Exécution Plus Rapide : Le temps total du scan est considérablement réduit.
Cette efficacité est essentielle en tests d'intrusion, où le temps est souvent une contrainte et où la minimisation du trafic réseau peut aider à éviter la détection par les pare-feux ou les systèmes de détection d'intrusion (IDS).
Comprendre Comment Ceci Optimise l'Attaque en Réduisant les Cas de Test
Dans cette dernière étape, consolidons notre compréhension de la raison pour laquelle cibler le SGBD est une meilleure pratique pour l'optimisation.
sqlmap est conçu pour être un outil complet. Sans aucune indication, son comportement par défaut est de supposer qu'il ne sait rien de la cible. Par conséquent, il exécute une large batterie de tests pour couvrir de nombreuses possibilités :
- Empreinte Digitale (Fingerprinting) : Il essaie d'abord de déterminer le type de SGBD en envoyant diverses requêtes et en analysant les réponses. Chaque base de données possède des fonctions, des messages d'erreur et des comportements uniques qui peuvent révéler son identité.
- Tests Généraux : Il teste ensuite différentes techniques d'injection SQL (basée sur des booléens aveugles, basée sur le temps aveugle, basée sur des erreurs, requête UNION, etc.).
- Charges Utiles Spécifiques au SGBD : Pour chaque technique, il essaie des charges utiles qui fonctionnent sur différents systèmes de bases de données.
Cette approche "force brute" est exhaustive mais inefficace si vous connaissez déjà ou pouvez deviner rapidement le backend.
En utilisant --dbms=MySQL, vous indiquez à sqlmap de sauter entièrement l'étape 1 et de n'utiliser que les charges utiles de l'étape 3 qui sont pertinentes pour MySQL. Cela élague un nombre massif de cas de test de son flux de travail.
Cette optimisation offre trois avantages clés :
- Vitesse : Le scan se termine beaucoup plus rapidement car il n'exécute pas de tests inutiles.
- Discrétion : Moins de requêtes signifient moins de "bruit" dans les journaux du serveur web, rendant l'activité moins susceptible de déclencher des alertes.
- Efficacité : Elle concentre la puissance de l'outil sur les vecteurs d'attaque les plus probables, augmentant les chances d'une découverte réussie et rapide.
Maîtriser des options comme --dbms transforme sqlmap d'un simple scanner automatisé en un outil de test précis et chirurgical.
Résumé
Dans ce laboratoire, vous avez appris une technique cruciale pour optimiser les scans sqlmap. Vous avez constaté par vous-même comment l'identification du système de gestion de base de données (SGBD) backend et l'utilisation de l'option --dbms peuvent améliorer considérablement l'efficacité de vos tests d'injection SQL.
Vous avez commencé par exécuter un scan générique pour identifier le backend comme étant MySQL. Ensuite, vous avez découvert l'option --dbms et l'avez utilisée pour exécuter un scan ciblé. En comparant les deux approches, vous avez observé que le scan ciblé était significativement plus rapide car il éliminait un grand nombre de cas de test non pertinents.
Ce principe de focalisation de vos outils est un concept fondamental dans les tests d'intrusion efficaces. Félicitations pour avoir terminé ce laboratoire et pour avoir ajouté une compétence clé de sqlmap à votre boîte à outils !


