Recherche de site Web

Comment utiliser les scripts Nmap Script Engine (NSE) sous Linux


Nmap est un outil d'analyse et d'exploration de sécurité réseau en ligne de commande populaire, puissant et multiplateforme. Il peut également vous aider à avoir un aperçu des systèmes connectés à votre réseau ; vous pouvez l'utiliser pour connaître toutes les adresses IP des hôtes actifs, analyser les ports ouverts et les services exécutés sur ces hôtes, et bien plus encore.

L'une des fonctionnalités intéressantes de Nmap est le Nmap Script Engine (NSE), qui lui apporte encore plus de flexibilité et d'efficacité. Il vous permet d'écrire vos propres scripts dans le langage de programmation Lua et éventuellement de partager ces scripts avec d'autres utilisateurs de Nmap.

Lire aussi : 29 exemples pratiques de commandes Nmap pour Linux

Il existe quatre types de scripts NSE, à savoir :

  • Scripts de pré-règle : sont des scripts qui s'exécutent avant toute opération d'analyse de Nmap. Ils sont exécutés lorsque Nmap n'a pas encore collecté d'informations sur une cible.
  • Scripts d'hôte : sont des scripts exécutés après que Nmap a effectué des opérations normales telles que la découverte d'hôte, l'analyse de port, la détection de version et la détection du système d'exploitation sur un hôte cible.
  • Scripts de service : sont des scripts exécutés sur des services spécifiques écoutant sur un hôte cible.
  • Scripts Postrule – sont des scripts exécutés après que Nmap a analysé tous ses hôtes cibles.

Ensuite, ces scripts sont regroupés sous diverses catégories, notamment ceux pour l'authentification (auth), la découverte d'hôtes (broadcast), les attaques par force brute pour deviner les informations d'authentification (brute<), en découvrir davantage sur un réseau (discovery), provoquer un déni de service (dos), exploiter une vulnérabilité (exploit) , etc. Un certain nombre de scripts appartiennent à la catégorie par défaut.

Remarque : Avant d'aller plus loin, vous devez prendre note de ces points clés :

  • N'exécutez pas de scripts provenant de tiers sans les examiner d'un œil critique ou seulement si vous faites confiance aux auteurs. En effet, ces scripts ne sont pas exécutés dans un bac à sable et pourraient donc endommager votre système de manière inattendue ou malveillante ou envahir votre vie privée.
  • Deuxièmement, bon nombre de ces scripts peuvent éventuellement s'exécuter comme un script de prérule ou de postrule. Compte tenu de cela, il est recommandé d’utiliser une pré-règle à des fins de cohérence.
  • Nmap utilise la base de données scripts/script.db pour déterminer les scripts et catégories par défaut disponibles.

Pour voir l'emplacement de tous les scripts NSE disponibles, exécutez l'utilitaire de localisation sur le terminal, comme ceci :

locate *.nse

/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...

Les scripts NSE sont chargés à l'aide de l'indicateur --script, qui vous permet également d'exécuter vos propres scripts en fournissant des catégories, des noms de fichiers de script ou le nom des répertoires où se trouvent vos scripts.

La syntaxe d'activation des scripts est la suivante :

nmap -sC target     #load default scripts
OR
nmap --script filename|category|directory|expression,...   target    

Vous pouvez afficher la description d'un script avec l'option --script-help. De plus, vous pouvez transmettre des arguments à certains scripts via les options --script-args et --script-args-file, cette dernière étant utilisée pour fournir un nom de fichier plutôt que un argument de ligne de commande.

Pour effectuer une analyse avec la plupart des scripts par défaut, utilisez l'indicateur -sC ou utilisez --script=default comme indiqué.

nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
Exemple de sortie
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Go ahead and ScanMe!

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

Pour utiliser un script dans le but approprié, vous pouvez tout d'abord obtenir une brève description de ce qu'il fait réellement, par exemple des en-têtes http.

