Énumérer les services HTTP avec Nmap

NmapNmapBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, le but est d'apprendre à énumérer les services HTTP à l'aide de Nmap. Vous commencerez par exécuter une énumération HTTP sur une adresse IP cible 192.168.1.1 avec le script http-enum. Ensuite, vous scannerez le port 80 sur 127.0.0.1, ajouterez un agent utilisateur et enregistrerez les résultats de l'énumération. Enfin, vous passerez en revue les résultats de la recherche HTTP et les comparerez avec un scan de bannière dans le terminal Xfce.

Souvenez-vous, dans les scénarios du monde réel, vous devriez seulement scanner des réseaux et des systèmes avec une autorisation expresse.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/os_version_detection("OS and Version Detection") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/output_formats -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} nmap/save_output -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} nmap/port_scanning -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} nmap/target_specification -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} nmap/os_version_detection -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} nmap/service_detection -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} nmap/scripting_basics -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} nmap/script_management -.-> lab-547098{{"Énumérer les services HTTP avec Nmap"}} end

Exécuter une énumération HTTP avec nmap --script http-enum 192.168.1.1

Dans cette étape, nous allons utiliser Nmap avec le script http-enum pour énumérer les services HTTP sur une machine cible. Ce script aide à identifier les vulnérabilités potentielles et les configurations erronées en découvrant les fichiers et les répertoires web communs.

Avant de commencer, parlons brièvement de ce qu'est Nmap et les scripts NSE. Nmap ("Network Mapper") est une utilité gratuite et open-source pour la découverte de réseaux et l'audit de sécurité. L'NSE (Nmap Scripting Engine) permet aux utilisateurs d'écrire des scripts pour automatiser une grande variété de tâches de réseau. Le script http-enum est un tel script NSE conçu pour énumérer les ressources HTTP communes.

Pour ce laboratoire, nous allons cibler l'adresse IP 192.168.1.1. Notez que dans un scénario du monde réel, vous ne devriez scanner que les réseaux et les systèmes pour lesquels vous avez une autorisation expresse de tester.

Maintenant, exécutons la commande Nmap :

sudo nmap --script http-enum 192.168.1.1

Cette commande indique à Nmap de :

  • sudo : Exécuter la commande avec les privilèges d'administrateur, ce qui peut être nécessaire pour certaines opérations Nmap.
  • nmap : Appeler l'outil Nmap.
  • --script http-enum : Spécifier que nous voulons utiliser le script http-enum.
  • 192.168.1.1 : L'adresse IP cible à scanner.

Après avoir exécuté la commande, vous verrez une sortie similaire à la suivante (la sortie exacte dépendra du système cible) :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /icons/: Potentiellement intéressant répertoire avec une liste sur 'apache/2.4.18 (ubuntu)'
|  /robots.txt: Fichier Robots
|_ /server-status/: Page d'état du serveur

Nmap done: 1 IP address (1 host up) scanned in 1.23 seconds

La sortie montre que le script http-enum a trouvé quelques ressources intéressantes :

  • /icons/ : Un répertoire qui pourrait contenir des icônes et potentiellement révéler des informations sur le serveur web.
  • /robots.txt : Un fichier qui spécifie les parties du site web qui ne devraient pas être parcourues par les robots web.
  • /server-status/ : Une page qui affiche des informations d'état du serveur.

Ces résultats peuvent être étudiés plus en détail pour identifier les vulnérabilités potentielles ou les configurations erronées.

Scanner le port 80 avec nmap --script http-enum -p 80 127.0.0.1

Dans cette étape, nous allons concentrer notre scan Nmap sur un port spécifique, le port 80, en utilisant le script http-enum. Spécifier un port peut aider à réduire le champ du scan et à obtenir des résultats plus ciblés. Nous allons scanner 127.0.0.1, qui est l'adresse de bouclage, représentant la machine locale. Cela est utile pour tester les services exécutés sur votre propre système.

Analysons la commande que nous allons utiliser :

sudo nmap --script http-enum -p 80 127.0.0.1

Voici ce que signifie chaque partie de la commande :

  • sudo : Exécute la commande avec les privilèges d'administrateur. Cela peut être nécessaire pour obtenir des résultats précis, en particulier pour les numéros de port les plus bas.
  • nmap : Appelle l'outil Nmap.
  • --script http-enum : Spécifie que nous voulons utiliser le script http-enum pour énumérer les ressources HTTP.
  • -p 80 : Cette option indique à Nmap de ne scanner que le port 80. Le port 80 est le port standard pour HTTP (Hypertext Transfer Protocol), le protocole utilisé pour la plupart des sites web.
  • 127.0.0.1 : L'adresse IP cible, dans ce cas, l'adresse de bouclage, qui fait référence à la machine locale.

