Détecter les bannières de service dans Nmap

NmapBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous allez apprendre à détecter les bannières de service à l'aide de Nmap. Le principal objectif est de rassembler des informations sur les services réseau exécutés sur une machine cible, telles que les noms de service, les versions et les systèmes d'exploitation. Vous allez exécuter le script de bannière sur une adresse IP cible, scanner des ports spécifiques, ajouter de la verbeux à l'examen, enregistrer les résultats et examiner et comparer les bannières dans le terminal Xfce.

Vous commencerez par utiliser la commande nmap --script banner pour scanner tous les ports par défaut sur une cible. Ensuite, vous scannerez des ports spécifiques, augmenterez la verbeux pour obtenir une sortie plus détaillée, enregistrerez les résultats dans un fichier et, finalement, analyserez les bannières pour comprendre les services exécutés sur la cible.

Exécutez le script de bannière avec nmap --script banner 192.168.1.1

Dans cette étape, nous allons utiliser le script de capture de bannière d'Nmap pour identifier les services exécutés sur une machine cible. La capture de bannière est une technique utilisée pour rassembler des informations sur un service réseau en examinant la bannière qu'il transmet lorsqu'une connexion est établie. Cette bannière contient souvent des détails tels que le nom du service, la version et le système d'exploitation.

Commençons par comprendre la commande que nous allons utiliser :

nmap --script banner 192.168.1.1

  • nmap : C'est le scanner de réseau en ligne de commande.
  • --script banner : Cette option indique à Nmap d'utiliser le script banner, qui est conçu pour capturer les bannières des ports ouverts.
  • 192.168.1.1 : C'est l'adresse IP cible. Vous devrez la remplacer par l'adresse IP réelle d'une machine sur votre réseau que vous avez autorisation à scanner. Pour cet environnement de laboratoire, nous utiliserons 127.0.0.1 (localhost) comme cible. Cela vous assure que vous scannez votre propre machine et évite tout problème éthique ou légal potentiel.

Maintenant, exécutons la commande. Ouvrez votre terminal Xfce et tapez ceci :

nmap --script banner 127.0.0.1

Cette commande va scanner tous les ports par défaut sur 127.0.0.1 et essayer de capturer les bannières de tout service ouvert.

Vous pouvez voir une sortie similaire à celle-ci (la sortie exacte dépendra des services exécutés sur votre machine) :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

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

Dans cet exemple, Nmap a trouvé un service SSH exécuté sur le port 22. La bannière révèle qu'il s'agit d'OpenSSH version 8.2p1 exécuté sur Ubuntu.

Si vous n'avez aucun service exécuté sur votre machine, vous ne verrez peut-être aucune information de bannière. Ne vous inquiétez pas, la commande fonctionne toujours. Dans les étapes suivantes, nous allons configurer des services pour nous assurer d'avoir des bannières à capturer.

Effectuez un scan de ports spécifiques avec nmap --script banner -p 22,80 127.0.0.1

Dans l'étape précédente, nous avons scanné tous les ports par défaut à l'aide du script de bannière. Maintenant, nous allons nous concentrer sur le scan de ports spécifiques. Cela est utile lorsque vous savez quels services vous intéressent ou lorsque vous voulez réduire le temps de scan.

La commande que nous allons utiliser est :

nmap --script banner -p 22,80 127.0.0.1

Analysons la commande :

  • nmap : Le scanner de réseau.
  • --script banner : Spécifie le script de capture de bannière.
  • -p 22,80 : Cette option indique à Nmap de ne scanner que les ports 22 et 80. Le port 22 est couramment utilisé pour SSH (Secure Shell), et le port 80 est couramment utilisé pour HTTP (serveur web).
  • 127.0.0.1 : L'adresse IP cible (localhost).

Avant d'exécuter la commande, vérifions que nous avons des services exécutés sur ces ports. La machine virtuelle LabEx devrait avoir SSH exécuté sur le port 22 par défaut. Nous allons installer un serveur web simple sur le port 80.

Ouvrez votre terminal Xfce et exécutez les commandes suivantes pour installer un serveur HTTP de base à l'aide de Python :

sudo apt update
sudo apt install -y python3-pip
sudo python3 -m pip install http.server

Maintenant, lancez le serveur HTTP sur le port 80. Accédez d'abord à votre répertoire ~/project.

cd ~/project
python3 -m http.server 80

Laissez cette fenêtre de terminal ouverte et le serveur HTTP en cours d'exécution. Ouvrez une nouvelle fenêtre de terminal Xfce pour continuer le scan Nmap.

Maintenant, dans la nouvelle fenêtre de terminal, exécutez la commande Nmap :