nmap --script-help http-headers scanme.nmap.org
Exemple de sortie
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST

http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
  Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.

Chargement de scripts NSE pour effectuer des analyses Nmap

Vous pouvez sélectionner ou charger des scripts pour effectuer une analyse selon différentes méthodes expliquées ci-dessous.

Utilisation du nom du script

Une fois que vous savez ce que fait un script, vous pouvez effectuer une analyse en l'utilisant. Vous pouvez utiliser un seul script ou saisir une liste de noms de scripts séparés par des virgules. La commande ci-dessous vous permettra d'afficher les en-têtes HTTP configurés sur le serveur Web de l'hôte cible.

nmap --script http-headers scanme.nmap.org
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
| http-headers: 
|   Date: Wed, 15 Nov 2017 05:10:04 GMT
|   Server: Apache/2.4.7 (Ubuntu)
|   Accept-Ranges: bytes
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
179/tcp   filtered bgp
31337/tcp open     Elite

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

Utiliser des catégories

Vous pouvez également charger des scripts à partir d’une catégorie ou à partir d’une liste de catégories séparées par des virgules. Dans cet exemple, nous utilisons tous les scripts de la catégorie par défaut et diffusion pour effectuer une analyse sur l'hôte 192.168.56.1.

nmap --script default,broadcast 192.168.56.1

Utilisation du caractère générique *

Ceci est utile lorsque vous souhaitez sélectionner des scripts avec un modèle de nom donné. Par exemple, pour charger tous les scripts dont les noms commencent par ssh, exécutez la commande ci-dessous sur le terminal :

nmap --script "ssh-*" 192.168.56.1

Utiliser des expressions booléennes

Vous pouvez également sélectionner des scripts à l'aide d'expressions booléennes que vous pouvez créer à l'aide des opérateurs et, ou et not. Et les noms dans une expression booléenne peuvent être une catégorie, un nom de fichier provenant de script.db, ou tout cela.

La commande suivante chargera les scripts des catégories par défaut ou de diffusion.

nmap --script "default or broadcast" 192.168.56.10

Ce qui équivaut à :

nmap --script default,broadcast 192.168.56.10

Pour charger tous les scripts en omettant ceux de la catégorie vuln, exécutez cette commande sur le terminal.

nmap --script "not vuln" 192.168.56.10

La commande suivante semble un peu compliquée mais elle est facile à comprendre, elle sélectionne les scripts dans les catégories par défaut ou de diffusion, en laissant de côté ceux dont les noms commencent par ssh- :

nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10

Surtout, il est possible de combiner des catégories, des noms de scripts, un répertoire contenant vos scripts personnalisés ou une expression booléenne pour charger des scripts, comme ceci :

nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10

Passer des arguments aux scripts NSE

Vous trouverez ci-dessous un exemple montrant comment transmettre des arguments aux scripts avec l'option –script-args :

nmap --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"

Pour transmettre un numéro de port, utilisez l'option -p nmap :

nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', \ 
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"

La commande ci-dessus exécute un audit de la configuration de sécurité du serveur de base de données MySQL par rapport à certaines parties du test de référence CIS MySQL v1.0.2. Vous pouvez également créer vos propres fichiers d'audit personnalisés utiles pour d'autres audits MySQL.

C'est tout pour le moment. Vous pouvez trouver plus d'informations sur la page de manuel Nmap ou consulter Utilisation de NSE.

Pour commencer à écrire vos propres scripts NSE, consultez ce guide : https://nmap.org/book/nse-tutorial.html

Conclusion

Nmap est un outil vraiment puissant et utile dont tout administrateur système ou réseau a besoin dans son arsenal de sécurité – NSE y ajoute simplement plus d'efficacité.

Dans cet article, nous vous avons présenté le moteur de script Nmap et avons examiné comment rechercher et utiliser les différents scripts disponibles dans différentes catégories. Si vous avez des questions, n'hésitez pas à nous répondre via le formulaire de commentaires ci-dessous.