Nmap Fortgeschritten: NSE Skripte fur internes Recon im simulierten Firmenlab
Wie sich NSE wirklich nutzen lasst, fur autorisierte Enumeration in simulierten internen Netzen, mit Skriptbeispielen, Output-Parsing und Pentest-Pipeline-Integration.

Nmap ist nicht tot, und wer das glaubt, hat nie /usr/share/nmap/scripts geoffnet. Die Nmap Scripting Engine (NSE) liefert mehr als 600 Lua-Skripte, vom Fingerprint alter Dienste bis zur Active-Directory-Enumeration uber unauthentifiziertes LDAP. In einem simulierten Firmenlab, etwa mit GOAD oder Ludus aufgebaut, ersetzt NSE Dutzende Einzelwerkzeuge und liefert strukturiertes XML, wodurch die gesamte Toolchain reproduzierbar wird. Dieser Beitrag zeigt einen belastbaren, dreistufigen Recon-Ablauf: breiter Portscan, dienstspezifische Enumeration und gezielte Validierung. Vor jedem exotischen Flag steht jedoch der nicht verhandelbare Punkt: schriftlicher Scope. Ohne formale Genehmigung ist Scannen so falsch wie fremde Briefkasten zu offnen und in vielen Rechtsordnungen strafbar. Wir gehen hier durchgehend von einem eigenen, isolierten, dokumentierten Lab aus.
Warum NSE statt zehn Einzeltools
Der eigentliche Wert von NSE liegt in der Konsolidierung. Statt enum4linux, smbmap, ldapsearch und ein Dutzend Python-Snippets nacheinander laufen zu lassen, orchestriert eine einzige Engine die Sonden und normalisiert das Ergebnis. Skripte tragen Kategorien wie safe, discovery, intrusive, vuln und brute, sodass du das Risiko granular steuerst. --script safe fasst nur nicht-invasive Prufungen zusammen, --script vuln zieht bekannte Schwachstellenchecks hinzu. Diese Trennung ist kein Detail: in einer produktionsnahen Umgebung entscheidet die Kategorie daruber, ob dein Scan ein Dienst zum Absturz bringt. Lies vor dem Einsatz nmap --script-help <name>, denn die Doku nennt Kategorie, Argumente und Nebenwirkungen jedes Skripts explizit.
Das Lab: GOAD, Ludus und Netztrennung
Ein serioses Recon-Lab braucht eine realistische Topologie. GOAD (Game of Active Directory) stellt eine verwundbare Multi-Domain-AD-Umgebung bereit, Ludus automatisiert das Ausrollen ganzer Angriffs-Ranges auf Proxmox. Beide laufen in einem abgeschotteten VLAN ohne Route ins Produktivnetz. Wichtig ist ein separates Management-Interface fur deine Kali- oder Parrot-VM und ein dediziertes Ziel-Subnetz wie 10.10.0.0/24. Wer noch kein Lab hat, findet in Web-Pentest von Null: Ein Sicheres Lab mit DVWA, Juice Shop und Burp Suite Bauen ein kompaktes, reproduzierbares Setup, das sich als Ausgangspunkt eignet und die spateren Recon-Ubungen nicht ins offene Netz leckt. Snapshotte jede VM vor der ersten Sonde, damit du nach einem destruktiven Skript in Sekunden zuruckrollst, und dokumentiere die IP-Zuordnung in einer Inventar-Datei, die du spater gegen die Scan-Ergebnisse abgleichst.
Stufe eins: sauberer Port-Sweep
Beginn mit sauber gemachten Basics. Ein Initial-Sweep mit nmap -sS -p- --min-rate 5000 -oA full_tcp 10.10.0.0/24 liefert in Minuten ein vollstandiges TCP-Inventar uber ein /24 mit niedriger Latenz. Der SYN-Scan (-sS) ist schneller und leiser als ein Full-Connect, -p- deckt alle 65535 Ports ab, --min-rate setzt einen Boden fur die Paketrate. Ein fokussierter zweiter Lauf, nmap -sV -sC -p$(cat ports.txt) -oA versioned -iL hosts.txt, fahrt die Default-Skripte (Kategorien safe und discovery) gegen die tatsachlich offenen Ports. Dieser zweistufige Fluss vermeidet die klassische Sunde, -A gleich auf ein ganzes /16 zu werfen, was Sonden flutet, das SIEM uberlastet und am Ende keine belastbaren Daten liefert. UDP nicht vergessen: nmap -sU --top-ports 50 findet SNMP, NetBIOS und IKE, die im TCP-Scan unsichtbar bleiben.
Stufe zwei: SMB-Enumeration
NSE glanzt vor allem bei dienstspezifischer Enumeration. Fur SMB rekonstruieren Skripte wie smb-os-discovery, smb2-security-mode, smb-enum-shares, smb-enum-users und smb-vuln-ms17-010 die Windows-Topologie haufig ohne gultige Credentials. Ein typischer Aufruf lautet nmap -p445 --script 'smb-os-discovery,smb2-security-mode,smb-enum-shares' 10.10.0.0/24. smb2-security-mode verrat, ob Signing erzwungen wird, ein direkter Indikator fur die Machbarkeit von SMB-Relay. smb-enum-shares listet Freigaben samt Zugriffsrechten, oft mit anonym lesbaren Verzeichnissen voller Skripte und Backups. Achte auf guest-Zugriff und auf Shares wie SYSVOL, die in einer Domane Group-Policy-Preferences mit reversibel verschlusselten Passwortern enthalten konnen.
Stufe zwei: LDAP und Active Directory
Bei LDAP zeigt ldap-search mit dem Filter (objectClass=user) Service Accounts, Beschreibungen mit eingepasten Passwortern (verbreiteter, als zugegeben wird) und schwache Passwortrichtlinien. Der Aufruf nmap -p389 --script ldap-search --script-args 'ldap.base="dc=corp,dc=lab"' 10.10.0.10 zieht ohne Bind bereits erstaunlich viel. Skripte wie ldap-rootdse liefern Namenskontexte und Funktionslevel. In einer GOAD-AD-Umgebung futtert dieses Recon direkt den Angriff aus Active Directory Pentest: Kerberoasting Schritt fuer Schritt im GOAD Lab, denn Kerberoasting hangt von SPNs ab, die schon in der Recon-Phase identifiziert werden. Erganze krb5-enum-users, um gultige Kontonamen uber Kerberos-Preauth-Antworten zu bestatigen, ohne einen Login-Fehler zu erzeugen.
Web-Enumeration und HTTP-Skripte
Fur Webflotten kombinierst du http-title, http-enum, http-headers und http-methods, um in Sekunden ganze Anwendungslandschaften zu kartieren. http-enum tastet bekannte Pfade ab (Admin-Panels, .git, Backup-Dateien), http-methods --script-args http-methods.test-all deckt gefahrliche Verben wie PUT auf. Ein Aufruf wie nmap -p80,443,8080,8443 --script 'http-title,http-headers,http-enum' -iL web_hosts.txt genugt fur den ersten Uberblick. Fur exponierte Java-Stacks sind offene Spring-Boot-Actuator-Endpunkte und unsichere Jenkins-Konfigurationen die dankbarsten Funde, weil sie oft direkt zu Remote Code Execution fuhren.
Vuln-Skripte und credentialed Scans
Sobald du gultige Credentials aus einem Foothold hast, wird NSE deutlich machtiger. --script-args smbusername=svc_backup,smbpassword=... offnet smb-enum-shares und smb-enum-sessions fur die authentifizierte Sicht, die anonym verborgen bleibt. Die vuln-Kategorie fasst Checks wie smb-vuln-ms17-010, http-vuln-cve2017-5638 (Struts) und ssl-heartbleed zusammen; kombiniert mit --script-args vulns.showall siehst du auch nicht ausgeloste Prufungen. Wichtig: vuln-Skripte bestatigen Vorhandensein, nicht Ausnutzbarkeit. Ein positiver ms17-010-Treffer im Lab ist der Startpunkt fur eine kontrollierte Exploitation, nie fur blindes Feuern gegen unbekannte Hosts. Dokumentiere jeden Treffer mit Skriptname, Argumenten und Zeitstempel, damit der Bericht spater reproduzierbar bleibt.
Parsbarer Output und Pipeline
Nutzlicher Output ist parsbarer Output. Verwende immer -oA basename, das .nmap, .gnmap und .xml gleichzeitig erzeugt. Das XML futtert nmap-parse-output, dnmap oder ein eigenes Python-Skript mit python-libnmap. In grosseren Teams verwandelt die Ingestion in Elasticsearch und die Korrelation mit Sigma-Regeln offensives Recon in Input fur das Blue Team und schliesst den Kreis aus Purple Team in der Praxis: Aufbau eines Red-Blue-Feedback-Zyklus. Rohausgabe in einen LLM-Prompt zu kippen, um Zusammenfassungen zu erhalten, ist riskant: neben dem Leak-Risiko verlierst du Felder wie reason_ttl, die fur das Erkennen eines Inline-IPS Gold wert sind.
Eigene NSE-Skripte in Lua
Eigene Skripte sind der echte Hebel. NSE in Lua zu schreiben ist einfacher als befurchtet: eine Datei in ~/.nmap/scripts/ mit den drei Pflichtteilen description, categories und portrule sowie einer action-Funktion reicht. Ein Minimalskript definiert portrule = shortport.port_or_service(8080, "http-proxy") und ruft in action die http-Bibliothek auf, um einen internen CVE-Check zu bauen. Nach dem Ablegen aktualisierst du die Datenbank mit nmap --script-updatedb. Im autorisierten Red Team lohnt es, Checks fur interne, nicht offentliche CVEs zu schreiben. Fur die Pivot-Phase schliesst Pivoting mit Chisel und Ligolo-ng: Segmentierte Netze im Pentest-Lab nahtlos an und setzt abgeschlossenes Recon voraus.
Timing, Firewalls und Detection
Vorsicht bei Timing und stateful Firewalls. -T4 zerlegt viele alte IDS, lost aber in modernem XDR leicht Alarme aus. Fur ein realistisches Lab justiere --max-retries 2, --host-timeout 30m und --scan-delay 100ms gegen ein Suricata-NIDS. Mit --source-port 53 oder --data-length 24 testest du laxe Regeln, die dem Quellport vertrauen, ein leider noch verbreitetes Muster. Aus Blue-Team-Sicht gilt: ein SYN-Scan uber alle Ports erzeugt eine markante Signatur aus vielen halb offenen Verbindungen; Zeek und Suricata erkennen das zuverlassig. Wer defensiv arbeitet, baut genau darauf Detektionsregeln und misst die eigene Erkennungsrate gegen die hier gezeigten Scans.
Haufige Fehler und Checkliste
Die haufigsten Fehler: -A auf zu grosse Bereiche werfen, UDP komplett ignorieren, XML nicht speichern und Versionsschatzungen als Fakten behandeln. Checkliste vor jedem Lauf: (1) schriftliche Genehmigung und Scope liegen vor; (2) Ziel-Subnetz ist isoliert; (3) Stufe eins nur -sS -p- mit -oA; (4) Stufe zwei -sV --script "safe,discovery" nur gegen offene Ports; (5) Stufe drei dienstspezifische NSE, dokumentiert je Skript; (6) UDP-Top-Ports gepruft; (7) alle Ausgaben archiviert, auch fehlgeschlagene Scans, denn sie deuten oft auf interessante ACLs hin, die spater manuelle Pruefung verdienen; (8) jede Abweichung vom Plan im Protokoll begruendet.
FAQ
Ist -sV gegen Produktion sicher? Meist ja, aber alte SCADA- und Drucker-Stacks reagieren empfindlich auf Versions-Sonden. Reduziere mit --version-intensity 2 und schliesse fragile Hosts aus. Kann NSE ein Ziel zum Absturz bringen? Ja, vor allem Skripte der Kategorien intrusive und dos. Bleibe bei safe und discovery, solange kein ausdrucklicher Auftrag anderes deckt, und teste jedes neue Skript zuerst im Lab.
Warum sind meine Ergebnisse zwischen zwei Laufen unterschiedlich? Paketverlust, Rate-Limiting und stateful Firewalls fuhren zu nicht-deterministischen Resultaten. Erhohe --max-retries auf verlustbehafteten Strecken, senke --min-rate, und vergleiche immer den .gnmap beider Laufe mit ndiff. Brauche ich Root fur alles? SYN-Scan (-sS), OS-Detection (-O) und Raw-Packet-Optionen verlangen CAP_NET_RAW, praktisch also root. Ein -sT-Connect-Scan lauft ohne Privilegien, ist aber lauter und langsamer, weil er den vollen TCP-Handshake abschliesst. Fur credentialed NSE brauchst du keine lokalen Rechte, sondern gultige Dienst-Credentials im Zielprotokoll.
Am Ende ersetzt NSE kein Denken. Nmap findet Ports und ratet Versionen; Befunde korrelieren, Exploit-Pfade priorisieren und Scope-Grenzen respektieren bleibt Menschenarbeit. Praktischer Takeaway: baue eine dreischichtige Pipeline, breiter Sweep mit -sS -p-, Enumeration mit -sV --script "safe,discovery" und Validierung uber dienstspezifische NSE, immer mit XML-Export fur spateres Parsing. In zwei Stunden kartierst du ein Firmen-/24 besser als manch teurer automatischer Scanner. Behandle deine Skript-Argumente und Ziel-Listen wie Code: versioniere sie, kommentiere jede Ausnahme und lege pro Engagement ein reproduzierbares Runbook ab, damit ein zweiter Analyst denselben Lauf ohne Ratespiele wiederholen kann. Verwechsle Reichweite nie mit Tiefe: ein sauber enumeriertes /24 ist wertvoller als ein oberflachlich uberflogenes /16. Und denk daran: ohne schriftliche Genehmigung ist nichts davon ein Pentest, sondern eine Straftat.


