Nmap NSE: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „=Grundsätzliches= Die Nmap Scripting Engine (NSE) erweitert nmap weit über das reine Port-Scanning hinaus. Die Skripte sind in Lua geschrieben und in Kategor…“) |
|||
| Zeile 83: | Zeile 83: | ||
=HTTP-Scripts= | =HTTP-Scripts= | ||
| − | Die vulnsite 10.88.215. | + | Die vulnsite 10.88.215.11 hört auf Port 80 |
;Titel der Seite anzeigen | ;Titel der Seite anzeigen | ||
| − | *nmap 10.88.215. | + | *nmap 10.88.215.11 -p 80 -sV --script http-title |
;Verzeichnisse und Dateien finden | ;Verzeichnisse und Dateien finden | ||
| − | *nmap 10.88.215. | + | *nmap 10.88.215.11 -p 80 --script http-enum |
;Banner abgreifen | ;Banner abgreifen | ||
| − | *nmap 10.88.215. | + | *nmap 10.88.215.11 -p 80 -sV --script banner |
=SMB-Scripts= | =SMB-Scripts= | ||
Aktuelle Version vom 22. Juni 2026, 11:04 Uhr
Grundsätzliches
Die Nmap Scripting Engine (NSE) erweitert nmap weit über das reine Port-Scanning hinaus. Die Skripte sind in Lua geschrieben und in Kategorien organisiert. Gescannt wird von der kali-innen (10.0.10.101) gegen das Opfernetz 10.88.215.0/24.
NSE-Kategorien
- auth
- Ermittelt Authentifizierungsdaten für Dienste
- broadcast
- Findet Hosts per Broadcast und fügt sie dem Scan hinzu
- brute
- Brute-Force-Angriffe auf Dienste
- default
- Standardskripte, ausgeführt bei -sC
- discovery
- Enumeriert erreichbare Dienste
- dos
- Prüft auf Denial-of-Service-Schwachstellen - mit Vorsicht verwenden
- exploit
- Versucht bekannte Schwachstellen auszunutzen
- intrusive
- Kann das Zielsystem beeinträchtigen
- safe
- Nicht-invasive Informationsgewinnung
- version
- Erweitert die Service-Versionserkennung
- vuln
- Identifiziert bekannte Schwachstellen am Ziel
Scripts finden
Alle mitgelieferten Skripte liegen in einem Verzeichnis
- ls /usr/share/nmap/scripts
Nach einem Stichwort suchen
- ls /usr/share/nmap/scripts | grep ssh
Script-Hilfe
Zeigt Beschreibung, Aufruf und Argumente eines Skripts
- nmap --script-help=ssh-hostkey
Aufruf-Arten
- Alle Standardskripte ausführen
- nmap 10.88.215.61 -sC
- Alle Skripte einer Kategorie
- nmap 10.88.215.61 --script vuln
- Bestimmte Skripte namentlich
- nmap 10.88.215.61 --script ssh-hostkey,ssh-auth-methods
Standardskripte (-sC)
Führt die default-Skripte gegen offene Ports aus
- nmap 10.88.215.61 -sC
PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 2048 3a:94:d8:3f:e0:a2:7a:b8:c3:94:d7:5e:00:55:0c:a7 (RSA) 80/tcp open http |_http-title: Apache2 Debian Default Page 445/tcp open microsoft-ds | smb-security-mode: |_ message_signing: disabled (dangerous, but default)
SSH-Scripts
- Fingerprint der Hostkeys
- nmap 10.88.215.61 -p 22 --script ssh-hostkey
- Welche Authentifizierungsmethoden werden unterstützt
- nmap 10.88.215.61 -p 22 --script ssh-auth-methods
- Welche Algorithmen werden angeboten
- nmap 10.88.215.61 -p 22 --script ssh2-enum-algos
SSL-Scripts
Der Mailserver 10.88.215.34 bietet TLS auf Port 993 (imaps)
- Welches Zertifikat wird angeboten
- nmap 10.88.215.34 -p 993 --script ssl-cert
- Welche Cipher-Suites werden angeboten
- nmap 10.88.215.34 -p 993 -sV --script ssl-enum-ciphers
SMTP-Scripts
Der Mailserver 10.88.215.34 hört auf Port 25
- Welche Kommandos werden unterstützt
- nmap 10.88.215.34 -p 25 --script smtp-commands
- Ist der Server ein offenes Relay
- nmap 10.88.215.34 -p 25 --script smtp-open-relay
- Benutzer auf dem Mailsystem herausfinden
- nmap 10.88.215.34 -p 25 --script smtp-enum-users
HTTP-Scripts
Die vulnsite 10.88.215.11 hört auf Port 80
- Titel der Seite anzeigen
- nmap 10.88.215.11 -p 80 -sV --script http-title
- Verzeichnisse und Dateien finden
- nmap 10.88.215.11 -p 80 --script http-enum
- Banner abgreifen
- nmap 10.88.215.11 -p 80 -sV --script banner
SMB-Scripts
- Betriebssystem über SMB ermitteln
- nmap 10.88.215.61 -p 445 --script smb-os-discovery
- Freigaben auflisten
- nmap 10.88.215.61 -p 445 --script smb-enum-shares
Script-Datenbank aktualisieren
Nach dem Hinzufügen eigener Skripte muss die Datenbank neu aufgebaut werden
- nmap --script-updatedb
Eigene Scripts schreiben
Die NSE-Engine sucht in einem Skript nach festen Funktionen. Die wichtigsten sind die Trigger-Funktionen und die Action.
- portrule(host, port)
- Bestimmt, ob das Skript auf einen Port angewendet wird
- hostrule(host)
- Bestimmt, ob das Skript auf einen Host angewendet wird
- action(host, port)
- Enthält die eigentliche Logik und wird ausgeführt, wenn eine Trigger-Funktion true liefert
Hello World
Ein minimales Skript, das immer eine Nachricht ausgibt
- vi helloworld.nse
description = [[
Simple Hello World Script.
]]
author = "Thomas Will"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"safe"}
function hostrule()
return true
end
function action(host, port)
return("Hello World")
end
- Aufruf
- nmap -sn --script ./helloworld.nse 10.88.215.61
Host script results: |_helloworld: Hello World
Echt Koelnisch Wasser
Prüft, ob Port 4711 offen ist
- vi echtkoelnisch.nse
description = [[
Prüft, ob Port 4711 offen ist, und gibt eine Nachricht aus.
]]
author = "Thomas"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"default", "discovery"}
portrule = function(host, port)
return port.number == 4711 and port.protocol == "tcp"
end
action = function(host, port)
if port.state == "open" then
return "Port 4711 offen. Dies riecht nach Echt Koelnisch Wasser!"
end
end
- Aufruf
- nmap --script ./echtkoelnisch.nse -p 4711 10.0.10.104
PORT STATE SERVICE 4711/tcp open trinity-dist |_echtkoelnisch: Port 4711 offen. Dies riecht nach Echt Koelnisch Wasser!
Checkmk Agent unverschlüsselt
Prüft, ob ein unverschlüsselter Checkmk-Agent auf Port 6556 antwortet
- vi checkmk-plain.nse
description = [[
Checks if an unencrypted Checkmk Agent is responding on port 6556.
If the header <<<check_mk>>> is found, it is considered a potential information disclosure vulnerability.
]]
author = "Thomas"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"default", "discovery", "vuln"}
portrule = function(host, port)
return port.number == 6556 and port.protocol == "tcp"
end
action = function(host, port)
local socket = nmap.new_socket()
socket:set_timeout(3000)
local status, err = socket:connect(host.ip, port.number)
if not status then
return "Connection failed: " .. err
end
local data
status, data = socket:receive_lines(1)
socket:close()
if status and data and data:find("<<<check_mk>>>") then
return "Unencrypted Checkmk Agent detected - potential information disclosure!"
end
end
- Aufruf
- nmap -sV --script ./checkmk-plain.nse -p 6556 10.0.10.104
PORT STATE SERVICE VERSION 6556/tcp open check_mk check_mk extension for Nagios 2.0.0p38 |_checkmk-plain: Unencrypted Checkmk Agent detected - potential information disclosure!