Introduction
Dans ce laboratoire, vous explorerez comment utiliser les puissants scripts de "tamper" de sqlmap pour contourner les filtres courants des applications web. De nombreuses applications web implémentent une validation et un filtrage basiques des entrées pour prévenir les attaques par injection SQL. Ces filtres peuvent bloquer les mots-clés SQL courants, les espaces ou d'autres caractères. Les scripts de "tamper" de sqlmap peuvent modifier automatiquement les charges utiles d'injection SQL pour échapper à ces filtres, rendant vos attaques plus efficaces. Vous apprendrez à identifier les scénarios où l'évasion est nécessaire, à lister les scripts de "tamper" disponibles, à appliquer un script spécifique et à observer son effet sur les charges utiles générées.
Identifier un scénario nécessitant une évasion
Dans cette étape, vous comprendrez pourquoi les scripts de "tamper" sont nécessaires. Les applications web emploient souvent des filtres basiques pour prévenir les schémas courants d'injection SQL. Par exemple, un filtre peut bloquer les espaces ou les remplacer par d'autres caractères, ou encore bloquer des mots-clés comme UNION ou SELECT. Lorsque les charges utiles par défaut de sqlmap sont bloquées, vous devez les modifier pour contourner ces filtres.
Considérez un scénario hypothétique où une application web filtre les espaces dans les entrées utilisateur. Si sqlmap tente d'injecter une charge utile comme ' OR 1=1--, le filtre pourrait la transformer en 'OR1=1--, rendant la charge utile inefficace. Les scripts de "tamper" aident sqlmap à générer des charges utiles alternatives qui peuvent contourner de telles restrictions.
Pour simuler un scan sqlmap basique sans aucune technique d'évasion, nous utiliserons une URL factice. Cela nous aidera plus tard à comparer les charges utiles générées avec et sans scripts de "tamper".
Exécutez la commande sqlmap suivante pour lancer un scan basique contre une cible factice. Notez que cette cible n'est pas réellement vulnérable, mais elle nous permet d'observer le comportement de sqlmap et les charges utiles générées.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --output-dir=/tmp/sqlmap_output_no_tamper
Cette commande tentera d'effectuer un scan basique d'injection SQL. L'option --dump est utilisée pour extraire des données, --batch exécute en mode non interactif, --forms vérifie les formulaires, --level 1 --risk 1 définissent le niveau de détection et le risque, --parse-errors analyse les messages d'erreur, --technique=U spécifie l'injection SQL par requête UNION, --eta affiche le temps d'arrivée estimé, et --output-dir spécifie le répertoire de sortie.
Observez la sortie. Bien que cette commande spécifique ne trouve pas de vulnérabilités sur l'URL donnée (car il s'agit d'un site de test général et non spécifiquement configuré pour l'objectif de ce laboratoire), le but est de voir la tentative initiale de sqlmap et de comprendre que parfois, ces tentatives peuvent être bloquées par des filtres.
Lister les scripts de "tamper" disponibles avec --list-tampers
Dans cette étape, vous apprendrez comment lister tous les scripts de "tamper" disponibles dans sqlmap. sqlmap est livré avec une grande variété de scripts de "tamper", chacun conçu pour contourner des types spécifiques de filtres ou de WAF (Web Application Firewalls). Connaître les scripts disponibles est crucial pour sélectionner celui qui convient à vos besoins d'évasion.
Pour lister tous les scripts de "tamper" disponibles, utilisez l'option --list-tampers avec sqlmap.
sqlmap --list-tampers
Cette commande affichera une liste de tous les fichiers .py situés dans le répertoire tamper de sqlmap. Chaque fichier représente un script de "tamper" différent. Par exemple, vous pourriez voir des scripts comme space2comment.py, unionalltostring.py, apostrophemask.py, etc. Chaque script a un objectif spécifique, tel que le remplacement des espaces par des commentaires, la conversion de UNION ALL en concaténation de chaînes, ou le masquage des apostrophes.
Examinez la liste et essayez de comprendre le but de quelques scripts en vous basant sur leurs noms. Par exemple, space2comment.py est conçu pour remplacer les espaces par des commentaires SQL, ce qui peut contourner les filtres qui bloquent les espaces.
Sélectionner et appliquer un script de "tamper" avec --tamper=space2comment
Dans cette étape, vous allez sélectionner et appliquer un script de "tamper" spécifique à votre scan sqlmap. Pour ce laboratoire, nous utiliserons le script de "tamper" space2comment. Ce script remplace les espaces dans la charge utile d'injection SQL par des séquences /**/ (commentaires multi-lignes). Cette technique est efficace contre les filtres qui bloquent ou suppriment les espaces mais autorisent les commentaires SQL.
Pour appliquer un script de "tamper", vous utilisez l'option --tamper suivie du nom du script (sans l'extension .py).
Exécutez la commande sqlmap suivante, en incluant cette fois le script de "tamper" space2comment :
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --tamper=space2comment --output-dir=/tmp/sqlmap_output_with_tamper
Remarquez l'ajout de --tamper=space2comment. Cela indique à sqlmap de traiter toutes les charges utiles générées à travers ce script de "tamper" spécifique avant de les envoyer à la cible.
Bien que la sortie puisse ressembler à celle de l'étape précédente, en interne, sqlmap modifie maintenant ses charges utiles. Dans l'étape suivante, nous examinerons la différence dans les charges utiles générées.
Exécuter un scan avec le script de "tamper" sélectionné
Dans cette étape, vous avez déjà exécuté la commande sqlmap avec le script de "tamper" space2comment lors de l'étape précédente. Le but de cette étape est de renforcer l'exécution et de préparer la comparaison des charges utiles.
La commande que vous avez exécutée était :
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --tamper=space2comment --output-dir=/tmp/sqlmap_output_with_tamper
Cette commande demande à sqlmap d'effectuer un scan, mais cette fois, il modifiera ses charges utiles en utilisant le script de "tamper" space2comment. Par exemple, une charge utile comme UNION SELECT pourrait être transformée en UNION/**/SELECT. Ce changement subtil peut souvent contourner les mécanismes simples de filtrage des espaces.
L'option --output-dir=/tmp/sqlmap_output_with_tamper garantit que la sortie de sqlmap, y compris toutes les charges utiles ou journaux générés, est stockée dans un répertoire séparé. Cela sera utile pour comparer les charges utiles à l'étape suivante.
Laissez le scan sqlmap se terminer. Même s'il ne trouve pas de vulnérabilité sur la cible factice, l'essentiel est que sqlmap ait tenté d'utiliser des charges utiles modifiées.
Comparer les charges utiles avec et sans le script de "tamper"
Dans cette dernière étape, vous allez comparer les charges utiles générées par sqlmap avec et sans le script de "tamper" space2comment. Cette comparaison démontrera visuellement comment les scripts de "tamper" modifient les charges utiles d'injection pour contourner les filtres.
sqlmap enregistre ses activités, y compris les charges utiles qu'il envoie, dans le répertoire de sortie. Nous avons spécifié des répertoires de sortie différents pour les scans des étapes 1 et 3.
Tout d'abord, essayons de trouver des fichiers journaux qui pourraient contenir les charges utiles. sqlmap stocke généralement les requêtes HTTP dans des fichiers au sein de son répertoire de sortie.
Naviguez vers les répertoires de sortie et recherchez les journaux de requêtes. Les noms de fichiers exacts peuvent varier, mais ils se trouvent généralement sous log/ ou directement dans le répertoire de la cible.
Essayons de trouver un fichier journal commun contenant les requêtes. sqlmap crée souvent un fichier session.log ou des fichiers similaires.
Utilisez grep pour rechercher des mots-clés SQL courants dans les fichiers journaux des deux exécutions.
Comparez les charges utiles en recherchant les différences dans la manière dont les espaces sont gérés.
echo "--- Payloads without tamper script ---"
grep -r "UNION" /tmp/sqlmap_output_no_tamper/ | head -n 5
echo ""
echo "--- Payloads with tamper script ---"
grep -r "UNION" /tmp/sqlmap_output_with_tamper/ | head -n 5
Vous devriez observer que dans la sortie "Payloads with tamper script", les espaces dans les mots-clés SQL (comme UNION SELECT) sont remplacés par des commentaires /**/, tandis que dans la sortie "Payloads without tamper script", des espaces normaux sont utilisés. Cela illustre clairement l'effet du script de "tamper" space2comment.
Cette comparaison souligne l'efficacité des scripts de "tamper" pour modifier les charges utiles afin de contourner les mécanismes de filtrage de base, faisant de sqlmap un outil plus polyvalent pour les tests d'intrusion.
Résumé
Dans ce laboratoire, vous avez appris avec succès à utiliser les scripts de "tamper" de sqlmap pour contourner les filtres de base des applications web. Vous avez commencé par comprendre la nécessité des techniques d'évasion face aux filtres d'entrée. Vous avez ensuite exploré comment lister les scripts de "tamper" disponibles en utilisant --list-tampers et sélectionné le script space2comment pour une démonstration pratique. Enfin, vous avez exécuté sqlmap avec et sans le script de "tamper" et comparé les charges utiles générées, observant clairement comment le script space2comment a modifié les espaces en commentaires /**/. Cette expérience pratique vous a doté d'une compétence fondamentale pour améliorer vos capacités de test d'injection SQL en contournant les mécanismes de filtrage courants.