Maintenant, exécutez la commande dans votre terminal :

sudo nmap --script http-enum -p 80 127.0.0.1

La sortie ressemblera à ceci (la sortie exacte dépend des services exécutés sur votre machine locale) :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).

PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /index.html: Possible interesting file
|_ /robots.txt: Robots file

Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds

Dans cet exemple, le script http-enum a trouvé /index.html et /robots.txt. Ce sont des fichiers communs sur les serveurs web, et une enquête plus approfondie pourrait révéler plus d'informations sur la configuration du serveur et les vulnérabilités potentielles. En spécifiant le port 80, nous avons concentré le scan et reçu des résultats spécifiques au service HTTP exécuté sur la machine locale.

Ajouter un agent utilisateur avec nmap --script http-enum --script-args http.useragent=Test 192.168.1.1

Dans cette étape, nous allons personnaliser l'en-tête User-Agent utilisé par le script http-enum. L'en-tête User-Agent est envoyé par le client (dans ce cas, Nmap) au serveur et identifie le logiciel client. Modifier l'User-Agent peut être utile pour plusieurs raisons, telles que :

  • Contourner les mesures de sécurité de base : Certains serveurs peuvent bloquer les requêtes provenant d'outils de scan connus. Changer l'User-Agent peut aider à contourner ces blocages.
  • Tester le comportement du serveur : Vous pouvez observer la manière dont le serveur répond à différentes chaînes d'User-Agent.
  • Discrétion : Utiliser un User-Agent moins courant peut rendre vos scans moins apparents.

Nous allons utiliser l'option --script-args pour modifier la valeur de http.useragent.

Voici la commande que nous allons utiliser :

sudo nmap --script http-enum --script-args http.useragent=Test 192.168.1.1

Analysons cette commande :

  • sudo : Exécute la commande avec les privilèges d'administrateur.
  • nmap : Appelle l'outil Nmap.
  • --script http-enum : Spécifie que nous voulons utiliser le script http-enum.
  • --script-args http.useragent=Test : C'est la partie clé. Elle passe un argument au script http-enum. Plus précisément, elle définit la variable http.useragent à la valeur "Test". Cela signifie que lorsque le script envoie des requêtes HTTP, il utilisera "Test" comme en-tête User-Agent.
  • 192.168.1.1 : L'adresse IP cible à scanner.

Exécutez la commande dans votre terminal :

sudo nmap --script http-enum --script-args http.useragent=Test 192.168.1.1

La sortie sera similaire à la sortie de la première étape, mais les requêtes HTTP envoyées au serveur incluront désormais l'en-tête User-Agent: Test. Vous ne verrez pas l'User-Agent directement dans la sortie de Nmap, mais il sera utilisé en arrière-plan pendant le scan.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /icons/: Potentiellement intéressant répertoire avec une liste sur 'apache/2.4.18 (ubuntu)'
|  /robots.txt: Fichier Robots
|_ /server-status/: Page d'état du serveur

Nmap done: 1 IP address (1 host up) scanned in 1.23 seconds

Cette étape démontre comment personnaliser les scripts Nmap en utilisant l'option --script-args. Cela vous permet d'ajuster le comportement des scripts et de les adapter à des situations spécifiques.

Sauvegarder les résultats d'énumération avec nmap --script http-enum -oN http_enum.txt 127.0.0.1

Dans cette étape, nous allons sauvegarder les résultats du script http-enum dans un fichier. Cela est crucial pour une analyse et un rapport ultérieurs. Nmap propose plusieurs options pour sauvegarder les résultats de scan dans différents formats. Nous utiliserons l'option -oN, qui sauvegarde les résultats dans un format "normal" lisible par l'homme.

Voici la commande que nous allons utiliser :

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

Analysons cette commande :

  • sudo : Exécute la commande avec les privilèges d'administrateur.
  • nmap : Appelle l'outil Nmap.
  • --script http-enum : Spécifie que nous voulons utiliser le script http-enum.
  • -oN http_enum.txt : Cette option indique à Nmap de sauvegarder les résultats au format normal dans le fichier nommé http_enum.txt. Le fichier sera créé dans votre répertoire actuel (~/projet).
  • 127.0.0.1 : L'adresse IP cible à scanner (l'adresse de bouclage).

Exécutez la commande dans votre terminal :

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

La sortie dans le terminal sera similaire à la sortie des étapes précédentes, mais en plus d'afficher les résultats à l'écran, Nmap les enregistrera également dans le fichier http_enum.txt.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /index.html: Possible interesting file
|_ /robots.txt: Robots file

Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds

Pour vérifier que le fichier a été créé et contient les résultats du scan, vous pouvez utiliser la commande cat pour afficher le contenu du fichier :

cat http_enum.txt

