Utiliser le moteur de script Nmap (NSE)

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, vous allez apprendre à utiliser le Nmap Scripting Engine. Le laboratoire couvre l'exécution des scripts par défaut, l'utilisation de scripts spécifiques, l'ajout d'arguments aux scripts, la mise à jour des scripts, le test de plusieurs scripts et l'affichage de la sortie des scripts dans le terminal Xfce. Vous exécuterez des commandes telles que nmap -sC, nmap --script et nmap --script-updatedb contre des adresses IP cibles pour effectuer diverses analyses et recueillir des informations.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") 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-530187{{"Utiliser le moteur de script Nmap (NSE)"}} nmap/port_scanning -.-> lab-530187{{"Utiliser le moteur de script Nmap (NSE)"}} nmap/service_detection -.-> lab-530187{{"Utiliser le moteur de script Nmap (NSE)"}} nmap/scripting_basics -.-> lab-530187{{"Utiliser le moteur de script Nmap (NSE)"}} nmap/script_management -.-> lab-530187{{"Utiliser le moteur de script Nmap (NSE)"}} end

Exécuter les scripts par défaut avec nmap -sC 192.168.1.1

Dans cette étape, nous allons explorer la manière d'utiliser Nmap pour exécuter son ensemble par défaut de scripts contre une cible. Les scripts Nmap sont des outils puissants qui peuvent automatiser une large gamme de tâches, allant de l'identification de vulnérabilités à la collecte d'informations sur un système cible. L'option -sC indique à Nmap d'utiliser la catégorie de scripts "par défaut". Cette catégorie inclut des scripts considérés comme sûrs et utiles pour les scans à usage général.

Avant de commencer, vérifions que nous sommes dans le bon répertoire.

cd ~/projet

Maintenant, exécutons Nmap avec l'option -sC contre l'adresse IP cible 192.168.1.1. Cette adresse IP est un emplacement réservé. Dans un scénario réel, vous la remplaceriez par l'adresse IP réelle de la cible que vous voulez scanner. Pour cet environnement de laboratoire, nous supposerons que 192.168.1.1 est une cible valide.

sudo nmap -sC 192.168.1.1

Cette commande effectuera un scan Nmap standard, y compris un scan de ports et une détection de services, puis exécutera les scripts par défaut contre tous les ports ouverts. La sortie montrera les résultats du scan de ports, de la détection de services et toute information recueillie par les scripts.

La sortie ressemblera à ceci (la sortie exacte variera selon le système cible) :

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu)
| ssh-hostkey:
|   2048 ... (RSA)
| ssh-rsa ...
|_ssh-algorithm: ...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -1s, deviation: 0s, median: -1s
|_nbstat: NetBIOS name: ..., NetBIOS user: ..., NetBIOS MAC: ... (unknown)
| smb-os-discovery:
|   OS: Unix
|   ...
|_  System time: ...

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

Dans cet exemple, la sortie montre que le port 22 est ouvert et que SSH est en cours d'exécution. Le script ssh-hostkey a identifié la clé d'hôte SSH, et le script ssh-algorithm a identifié les algorithmes pris en charge. Le script clock-skew a détecté une légère différence d'heure sur le système cible. Les scripts nbstat et smb-os-discovery ont recueilli des informations sur les services NetBIOS et SMB respectivement.

Dans cette étape, nous allons apprendre à utiliser un script Nmap spécifique. Nmap dispose d'une vaste bibliothèque de scripts qui peuvent être utilisés pour effectuer diverses tâches. Nous allons utiliser le script banner, qui tente de récupérer la bannière d'un service exécuté sur un hôte cible. Les bannières contiennent souvent des informations sur la version du logiciel et d'autres détails qui peuvent être utiles pour la reconnaissance.

Tout d'abord, assurez-vous d'être dans le répertoire ~/projet :

cd ~/projet

Maintenant, utilisons la commande nmap avec l'option --script pour spécifier le script banner et cibler l'adresse IP de l'hôte local, 127.0.0.1.

sudo nmap --script banner 127.0.0.1

Cette commande indique à Nmap d'exécuter le script banner contre tous les ports ouverts sur 127.0.0.1. La sortie montrera les résultats du script, y compris toutes les bannières qui ont été récupérées.

