Nmap est un scanner et un outil d’exploration de sécurité réseau en ligne de commande populaire, puissant et multiplateforme. Il peut également vous aider à obtenir un aperçu des systèmes qui ont connecté votre réseau; vous pouvez l’utiliser pour découvrir toutes les adresses IP des hôtes en direct, analyser les ports ouverts et les services en cours d’exécution sur ces hôtes, et bien plus encore.
L’une des caractéristiques intéressantes de Nmap est le Moteur de script Nmap (NSE), ce qui lui apporte encore plus de flexibilité et d’efficacité. Il vous permet d’écrire vos propres scripts en Langage de programmation Lua, et éventuellement 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èglement – sont des scripts qui s’exécutent avant l’une des opérations de scan 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 contre un hôte cible.
- Scripts de service – sont des scripts exécutés sur des services spécifiques en écoute sur un hôte cible.
- Scripts de postrule – sont des scripts exécutés après que Nmap a scanné tous ses hôtes cibles.
Ensuite, ces scripts sont regroupés sous différentes catégories dont celles pour l’authentification (auth), découverte d’hôtes (diffuser), attaques par force brute pour deviner les informations d’authentification (brute), en savoir plus sur un réseau (Découverte), provoquant un déni de service (dos), exploitant une certaine vulnérabilité (exploit), etc. Un certain nombre de scripts appartiennent à la catégorie par défaut.
Noter: Avant d’aller plus loin, vous devez prendre note de ces points clés:
- N’exécutez pas de scripts 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 peuvent 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 en tant que prérègle ou alors postrule scénario. Compte tenu de cela, il est recommandé d’utiliser une pré-règle à des fins de cohérence.
- Nmap utilise le scripts / script.db base de données pour déterminer les scripts et les catégories par défaut disponibles.
Pour voir l’emplacement de tous les scripts NSE disponibles, exécutez le localiser l’utilitaire 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 du --script
flag, 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 pour activer les scripts est la suivante:
$ nmap -sC target #load default scripts OR $ nmap --script filename|category|directory|expression,... target
Vous pouvez afficher une description d’un script avec le --script-help
option. De plus, vous pouvez transmettre des arguments à certains scripts via le --script-args
et --script-args-file
options, la dernière est utilisée pour fournir un nom de fichier plutôt qu’un argument de ligne de commande.
Pour effectuer une analyse avec la plupart des scripts par défaut, utilisez le -sC
drapeau ou bien utiliser --script=default
comme montré.
$ 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, 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 de script
Une fois que vous savez ce que fait un script, vous pouvez effectuer une analyse en l’utilisant. Vous pouvez utiliser un script ou entrer une liste de noms de scripts séparés par des virgules. La commande ci-dessous vous permettra de visualiser les en-têtes HTTP configurés sur le serveur Web de l’hôte cible.
$ nmap --script http-headers scanme.nmap.org
Analyser les en-têtes HTTP
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
Utilisation des catégories
Vous pouvez également charger des scripts à partir d’une catégorie ou 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 un scan sur l’hôte 192.168.56.1.
$ nmap --script default,broadcast 192.168.56.1
Utilisation de * Wildcard
Ceci est utile lorsque vous souhaitez sélectionner des scripts avec un modèle de nom donné. Par exemple pour charger tous les scripts avec des noms commençant par ssh, exécutez la commande ci-dessous sur le terminal:
$ nmap --script "ssh-*" 192.168.56.1
Utilisation d’expressions booléennes
Vous pouvez également sélectionner des scripts à l’aide d’expressions booléennes que vous pouvez créer à l’aide du et, ou alors, et ne pas les opérateurs. Et les noms dans une expression booléenne peuvent être une catégorie, un nom de fichier de script.db, ou tous.
La commande suivante chargera les scripts à partir 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 du vuln category, 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 par défaut, ou les catégories 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 passer des arguments à des scripts avec le –Script-args option:
$ 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 le -p Option 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 du Sécurité du serveur de base de données MySQL configuration par rapport à des parties du CIS MySQL v1.0.2 référence. 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 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 que chaque administrateur système ou réseau besoins dans son arsenal de sécurité – NSE ajoute simplement plus d’efficacité à cela.
Dans cet article, nous vous avons présenté le Moteur de script Nmap et a regardé comment trouver et utiliser les divers scripts disponibles dans différentes catégories. Si vous avez des questions, n’hésitez pas à nous répondre via le formulaire de commentaire ci-dessous.
.