Énumérer les bases de données sur un serveur cible avec sqlmap

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à utiliser sqlmap pour énumérer les bases de données sur un serveur cible. L'énumération de bases de données est une étape cruciale dans le processus de test d'intrusion, vous permettant de découvrir les noms des bases de données présentes sur un serveur potentiellement vulnérable à l'injection SQL. sqlmap automatise ce processus, le rendant efficace et simple. Nous commencerons par assurer une injection réussie à partir d'un scan précédent (simulé), puis nous utiliserons l'option --dbs pour lister toutes les bases de données, exécuterons la commande, interpréterons les résultats, et enfin différencierons les bases de données système des bases de données utilisateur.

Confirmation d'une injection réussie à partir d'un scan précédent

Dans cette étape, nous allons simuler la confirmation d'une injection SQL réussie à partir d'un scan précédent. Avant d'énumérer les bases de données, il est essentiel de s'assurer que l'URL cible est bien vulnérable à l'injection SQL et que sqlmap peut l'exploiter avec succès. Dans le cadre de ce laboratoire, nous supposerons qu'un scan précédent a identifié une URL vulnérable. Nous utiliserons une URL fictive pour démontrer la structure de la commande sqlmap.

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

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

Cette commande utilise sqlmap pour se connecter à l'URL spécifiée et tente de récupérer la bannière de la base de données. Une récupération réussie de la bannière indique une injection réussie.

Exemple de sortie :

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
    [!] do you want to enable full support for HTTP(S) proxy? [y/N] N
    [!] do you want to resume the previous session? [Y/n/q] n

    ... (sortie tronquée) ...

    web server operating system: Linux Debian
    web application technology: Apache 2.2.14, PHP 5.3.2
    back-end DBMS: MySQL >= 5.0.12
    banner: '5.1.73-0ubuntu0.10.04.1'

La ligne banner dans la sortie confirme que sqlmap a pu interagir avec succès avec la base de données et récupérer ses informations de version, indiquant ainsi une injection réussie.

Utilisation de l'option --dbs pour lister toutes les bases de données

Dans cette étape, nous allons découvrir l'option --dbs dans sqlmap, qui est spécifiquement utilisée pour énumérer et lister toutes les bases de données disponibles sur le serveur cible. Cette option est essentielle pour découvrir les noms des bases de données qui pourraient contenir des informations sensibles.

L'option --dbs indique à sqlmap d'effectuer une énumération de bases de données. Lorsque sqlmap exploite avec succès une vulnérabilité d'injection SQL, il peut alors interroger le serveur de base de données pour obtenir une liste de toutes les bases de données qu'il héberge.

La structure de la commande sera similaire à celle de l'étape précédente, mais avec l'ajout de --dbs :

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

Cette commande demandera à sqlmap d'identifier et de lister toutes les bases de données accessibles via la vulnérabilité d'injection SQL à l'URL donnée.

Exécution de la commande d'énumération de bases de données

Dans cette étape, nous allons exécuter la commande sqlmap avec l'option --dbs pour énumérer les bases de données. C'est l'action principale de ce laboratoire.

Exécutez la commande suivante dans votre terminal :

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

sqlmap va maintenant effectuer ses tests et, si cela réussit, affichera une liste des noms de bases de données. Ce processus peut prendre un certain temps car sqlmap effectue diverses techniques d'injection.

Exemple de sortie :

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
    [!] do you want to enable full support for HTTP(S) proxy? [y/N] N
    [!] do you want to resume the previous session? [Y/n/q] n

    ... (sortie tronquée) ...

    available databases [4]:
    [*] information_schema
    [*] mysql
    [*] performance_schema
    [*] acuart

La sortie montre la progression de sqlmap et, finalement, une liste de "bases de données disponibles" (available databases). Dans cet exemple, information_schema, mysql, performance_schema et acuart sont listées.

Interprétation de la liste des noms de bases de données retournés

Dans cette étape, nous allons interpréter la liste des noms de bases de données retournés par sqlmap. Comprendre ce que ces noms représentent est crucial pour les étapes ultérieures de tests d'intrusion.