La sortie peut ressembler à ceci (la sortie exacte dépendra des services exécutés sur votre hôte local) :

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
631/tcp  open  ipp
5900/tcp open  vnc
8000/tcp open  http
8080/tcp open  http

Host script results:
|_banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_banner: 111/tcp:  rpcbind version 2-4
|_banner: 631/tcp: CUPS v2.4.1
|_banner: 5900/tcp: RFB 003.008
|_banner: 8000/tcp: Werkzeug/2.0.1 Python/3.9.7
|_banner: 8080/tcp: Jetty(9.4.44.v20210927)

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

Dans cet exemple, le script banner a réussi à récupérer les bannières de plusieurs services exécutés sur 127.0.0.1, y compris des serveurs SSH, rpcbind, CUPS, VNC et HTTP. Les bannières fournissent des informations sur les versions de logiciel utilisées.

Ajouter des arguments avec nmap --script http-title --script-args http.useragent=Test 192.168.1.1

Dans cette étape, nous allons apprendre à passer des arguments à des scripts Nmap. Certains scripts nécessitent ou autorisent des arguments à être personnalisés. Nous allons utiliser le script http-title et modifier son argument http.useragent. Le script http-title récupère le titre d'un serveur HTTP. L'argument http.useragent spécifie la chaîne User-Agent que le script utilisera lors des requêtes HTTP.

Tout d'abord, naviguons vers notre répertoire de travail :

cd ~/projet

Maintenant, exécutons Nmap avec l'option --script pour spécifier le script http-title et l'option --script-args pour définir l'argument http.useragent sur Test. Nous utiliserons l'adresse IP cible 192.168.1.1. Rappelez-vous que dans un scénario réel, vous la remplaceriez par l'adresse IP réelle d'une cible exécutant un serveur HTTP.

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

Cette commande indique à Nmap d'exécuter le script http-title contre tous les ports HTTP ouverts sur 192.168.1.1, en utilisant "Test" comme chaîne User-Agent.

La sortie peut ressembler à ceci (la sortie exacte dépendra du système cible et de sa configuration de serveur HTTP) :

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0
|_http-title: Test

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

Dans cet exemple, le script http-title a réussi à récupérer le titre du serveur HTTP exécuté sur le port 80 de 192.168.1.1. L'argument http.useragent a été utilisé pour définir la chaîne User-Agent sur "Test" dans la requête HTTP. Le serveur peut enregistrer cette chaîne User-Agent, ce qui peut être utile pour identifier les scans. Si la cible n'a pas le port 80 ouvert, vous verrez une sortie différente.

Mettre à jour les scripts avec nmap --script-updatedb

Dans cette étape, nous allons mettre à jour la base de données de scripts Nmap. Le Nmap Scripting Engine (NSE) repose sur une base de données de scripts. Au fil du temps, de nouveaux scripts sont ajoutés et les scripts existants sont mis à jour. Pour vous assurer d'avoir les derniers scripts, vous devriez régulièrement mettre à jour la base de données de scripts.

Tout d'abord, assurez-vous d'être dans le répertoire ~/projet :

cd ~/projet

Maintenant, utilisons la commande nmap avec l'option --script-updatedb pour mettre à jour la base de données de scripts.

sudo nmap --script-updatedb

Cette commande téléchargera les informations les plus récentes sur les scripts et mettra à jour la base de données. La sortie montrera la progression de la mise à jour.

La sortie peut ressembler à ceci :