nmap --script banner -p 22,80 127.0.0.1

Vous devriez voir une sortie similaire à celle-ci :

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.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

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

Cette sortie montre que Nmap a scanné les ports 22 et 80, a capturé les bannières et a affiché les informations sur les services. Vous pouvez voir la bannière SSH et la bannière du serveur SimpleHTTP.

N'oubliez pas d'arrêter le serveur http Python une fois que vous avez terminé cette étape en appuyant sur Ctrl+C dans le terminal où il est exécuté.

Ajoutez la verbosité avec nmap -v --script banner 192.168.1.1

Dans cette étape, nous allons ajouter de la verbosité à notre scan Nmap. La verbosité fournit des informations plus détaillées sur le processus de scan, ce qui peut être utile pour le dépannage ou pour comprendre ce que Nmap fait en coulisse.

La commande que nous allons utiliser est :

nmap -v --script banner 127.0.0.1

Analysons la commande :

  • nmap : Le scanner de réseau.
  • -v : Cette option augmente le niveau de verbosité. Vous pouvez utiliser -vv pour une verbosité encore plus élevée.
  • --script banner : Spécifie le script de capture de bannière.
  • 127.0.0.1 : L'adresse IP cible (localhost).

Avant d'exécuter la commande, assurez-vous que le serveur http Python est toujours en cours d'exécution depuis l'étape précédente. Sinon, relancez-le dans une fenêtre de terminal séparée :

cd ~/project
python3 -m http.server 80

Maintenant, dans une nouvelle fenêtre de terminal, exécutez la commande Nmap avec la verbosité :

nmap -v --script banner 127.0.0.1

Vous devriez voir une sortie similaire à celle-ci (la sortie exacte dépendra des services exécutés sur votre machine) :

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Initiating Ping Scan at 10:10
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating Connect Scan at 10:10
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Completed Connect Scan at 10:10, 0.00s elapsed (1000 total ports)
Initiating Service scan at 10:10
Scanning 2 services on localhost (127.0.0.1)
Completed Service scan at 10:10, 0.01s elapsed (2 services total)
Initiating NSE script scan at 10:10
Scanning localhost (127.0.0.1)
Completed NSE script scan at 10:10, 0.09s elapsed
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Remarquez les informations supplémentaires fournies par l'option -v. Vous pouvez voir les différentes étapes du scan, telles que le Ping Scan, la résolution DNS et le Connect Scan. Cela peut être très utile pour comprendre comment Nmap fonctionne et pour diagnostiquer tout problème.

N'oubliez pas d'arrêter le serveur http Python une fois que vous avez terminé cette étape en appuyant sur Ctrl+C dans le terminal où il est exécuté.

Enregistrez les résultats du bannière avec nmap --script banner -oN banners.txt 127.0.0.1

Dans cette étape, nous allons sauvegarder les résultats de notre scan Nmap dans un fichier. Cela est utile pour une analyse ultérieure ou à des fins de rapport.

La commande que nous allons utiliser est :

nmap --script banner -oN banners.txt 127.0.0.1

Analysons la commande :

  • nmap : Le scanner de réseau.
  • --script banner : Spécifie le script de capture de bannière.
  • -oN banners.txt : Cette option indique à Nmap de sauvegarder les résultats au format "normal" dans un fichier nommé banners.txt. D'autres formats de sortie sont disponibles (par exemple, -oG pour une sortie utilisable avec Grep, -oX pour une sortie au format XML), mais -oN est un format lisible par l'homme.
  • 127.0.0.1 : L'adresse IP cible (localhost).

Avant d'exécuter la commande, assurez-vous que le serveur http Python est toujours en cours d'exécution depuis l'étape précédente. Sinon, relancez-le dans une fenêtre de terminal séparée :

cd ~/project
python3 -m http.server 80

Maintenant, dans une nouvelle fenêtre de terminal, exécutez la commande Nmap pour sauvegarder les résultats dans un fichier :

nmap --script banner -oN banners.txt 127.0.0.1

Vous ne verrez pas les résultats du scan imprimés dans le terminal cette fois. Au lieu de cela, Nmap enregistrera la sortie dans le fichier banners.txt dans votre répertoire actuel (~/project).

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

cat banners.txt

Vous devriez voir une sortie similaire à celle-ci dans le terminal :

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:15:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

Cela confirme que les résultats du scan ont été sauvegardés dans le fichier banners.txt.

N'oubliez pas d'arrêter le serveur http Python une fois que vous avez terminé cette étape en appuyant sur Ctrl+C dans le terminal où il est exécuté.

Revoyez les détails du bannière dans le terminal Xfce

