NMap – Commando’s en Scripts
NMap staat voor “Network MAPper” en is een opensource netwerkscanner. NMap is van origine gemaakt als poortscanner voor Linux systemen. Tegenwoordig is NMap niet meer weg te denken uit het arsenaal van hackers en security researches. NMap is zoveel meer dan een gewone poortscanner. NMap kan gebruikt worden op vele systemen en wordt voornamelijk gebruikt voor het inventariseren van computersystemen over een netwerk. Hoe dit te werk gaat lees is in deze post!
NMap bestaat al sinds 1997 en is geschreven voor Gordon Lyon. Naast het feit dat NMap tegenwoordig onder meerdere besturingssystemen draait zoals Windows, Linux en Mac bestaat er ook een GUI. Deze GUI heette van origine NMapFE (NMap Front End) maar is later omgedoopt tot het bekende ZenMap.
Nmap wordt vaak gebruikt voor:
- Het identificeren van open poorten
- Netwerk inventarisatie en network mapping
- Security testing van network devices zoals firewalls
- Identificeren van nieuwe servers
- Vinden van vulnerabilities in het netwerk
In deze post zoomen we dieper in op verschillende NMap commando’s.
NMap informatie en Flags
Om de NMap commando’s beter te leren en te begrijpen gaan we eerst kijken met wat voor soort informatie NMap overweg kan en leren we de definitie van een aantal belangrijke flags. NMap flags zijn net als NMap commando’s op elk besturingssysteem hetzelfde. Ook ZenMap maakt gebruik van dezelfde structuur. Als je dus eenmaal de flags en commando’s weet kun je overal een succesvolle NMap scan uitvoeren.
Maar eerst wat algemene informatie:
- NMap kan IP adressen, ranges en hostnames scannen
- NMap kan overweg met IPv4 en IPv6
- NMap kan (vooral v.a. versie 7) gebruikt worden om DOS aanvallen te lanceren
- NMap kan doelcomputers exploiten
Veelgebruikte schakelopties (flags):
–help = Geeft meer informatie over de NMap commando opbouw en de verschillende schakelopties.
-iL = InputList. Met deze schakeloptie kun je een bestand opgeven met meerdere targets.
-p = Poort definitie. Met deze schakeloptie kun je het poortbereik opgeven welke gescand mag worden. De “-p-“ definitie betekend “alle 65535 mogelijke poorten”
-F = Fast. Deze Snelle scan scant de 100 meest gebruikte poorten.
-sS = SynScan. Met een synscan wordt alleen gekeken naar de SYN stap (1e stap) van de TCP 3-way-handshake en is juist hierdoor een stuk sneller en minder goed detecteerbaar. Uiteraard kunnen de resultaten minder accuraat zijn.
-sT = TCP connect scan. Hierbij moet de TCP 3-way-handshake volledig zijn en is een langzamere scan.
-Pn = Scan Anyway. NMap controleert niet of de host online is maar voert alle gevraagde scanopdrachten uit. Sommige hosts reageren niet op een PING en kunnen met de -Pn switch toch nuttige informatie retourneren.
-A = OS Scan. NMap probeert te achterhalen welk OS er op de host draait.
-sV = Service scan. NMap probeert te achterhalen welke services er op de cliënt draaien. Door het toevoegen van de “–version-intensity” flag aan dit commando kan de scan agressiever (trager en minder onopvallend) of lichter worden ingesteld. –version-intensity 5 is een agressieve scan en –version-intensity 0 is een banner grabbing scan.
-f = Fragmented Scan. Deze scan fragmenteert NMap pakketjes zodat deze minder makkelijk gedetecteerd worden. Dit wordt vaak gebruikt met een custom MTU welke opgegeven wordt met de “–mtu” switch.
-oA = Output All. Deze schakeloptie zal de resultaten van de scan opslaan in de 3 ondersteunende NMap formaten, namelijk een NMap Output File (-oN), XML file (-oX) en een Grep file (-oG).
NMap Commando’s
Zoals de NMap help ons laat weten is de commando opbouw als volgt:
nmap [Scan Type(s)] [Options] {target specification}
Een normale NMap scan op een subnet:
nmap 192.168.1.0/24
Scan een IPv6 host:
nmap -6 2607:f0d0:1002:51::4
Een normale NMap scan op een range IP adressen:
nmap 192.168.1.1-100
Voer een NMap scan uit tegen meerdere hosts vanuit een hostsfile:
nmap -iL mijn-hosts.txt
Exclude hosts van scannen:
nmap 192.168.1.1-100 --exclude 192.168.1.20-30
Scan een enkele poort:
nmap -p 21 192.168.1.100
Scan en toon alleen de open poorten:
nmap --open 192.168.1.100
Scan een range aan poorten:
nmap -p 1-100 192.168.1.100
Scan welke hosts in een netwerk up-and-running zijn:
nmap -sP 192.168.1.0/24
Toon de reden waarom een poort in een bepaalde status staat:
nmap --reason 192.168.1.100
Scan de 100 meest voorkomende poorten:
nmap -F 192.168.1.100
TCP scan:
nmap -sT 192.168.1.100
TCT SYN scan:
nmap -sS 192.168.1.100
TCT FIN scan:
nmap -sF 192.168.1.100
TCP Null Scan:
nmap -sN 192.168.1.100
TCP Xmas Scan (FIN, PSH, URG):
nmap -sX 192.168.1.100
Scan specifieke UDP poorten:
nmap -sU -p 123,161,162 192.168.1.100
Scan met het IP PING Protocol:
nmap -PO 192.168.1.100
Scan met het UDP PING Protocol:
nmap -PU 192.168.1.100
Scan of host beschermd is achter een firewall:
nmap -sA 192.168.1.100
Voer alle scanopdrachten uit zonder pre-controle of de host online is (ignore discovery). Bijvoorbeeld als de host zich achter een firewall bevindt:
nmap -Pn 192.168.1.100
Scan voor OS detectie:
nmap -A 192.168.1.100
Scan voor service detective:
nmap -sV 192.168.1.100
Scan voor UDP services:
nmap -sU 192.168.1.100
Scan voor service detectie agressief:
nmap -sV -version-intensity 5 192.168.1.100
Toon interfaces en routes van gescande hosts:
nmap --iflist 192.168.1.100
Output alle scanresultaten naar XML
nmap -oX outputfile.xml 192.168.1.100
Output alle scanresultaten naar XML, Grepp en NMap fileformaten:
nmap -oA outputfile 192.168.1.100
Je kunt een timing optie meegeven aan je NMap scans. Deze waarde gaat van 0 tot 5. Hoe hoger de waarde des te sneller de scan. Een snelle scan kan minder accurate resultaten opleveren maar is uiteraard sneller en minder opvallend. Een snelle scan uitvoeren doe je als volgt:
nmap -T 192.168.1.0/24
Met de -D flag kun je zogenaamde decoys instellen. Voor de host lijkt het net alsof alle decoys het apparaat scannen. De host zal dus meerdere poortscans vinden maar weet niet van welke host deze werkelijk afkomstig is.
nmap -n -D192.168.1.10, 172.16.1.44, 10.5.1.4, 192.168.1.144, 10.1.1.203
Als we het over spoofing hebben dan kunnen we ook het source MAC adres spoofen met de “–spoof-mac” flag. Om een ander source MAC adres op te geven gebruik je:
nmap --spoof-mac B7:B6:B5:B4:B3:B2:B1:B0 192.168.1.100
Om NMap een random MAC adres te laten verzinnen gebruik je “0” als MAC adres:
nmap --spoof-mac 0 192.168.1.100
Voorbeeld:
Als we dan een aantal commando’s combineren dan zou het volgende commando heel goed mogelijk zijn:
nmap --spoof-mac 0 -Pn -p 80 -oX outputfile.xml -oG outputfile.gnmap 192.168.1.0/24
Bovenstaande scan scant 254 IP adressen voor webservers (poort 80 = -p 80) in het 192.168.1.x subnet zonder deze te pingen (scan wordt uitgevoerd ongeacht of host online is = -Pn). Tijdens de scan spooft NMap het MAC adres in een willekeurig MAC adres (–spoof-mac 0) en de resultaten worden geoutput naar 2 bestanden, XML en GNMap (-oX outputfile.xml -oG outputfile.gnmap).
NMap Scripts
De kern van de Nmap Scripting Engine is een integreerbare Lua-interpreter. Lua is een lightweight language ontworpen voor uitbreidbaarheid. Het biedt een krachtige en goed gedocumenteerde API voor interfacing met andere software zoals Nmap.
Het tweede deel van de Nmap Scripting Engine is de NSE Library, die Lua en Nmap met elkaar verbindt. Deze laag regelt zaken als de initialisatie van de Lua-interpreter, parallelle scriptuitvoering, het ophalen van scripts, afhandelen van uitzonderingen en meer. Het bevat ook hulpprogramma-bibliotheken om scripts krachtiger en handiger te maken.
Bottomline is dat we NMap Scripts kunnen gebruiken om geavanceerde scans uit te voeren. De NMap Scripting Engine (NSE) is een zeer krachtige en flexibele oplossing waarmee gebruikers hun eigen scripts kunnen schrijven.
Scrips kunnen je o.a. helpen bij geavanceerde netwerk inpectie, betere OS detectie, detectie van vulnerabilities, detectie van backdoors en exploitation van vulnerabilities.
Er zijn honderden scripts verkrijgbaar. NMap zelf heeft al meer dan 400 ingebouwde scripts aan boord en op het internet zijn er nog veel meer te vinden. Let er echter wel op dat je nooit een script uitvoert van een onbetrouwbare bron. Deze scripts kunnen een ongewenste werking hebben en in het ergste geval je eigen machine of netwerk exploiten.
NMap scripts eindigen allemaal op de “*.nse” extensie. Het zoeken naar alle NSE scripts op onze machine doen we als volgt:
locate *.nse
Om te zoeken naar een specifiek script zoals b.v. een vulnerability script doen we als volgt:
locate *vuln*.nse
Om te zoeken vanuit NMap, en om meteen meer informatie over het script te lezen gebruiken we:
--script-help "*vuln*"
Ook kunnen we zoeken naar een specifiek script met specifieke keywords. Om dit te doen kun je het AND commando gebruiken:
--script-help "smtp-* and *vuln*"
Het scannen middels een script wordt normaliter tegelijkertijd uitgevoerd in combinatie met een poortscan. Dit omdat scripts normaal gesproken wel of niet gedraaid worden n.a.v. de status van een bepaalde poort. Het is echter wel mogelijk om zonder een poortscan een script te draaien. Om dat te doen gebruik je de schakeloptie “-sn”. Er wordt dan alleen hostdetectie toegepast. Als je hiervoor kiest kunnen alleen hostscripts uitgevoerd worden. Om een scriptscan uit te voeren zonder poortdetectie en hostdetectie gebruik je de schakelopties -Pn en -sn samen met -sC (of -script). In dit geval zal NMap elke host scannen met het script zonder deze te controleren. Ook zijn in dit geval alleen de hostscripts beschikbaar. Je zou deze techniek kunnen gebruiken bij scripts zoals het whois-ip script, die alleen het adres van het externe systeem gebruikt en dus niet vereist dat het systeem up is.
Een script wordt normaliter uitgevoerd met de volgende syntax:
nmap --script
Het uitvoeren van een script ziet er dus als volgt uit:
nmap --script smtp-open-relay 192.168.1.100
Er zijn 4 NSE hoofdcategorieën, namelijk:
- Prerule Scripts – Deze scripts worden gedraaid voor de overige NMap scans gedraaid worden, dus nog voor NMap informatie heeft gevonden over betreffende hosts.
- Host Scripts – Deze scripts worden uitgevoerd nadat de normale NMap scans gedraaid zijn op een specifieke host zoals poortscans en hostscans.
- Service Scripts – Deze scripts worden gedraaid tegen een specifieke service (het hiervoor gebruikte SMTP script is dus een service script).
- Postrule Scripts – Deze scripts worden uitgevoerd nadat NMap alle scans op alle hosts heeft uitgevoerd.
Vervolgens worden scripts onderverdeeld in diverse categorieën zoals:
- Authentication Scripts – auth
- Host Discovery Scripts – broadcast
- Brute-Force Scripts – brute
- Network Discovery Scripts – discovery
- DOS Scripts – dos
- Exploitation Scripts – exploit
- Vulnerability Scripts – vuln
Er zijn echter nog meerdere categorieen.
Hiervoor hebben we een script gedraait zonder aanvullende argumenten. Sommige scripts vereisen echter additionele argumenten. Deze kunnen we toevoegen met de “–script-args” en “–script-args-file” flags. Dit zou er als volgt uit kunnen zien:
nmap --script mysql-audit --script-args "mysql-audit.username='root', mysql-audit.password='wachtwoordje1', mysql-audit.filename='nselib/data/mysql-cis.audit'"
Om dit script te laten draaien tegen een specifieke poort gebruik je de “-p” flag:
nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', mysql-audit.password='wachtwoordje1', mysql-audit.filename='nselib/data/mysql-cis.audit'"
Om alle scripts uit een specifieke categorie te gebruiken we de “–script” flag in combinatie met de categorienaam:
nmap --script broadcast 192.168.1.100
We kunnen de “–script” flag ook gebruiken om bijvoorbeeld alle SMTP scripts te draaien tegen een specifieke host:
nmap --script “smtp-*” 192.168.1.100
Je kunt ook meerdere scripts opgeven middels een komma of door middel van een Boolean expressie:
nmap --script "smtp-*", "*ssh-*” 192.168.1.100
nmap --script "smtp-*" and "*ssh-*” 192.168.1.100
Met de Boolean expressies kun je ook scripts uitsluiten:
nmap --script "not *ssh-*” 192.168.1.100
Om alle scripts uit de discovery categorie te gebruiken met uitzondering van de SSH scripts zou je het volgende kunnen doen:
nmap --script "(discovery) and not ssh-*” 192.168.1.100
Een paar voorbeeldjes
Voer een traceroute uit en geef bij iedere hop de geolocatie:
nmap --traceroute --script traceroute-geolocation.nse -p 80 jarnobaselier.nl
Complete informatie van een IP adres:
nmap --script=asn-query,whois,ip-geolocation-maxmind jarnobaselier.nl
Ontdek webtoepassingen. Dit script is een van de agressievere testen en brute-forces een webserverpad af om te ontdekken welke webtoepassingen er gebruikt worden gebruikt.
nmap --script http-enum 192.168.1.100
Local SMB brute-forcing:
nmap -sV -p 445 --script smb-brute 192.168.1.100
Detecteer Heartbleed SSL vulnerability op heel subnet:
nmap -sV -p 443 --script=ssl-heartbleed 192.168.1.0/24
Conclusie
Zoals je ziet is NMap een uiterst flexibele, krachtige tool welke uitermate geschikt is om een OS te fingerprinten maar welke ook ingezet kan worden om krachtigere scans uit te voeren. NMap is een van de weinige tools die niet maf ontbreken in de gereedschapskist van elke ICTer, security researcher en hacker…uiteraard!
Like this content?
If you found this article interesting or useful, consider supporting my work by buying me a coffee. It helps me continue creating valuable security content!
Buy me a coffee