Starting Nmap 7.80 ( https://nmap.org ) at ...
NSE: Updating rule database.
NSE: Using nmap.org/svn/nse_svn to download the latest scripts.
Downloaded nmap-mac-prefixes.lua
Downloaded nselib/data/nmap-services.
Downloaded nselib/data/service-ports.
Downloaded scripts/script.db
NSE: Script database updated.
Nmap done: 0 IP addresses (0 hosts up) scanned in ... seconds

Cette sortie indique que la base de données de scripts a été mise à jour avec succès. Maintenant, vous avez les derniers scripts Nmap disponibles pour être utilisés.

Tester plusieurs scripts avec nmap --script banner,http-title 127.0.0.1

Dans cette étape, nous allons exécuter plusieurs scripts Nmap simultanément. Cela vous permet de collecter plus d'informations sur une cible lors d'un seul balayage. Nous allons utiliser les scripts banner et http-title sur la cible 127.0.0.1.

Tout d'abord, naviguons vers notre répertoire de travail :

cd ~/projet

Maintenant, exécutons Nmap avec l'option --script, en spécifiant les deux scripts banner et http-title, séparés par une virgule. Nous utiliserons l'adresse IP cible 127.0.0.1, qui fait référence à la machine locale.

sudo nmap --script banner,http-title 127.0.0.1

Cette commande indique à Nmap d'exécuter les scripts banner et http-title contre tous les ports ouverts sur 127.0.0.1. Le script banner tente de récupérer les bannières de service, tandis que le script http-title récupère le titre de tous les serveurs HTTP.

La sortie peut ressembler à ceci (la sortie exacte dépendra des services exécutés sur 127.0.0.1) :

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000018s latency).
Loopback interface ignored
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu)
| banner: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
|_ssh-hostkey:
80/tcp open  http    nginx 1.18.0
|_http-title: Welcome to nginx!

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

Dans cet exemple, le script banner a récupéré la bannière SSH du port 22, et le script http-title a récupéré le titre du serveur HTTP exécuté sur le port 80. Si la cible n'a pas ces ports ouverts, vous verrez une sortie différente.

Consulter la sortie des scripts dans le terminal Xfce

Dans cette étape, nous allons nous concentrer sur la consultation de la sortie des scripts Nmap dans le terminal Xfce. Le terminal Xfce est l'émulateur de terminal par défaut dans l'environnement de la machine virtuelle LabEx. Vous l'avez déjà utilisé dans les étapes précédentes. Cette étape porte plus sur la compréhension de la manière d'interpréter la sortie et moins sur l'exécution d'une nouvelle commande.

La sortie des scripts Nmap est affichée directement dans le terminal une fois le balayage terminé. Le format de la sortie dépend du script lui-même. Certains scripts fournissent une sortie textuelle simple, tandis que d'autres peuvent fournir des données plus structurées.

Revoyons la commande de l'étape précédente :

sudo nmap --script banner,http-title 127.0.0.1

Lorsque vous exécutez cette commande, la sortie est imprimée directement dans le terminal Xfce. Vous pouvez faire défiler la sortie du terminal pour examiner les résultats des scripts banner et http-title.

Par exemple, la sortie peut inclure :

  • Informations sur la bannière : Le script banner tente de récupérer les bannières de service des ports ouverts. Cela peut révéler la version du logiciel exécuté sur un port particulier.
  • Titre HTTP : Le script http-title récupère le titre de la page web servie par un serveur HTTP.

Le principal est d'examiner attentivement la sortie à la recherche d'informations utiles. Le terminal Xfce fournit un moyen simple et direct de consulter ces informations. Vous pouvez également utiliser des outils Linux standards comme grep pour filtrer la sortie si nécessaire. Par exemple, pour ne trouver que les lignes contenant "http-title", vous pouvez rediriger la sortie de la commande nmap vers grep :

sudo nmap --script banner,http-title 127.0.0.1 | grep "http-title"

Cette commande exécutera le même balayage Nmap que précédemment, mais ne montrera que les lignes de la sortie qui contiennent la chaîne de caractères "http-title". Cela peut être utile pour se concentrer sur des parties spécifiques de la sortie.

Cette étape porte principalement sur l'observation et la compréhension. Il n'y a pas de commande unique à exécuter, mais plutôt une concentration sur la manière d'interpréter les résultats que vous avez déjà générés dans les étapes précédentes dans l'environnement du terminal Xfce.

Sommaire

Dans ce laboratoire, les participants ont appris à utiliser le Nmap Scripting Engine grâce à diverses commandes. Ils ont commencé par exécuter des scripts par défaut en utilisant nmap -sC contre une adresse IP cible, qui inclut des scripts sûrs et utiles pour un balayage général. Ils ont également appris à utiliser un script spécifique avec nmap --script, à ajouter des arguments aux scripts avec --script-args, à mettre à jour les scripts avec --script-updatedb et à tester plusieurs scripts d'un coup. Enfin, ils ont consulté la sortie des scripts dans le terminal Xfce.