D'après la sortie de l'étape précédente, vous avez peut-être vu une liste similaire à celle-ci :

available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] acuart

Chaque élément [*] représente une base de données trouvée sur le serveur cible.

  • information_schema : Il s'agit d'une base de données standard dans MySQL (et d'autres bases de données SQL) qui fournit un accès aux métadonnées de la base de données. Elle contient des informations sur toutes les autres bases de données, tables, colonnes et privilèges d'accès. C'est une base de données système.
  • mysql : Il s'agit d'une autre base de données système standard dans MySQL qui stocke les informations nécessaires au fonctionnement du serveur MySQL. Elle contient les comptes utilisateurs, les privilèges et d'autres données de configuration du serveur.
  • performance_schema : Il s'agit d'une base de données système dans MySQL utilisée pour surveiller l'exécution du serveur MySQL à un niveau bas. Elle fournit des informations sur les performances du serveur.
  • acuart : Ce nom de base de données est probablement une base de données créée par l'utilisateur, spécifique à l'application web fonctionnant sur le serveur. C'est souvent la base de données qui contient les données de l'application, telles que les identifiants des utilisateurs, les informations sur les produits ou d'autres données commerciales sensibles.

L'identification des bases de données créées par l'utilisateur, comme acuart, est souvent l'objectif principal, car elles sont plus susceptibles de contenir des informations précieuses pour un attaquant.

Différencier les bases de données système des bases de données utilisateur

Dans cette dernière étape, nous allons explicitement différencier les bases de données système des bases de données utilisateur en nous basant sur les résultats de l'énumération. Cette distinction est importante pour prioriser vos prochaines étapes dans un test d'intrusion.

Comme observé à l'étape précédente, des bases de données telles que information_schema, mysql et performance_schema sont généralement des bases de données au niveau système. Elles font partie des fonctionnalités de base du système de gestion de base de données et contiennent généralement des métadonnées, des comptes utilisateurs pour le SGBD lui-même et des statistiques de performance. Bien qu'elles puissent parfois être exploitées, elles contiennent rarement les données sensibles spécifiques à l'application que les attaquants recherchent souvent.

En revanche, les bases de données dont les noms ne sont pas des noms système standards (par exemple, acuart dans notre exemple, ou webapp_db, users, products, etc.) sont généralement des bases de données créées par l'utilisateur. Ces bases de données stockent les données réelles de l'application web, telles que :

  • Identifiants des utilisateurs (noms d'utilisateur, mots de passe hachés)
  • Informations clients
  • Catalogues de produits
  • Dossiers financiers
  • Autres données commerciales propriétaires

Lors de la réalisation d'un test d'intrusion, après avoir énuméré les bases de données, votre attention doit se porter sur ces bases de données créées par l'utilisateur. L'étape logique suivante serait d'énumérer les tables au sein de ces bases de données utilisateur, puis les colonnes au sein de ces tables, et enfin, d'extraire les données.

En comprenant cette distinction, vous pouvez cibler efficacement vos prochaines commandes sqlmap pour extraire les informations les plus précieuses. Par exemple, pour énumérer les tables de la base de données acuart, vous utiliseriez une commande telle que :

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

Cette commande démontre comment vous procéderiez à l'étape suivante d'extraction de données, en vous concentrant sur la base de données utilisateur identifiée.

Résumé

Dans ce laboratoire, vous avez appris avec succès comment énumérer les bases de données sur un serveur cible à l'aide de sqlmap. Vous avez commencé par comprendre l'importance de confirmer une injection SQL réussie. Ensuite, vous avez utilisé l'option --dbs pour lister toutes les bases de données disponibles et avez exécuté la commande pour voir les résultats. Enfin, vous avez appris à interpréter les noms de bases de données retournés, en distinguant les bases de données système des bases de données créées par l'utilisateur, potentiellement plus précieuses. Cette compétence est fondamentale pour tout testeur d'intrusion cherchant à extraire des informations d'applications web vulnérables.