Zoeken op website

Nmap Script Engine (NSE)-scripts gebruiken in Linux


Nmap is een populaire, krachtige en platformonafhankelijke opdrachtregelscanner en verkenningstool voor netwerkbeveiliging. Het kan u ook helpen een overzicht te krijgen van de systemen die uw netwerk met elkaar verbonden hebben; je kunt het gebruiken om alle IP-adressen van live hosts te achterhalen, open poorten en services die op die hosts draaien te scannen, en nog veel meer.

Een van de interessante kenmerken van Nmap is de Nmap Script Engine (NSE), die nog meer flexibiliteit en efficiëntie met zich meebrengt. Hiermee kunt u uw eigen scripts schrijven in de programmeertaal Lua en deze scripts mogelijk delen met andere Nmap-gebruikers.

Lees ook: 29 praktische voorbeelden van Nmap-opdrachten voor Linux

Er zijn vier soorten NSE-scripts, namelijk:

  • Prerule-scripts – zijn scripts die vóór een van de scanbewerkingen van Nmap worden uitgevoerd. Ze worden uitgevoerd wanneer Nmap nog geen informatie over een doel heeft verzameld.
  • Hostscripts – zijn scripts die worden uitgevoerd nadat Nmap normale bewerkingen heeft uitgevoerd, zoals hostdetectie, poortscannen, versiedetectie en OS-detectie tegen een doelhost.
  • Servicescripts – zijn scripts die worden uitgevoerd tegen specifieke services die luisteren op een doelhost.
  • Postrule-scripts – zijn scripts die worden uitgevoerd nadat Nmap alle doelhosts heeft gescand.

Vervolgens worden deze scripts gegroepeerd in verschillende categorieën, waaronder die voor authenticatie (auth), ontdekken van hosts (broadcast), brute force-aanvallen om authenticatiegegevens te raden (brute<), meer over een netwerk ontdekken (discovery), een denial-of-service veroorzaken (dos), een kwetsbaarheid exploiteren (exploit) , etc. Een aantal scripts behoren tot de standaardcategorie.

Opmerking: voordat we verder gaan, moet u de volgende belangrijke punten noteren:

  • Voer geen scripts van derden uit zonder er kritisch naar te kijken of alleen als je de auteurs vertrouwt. Dit komt omdat deze scripts niet in een sandbox worden uitgevoerd en dus onverwacht of kwaadwillig uw systeem kunnen beschadigen of uw privacy kunnen schenden.
  • Ten tweede kunnen veel van deze scripts mogelijk als prerule- of postrule-script worden uitgevoerd. Met het oog hierop wordt aanbevolen om met het oog op de consistentie een prerule te gebruiken.
  • Nmap gebruikt de database scripts/script.db om de beschikbare standaardscripts en categorieën te achterhalen.

Om de locatie van alle beschikbare NSE-scripts te zien, voert u het zoekprogramma op de terminal uit, zoals dit:

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
...

NSE-scripts worden geladen met de vlag --script, waarmee u ook uw eigen scripts kunt uitvoeren door categorieën, scriptbestandsnamen of de naam van mappen op te geven waarin uw scripts zich bevinden.

De syntaxis voor het inschakelen van scripts is als volgt:

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

U kunt een beschrijving van een script bekijken met de optie --script-help. Bovendien kunt u aan sommige scripts argumenten doorgeven via de opties --script-args en --script-args-file. Deze laatste wordt gebruikt om een bestandsnaam op te geven in plaats van een opdrachtregel arg.

Om een scan uit te voeren met de meeste standaardscripts, gebruikt u de vlag -sC of gebruikt u als alternatief --script=default, zoals weergegeven.

nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
Voorbeelduitvoer
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

Om een script voor het juiste doel te gebruiken, kunt u eerst een korte beschrijving krijgen van wat het feitelijk doet, bijvoorbeeld http-headers.

nmap --script-help http-headers scanme.nmap.org
Voorbeelduitvoer
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.

NSE-scripts laden om Nmap-scans uit te voeren

U kunt scripts selecteren of laden om een scan uit te voeren op verschillende manieren die hieronder worden uitgelegd.

Scriptnaam gebruiken

Als u eenmaal weet wat een script doet, kunt u er een scan mee uitvoeren. U kunt één script gebruiken of een door komma's gescheiden lijst met scriptnamen invoeren. Met de onderstaande opdracht kunt u de HTTP-headers bekijken die op de webserver op de doelhost zijn geconfigureerd.

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

Categorieën gebruiken

U kunt scripts ook laden vanuit één categorie of vanuit een door komma's gescheiden lijst met categorieën. In dit voorbeeld gebruiken we alle scripts in de standaard- en uitzendingscategorie om een scan uit te voeren op de host 192.168.56.1.

nmap --script default,broadcast 192.168.56.1

* Wildcard gebruiken

Dit is handig als u scripts met een bepaald naampatroon wilt selecteren. Om bijvoorbeeld alle scripts te laden waarvan de naam begint met ssh, voert u de onderstaande opdracht uit op de terminal:

nmap --script "ssh-*" 192.168.56.1

Booleaanse expressies gebruiken

U kunt ook scripts selecteren met behulp van Booleaanse expressies die u kunt bouwen met de operatoren en, of en niet. En namen in een Booleaanse expressie kunnen een categorie zijn, een bestandsnaam uit script.db, of alles.

Met de volgende opdracht worden scripts geladen uit de standaard- of uitzendingscategorieën.

nmap --script "default or broadcast" 192.168.56.10

Wat gelijk staat aan:

nmap --script default,broadcast 192.168.56.10

Om alle scripts te laden en de scripts in de categorie vuln weg te laten, voert u deze opdracht uit op de terminal.

nmap --script "not vuln" 192.168.56.10

Het volgende commando ziet er een beetje ingewikkeld uit, maar is gemakkelijk te begrijpen. Het selecteert scripts in de standaard- of uitzendingscategorieën, en laat de scripts weg waarvan de naam begint met ssh-:

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

Belangrijk is dat het mogelijk is om categorieën, scriptnamen, een map met uw aangepaste scripts of een Booleaanse expressie te combineren om scripts te laden, zoals dit:

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

Argumenten doorgeven aan NSE-scripts

Hieronder ziet u een voorbeeld dat laat zien hoe u argumenten aan scripts kunt doorgeven met de optie –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'"

Om een poortnummer door te geven, gebruikt u de -p nmap optie:

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'"

Met de bovenstaande opdracht wordt een audit uitgevoerd van de beveiligingsconfiguratie van de MySQL-databaseserver aan de hand van delen van de CIS MySQL v1.0.2 benchmark. U kunt ook uw eigen nuttige aangepaste auditbestanden maken voor andere MySQL-audits.

Dat is het voor nu. U kunt meer informatie vinden op de Nmap-manpagina of kijk op NSE-gebruik.

Bekijk deze handleiding om aan de slag te gaan met het schrijven van uw eigen NSE-scripts: https://nmap.org/book/nse-tutorial.html

Conclusie

Nmap is een werkelijk krachtige en nuttige tool die elke systeem- of netwerkbeheerder nodig heeft in zijn/haar beveiligingsarsenaal – NSE voegt er eenvoudigweg meer efficiëntie aan toe.

In dit artikel hebben we u kennis laten maken met de Nmap Script Engine en hebben we gekeken hoe u de verschillende beschikbare scripts in verschillende categorieën kunt vinden en gebruiken. Als u vragen heeft, aarzel dan niet om ons te schrijven via het onderstaande opmerkingenformulier.