Vous devriez voir les résultats du scan Nmap dans la sortie. Ce fichier peut désormais être utilisé pour une analyse, un rapport ou comme entrée pour d'autres outils.

Vérifier les résultats HTTP dans le terminal Xfce

Dans cette étape, nous allons vérifier les résultats HTTP du fichier http_enum.txt que nous avons créé dans l'étape précédente. Nous utiliserons le terminal Xfce et la commande cat pour afficher le contenu du fichier et analyser les résultats.

Tout d'abord, assurez-vous d'être dans le répertoire ~/projet. C'est là que devrait se trouver le fichier http_enum.txt.

Pour afficher le contenu du fichier http_enum.txt, utilisez la commande suivante :

cat http_enum.txt

Cette commande imprimera le contenu du fichier dans votre terminal.

Exemple de sortie (la sortie réelle peut varier selon la cible) :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
PORT   STATE SERVICE
80/tcp open  http
|_http-enum:
|  /index.html: Possible interesting file
|_ /robots.txt: Robots file

Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds

Maintenant, analysons la sortie. Le script http-enum tente d'identifier des fichiers et des répertoires potentiellement intéressants sur le serveur web. Dans cet exemple, il a trouvé :

  • /index.html : C'est une page web par défaut commune. Il est intéressant d'enquêter pour voir quel contenu est servi.
  • /robots.txt : Ce fichier fournit des instructions aux robots web (crawlers) sur quelles parties du site web ne devraient pas être indexées. Il peut parfois révéler des zones cachées ou sensibles du site.

En vérifiant ces résultats, vous pouvez mieux comprendre la structure du serveur web et identifier des zones potentielles pour une enquête plus approfondie. Par exemple, vous pourriez utiliser un navigateur web pour visiter /index.html et /robots.txt pour voir ce qu'ils contiennent.

Cette étape démontre comment vérifier la sortie des scripts Nmap et identifier des informations potentiellement intéressantes. C'est une partie cruciale du processus de reconnaissance.

Comparer les résultats avec un scan de bannière dans le terminal Xfce

Dans cette étape, nous allons effectuer un scan de bannière à l'aide de Nmap et comparer ses résultats avec les résultats du script http-enum. Le captage de bannière est une technique utilisée pour recueillir des informations sur un service en examinant le bannière qu'il présente lorsqu'une connexion est établie. Cela peut révéler la version logicielle et d'autres détails.

Tout d'abord, effectuons un scan de bannière sur le port 80 de la cible (127.0.0.1) à l'aide de Nmap. Nous utiliserons l'option -sV, qui active la détection de version :

sudo nmap -sV -p 80 127.0.0.1

Cette commande tentera de déterminer le service et la version exécutés sur le port 80.

Exemple de sortie :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    SimpleHTTPServer 0.6 (Python 3.7.5)

Nmap done: 1 IP address (1 host up) scanned in 1.23 seconds

Dans cet exemple, le scan de bannière révèle que le serveur web est SimpleHTTPServer 0.6 exécuté sur Python 3.7.5.

Maintenant, comparons cette information avec les résultats du script http-enum, que nous avons vérifié dans l'étape précédente. Le script http-enum a identifié des fichiers et des répertoires potentiels, tels que /index.html et /robots.txt.

En comparant les résultats du scan de bannière et du script http-enum, nous pouvons construire une image plus complète du système cible. Le scan de bannière fournit des informations sur les versions logiciels, tandis que le script http-enum révèle des fichiers et des répertoires potentiels. Cette information combinée peut être précieuse pour identifier les vulnérabilités et planifier des attaques supplémentaires.

Par exemple, connaître la version du logiciel du serveur web vous permet de rechercher les vulnérabilités connues spécifiques à cette version. Les fichiers et les répertoires identifiés peuvent ensuite être ciblés pour une exploitation.

Cette étape démontre l'importance de combiner différentes techniques de balayage pour recueillir des informations complètes sur un système cible.

Sommaire

Dans ce laboratoire, les participants ont appris à énumérer les services HTTP à l'aide du script http-enum de Nmap. Ils ont exécuté des commandes pour scanner des adresses IP spécifiques telles que 192.168.1.1 et 127.0.0.1, en ciblant le port 80, en ajoutant un agent utilisateur personnalisé et en enregistrant les résultats dans un fichier texte. Le laboratoire a également mis l'accent sur l'utilisation des privilèges de superutilisateur pour certaines opérations et sur l'importance d'obtenir une autorisation pour les scans dans le monde réel.

Après avoir exécuté les scans, les participants ont été instruits de vérifier les résultats HTTP et de comparer les résultats avec un scan de bannière dans le terminal Xfce, les aidant à identifier les vulnérabilités potentielles et les configurations erronées sur les serveurs web cibles.