Dans cette étape, nous allons vérifier les détails des bannières que nous avons sauvegardés dans le fichier banners.txt à l'étape précédente. Nous utiliserons le terminal Xfce pour afficher le contenu du fichier et comprendre les informations qu'il contient.

Tout d'abord, assurez-vous d'avoir le fichier banners.txt dans votre répertoire ~/project. Si vous n'avez pas terminé l'étape précédente, veuillez le faire avant de continuer.

Pour afficher le contenu du fichier banners.txt, ouvrez une fenêtre de terminal et utilisez la commande cat :

cat banners.txt

La sortie affichera le contenu du fichier, qui devrait ressembler à ceci :

## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:20:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

Analysons la sortie :

  • Nmap scan report for localhost (127.0.0.1) : Cela indique que le scan a été effectué sur le localhost (127.0.0.1).
  • Host is up : Cela confirme que l'hôte cible est accessible.
  • PORT STATE SERVICE : Cette section fournit des informations sur les ports ouverts sur l'hôte cible.
  • 22/tcp open ssh : Cela indique que le port 22 est ouvert et que le service SSH est en cours d'exécution.
  • | banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5 : Ceci est l'information du bannière pour le service SSH. Elle révèle la version de SSH et le système d'exploitation.
  • 80/tcp open http : Cela indique que le port 80 est ouvert et que le service HTTP est en cours d'exécution.
  • | banner: Server: SimpleHTTP/3.10 Python/3.10 : Ceci est l'information du bannière pour le service HTTP. Elle révèle le logiciel et la version du serveur.

En vérifiant les détails des bannières, vous pouvez obtenir des informations précieuses sur les services en cours d'exécution sur l'hôte cible. Ces informations peuvent être utilisées pour l'analyse des vulnérabilités ou pour identifier les risques de sécurité potentiels.

N'oubliez pas d'arrêter le serveur http Python une fois que vous avez terminé cette étape en appuyant sur Ctrl+C dans le terminal où il est exécuté.

Comparez les bannières sur différents ports dans le terminal Xfce

Dans cette étape, nous allons comparer les informations de bannière obtenues à partir de différents ports. Cela peut nous aider à identifier les services en cours d'exécution sur ces ports et à comprendre leurs versions. Nous utiliserons le terminal Xfce et la commande grep pour extraire et comparer les informations de bannière à partir du fichier banners.txt.

Tout d'abord, assurez-vous d'avoir le fichier banners.txt dans votre répertoire ~/project, qui contient les résultats du scan Nmap des étapes précédentes.

Pour extraire les informations de bannière pour le port 22 (SSH), utilisez la commande suivante :

grep "22/tcp" banners.txt

Cela affichera la ligne contenant des informations sur le port 22, y compris la bannière :

22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

De manière similaire, pour extraire les informations de bannière pour le port 80 (HTTP), utilisez la commande suivante :

grep "80/tcp" banners.txt

Cela affichera la ligne contenant des informations sur le port 80, y compris la bannière :

80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Maintenant, comparons les informations de bannière. Nous pouvons constater que :

  • Le port 22 est utilisé pour exécuter SSH, et la bannière révèle qu'il s'agit d'OpenSSH version 8.2p1 sur Ubuntu.
  • Le port 80 est utilisé pour exécuter HTTP, et la bannière révèle qu'il s'agit d'un serveur SimpleHTTP implémenté en Python 3.10.

En comparant les informations de bannière, nous pouvons rapidement identifier les services en cours d'exécution sur ces ports et leurs versions. Ces informations sont précieuses pour les évaluations de sécurité et l'analyse des vulnérabilités. Par exemple, connaître la version spécifique de SSH ou du serveur HTTP nous permet de vérifier les vulnérabilités connues associées à ces versions.

Dans cet exemple simple, nous avons seulement comparé deux ports. Cependant, vous pouvez étendre cette technique pour comparer les bannières entre de nombreux ports et hôtes différents pour avoir une compréhension complète des services réseau en cours d'exécution dans votre environnement.

N'oubliez pas d'arrêter le serveur http Python une fois que vous avez terminé cette étape en appuyant sur Ctrl+C dans le terminal où il est exécuté.

Résumé

Dans ce laboratoire, les participants apprennent à utiliser Nmap pour détecter les bannières de service. Ils commencent par exécuter le script de bannière avec nmap --script banner sur une adresse IP cible, en utilisant 127.0.0.1 pour éviter les problèmes éthiques et légaux. Ils apprennent également à scanner des ports spécifiques, à ajouter de la verbeux à l'examen et à enregistrer les résultats dans un fichier. Enfin, ils examinent et comparent les détails des bannières dans le terminal Xfce.