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.