Nmap ausführlich
Netzwerk-Enumeration mit Nmap
Nmap ist das Standardwerkzeug für Host-Discovery, Port-Scanning, Service-Enumeration und Schwachstellenanalyse im Rahmen von Penetrationstests und Netzwerkaudits. Scanergebnisse sollten grundsätzlich gespeichert werden – unterschiedliche Methoden liefern unterschiedliche Ergebnisse, und gespeicherte Ausgaben ermöglichen spätere Vergleiche und Dokumentation.
Host Discovery
Netzwerkbereich scannen
Nur aktive Hosts ausgeben, ohne Portscan:
- nmap 192.168.100.0/24 -sn -oA tnet | grep for | cut -d" " -f5
Ausgabe:
192.168.100.1 192.168.100.59 192.168.100.94
| Option | Beschreibung |
|---|---|
192.168.100.59/24 |
Ziel-Netzwerkbereich |
-sn |
Deaktiviert Portscan, nur Host-Discovery |
-oA tnet |
Speichert Ergebnisse in allen Formaten mit Präfix "tnet" |
Hinweis: Diese Methode funktioniert nur wenn die Firewalls der Hosts ICMP-Echo-Requests erlauben.
Aus einer IP-Liste scannen
Inhalt einer typischen hosts.lst:
cat hosts.lst 192.168.100.1 192.168.100.59 192.168.100.94
Scan aus der Liste:
- nmap -sn -oA tnet -iL hosts.lst | grep for | cut -d" " -f5
Ausgabe:
192.168.100.1 192.168.100.59 192.168.100.94
| Option | Beschreibung |
|---|---|
-sn |
Deaktiviert Portscan |
-oA tnet |
Speichert Ergebnisse mit Präfix "tnet" |
-iL |
Liest Ziel-IPs aus der angegebenen Datei |
Wenn einer der Hosts nicht geantwortet hätte, wäre dies ein Hinweis darauf dass seine Firewall ICMP-Echo-Requests verwirft.
Mehrere IPs scannen
Einzelne IPs direkt angeben:
- nmap -sn -oA tnet 192.168.100.1 192.168.100.59 192.168.100.94 | grep for | cut -d" " -f5
Zusammenhängender Bereich als Kurzschreibweise:
- nmap -sn -oA tnet 192.168.100.0-200 | grep for | cut -d" " -f5
Ausgabe:
192.168.100.1 192.168.100.19 192.168.100.59 192.168.100.94
Der Bereichs-Scan kann zusätzliche Hosts entdecken die nicht in der ursprünglichen Liste standen, wie hier 192.168.100.19.
Einzelnen Host scannen
- nmap 192.168.100.59 -sn -oA host
Ausgabe:
Starting Nmap 7.98 at 2026-04-02 23:31 -0400 Nmap scan report for 192.168.100.59 Host is up (0.00051s latency). MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.66 seconds
| Option | Beschreibung |
|---|---|
192.168.100.59 |
Einzelne Ziel-IP |
-sn |
Deaktiviert Portscan |
-oA host |
Speichert Ergebnisse mit Präfix "host" |
Im lokalen Netz sendet Nmap zuerst einen ARP-Ping bevor ICMP-Traffic gesendet wird. Die ARP-Antwort reicht aus um den Host als aktiv zu bestätigen.
Paketverhalten beobachten
- nmap 192.168.100.59 -sn -oA host -PE --packet-trace
Ausgabe:
Starting Nmap 7.98 at 2026-04-02 23:32 -0400 SENT (0.0359s) ARP who-has 192.168.100.59 tell 192.168.100.94 RCVD (0.0365s) ARP reply 192.168.100.59 is-at 08:00:27:00:14:D9 Host is up (0.00062s latency). MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.66 seconds
| Option | Beschreibung |
|---|---|
-PE |
Weist Nmap an ICMP-Echo-Requests zu verwenden |
--packet-trace |
Zeigt alle gesendeten und empfangenen Pakete |
Die Ausgabe zeigt dass Nmap einen ARP-Request statt ICMP gesendet hat – die ARP-Antwort bestätigte den Host als aktiv.
Grund für Host-Status anzeigen
- nmap 10.129.2.18 -sn -oA host -PE --reason
Ausgabe:
Starting Nmap 7.98 at 2026-04-02 23:33 -0400 SENT (0.0074s) ARP who-has 10.129.2.18 tell 10.10.14.2 RCVD (0.0309s) ARP reply 10.129.2.18 is-at 08:00:27:00:14:D9 Nmap scan report for 10.129.2.18 Host is up, received arp-response (0.028s latency). MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
| Option | Beschreibung |
|---|---|
10.129.2.18 |
Ziel-IP-Adresse |
-sn |
Nur Host-Discovery |
-oA host |
Speichert Ausgabe mit Präfix "host" |
-PE |
Fordert ICMP-Echo-Probes an |
--reason |
Zeigt warum Nmap den Host als aktiv oder inaktiv einstuft |
Hinweis: Im lokalen Netz bevorzugt Nmap ARP für Host-Discovery. Für externe Ziele wird ARP nicht verwendet – dort kommen ICMP oder andere Probe-Techniken zum Einsatz.
ICMP erzwingen, ARP deaktivieren
- nmap 10.129.2.18 -sn -PE --disable-arp-ping
Mit Packet-Trace:
- nmap 10.129.2.18 -sn -oA host -PE --packet-trace --disable-arp-ping
Ausgabe:
Starting Nmap 7.98 at 2026-04-02 23:34 -0400 SENT (0.0107s) ICMP [10.10.14.2 > 10.129.2.18 Echo request (type=8/code=0) id=13607 seq=0] RCVD (0.0152s) ICMP [10.129.2.18 > 10.10.14.2 Echo reply (type=0/code=0) id=13607 seq=0] Nmap scan report for 10.129.2.18 Host is up (0.086s latency). MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
| Option | Beschreibung |
|---|---|
-PE |
Sendet ICMP-Echo-Requests |
--packet-trace |
Zeigt alle gesendeten und empfangenen Pakete |
--disable-arp-ping |
Deaktiviert ARP um ICMP zu erzwingen |
Da ARP deaktiviert ist nutzt Nmap ICMP für die Host-Discovery. Der TTL-Wert in der Antwort (128) kann einen groben Hinweis auf das Betriebssystem geben – viele Windows-Systeme verwenden standardmäßig TTL 128, was jedoch kein verlässliches Indiz ist.
Host- und Port-Scanning
Port-Zustände
Nmap klassifiziert jeden gescannten Port in einen von sechs möglichen Zuständen:
| Zustand | Beschreibung |
|---|---|
open |
Verbindung erfolgreich hergestellt – gilt für TCP, UDP und SCTP |
closed |
Host erreichbar, aber kein Dienst aktiv – Antwort mit RST-Flag |
filtered |
Zustand nicht bestimmbar – keine Antwort oder Fehlercode – Firewall wahrscheinlich |
unfiltered |
Port erreichbar, Zustand unklar – nur bei TCP-ACK-Scan |
| filtered | Keine Antwort – Firewall oder Paketfilter vermutet |
| filtered | Nur bei IP-ID-Idle-Scans – Zustand nicht bestimmbar |
Top 10 TCP-Ports scannen
- nmap 192.168.100.59 --top-ports=10
Ausgabe:
Starting Nmap 7.98 at 2026-04-01 13:27 -0400 Nmap scan report for 192.168.100.59 Host is up (0.00080s latency). PORT STATE SERVICE 21/tcp closed ftp 22/tcp open ssh 23/tcp closed telnet 25/tcp closed smtp 80/tcp open http 110/tcp closed pop3 139/tcp open netbios-ssn 443/tcp open https 445/tcp open microsoft-ds 3389/tcp closed ms-wbt-server MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.80 seconds
| Option | Beschreibung |
|---|---|
192.168.100.59 |
Ziel-IP |
--top-ports=10 |
Scannt die 10 häufigsten TCP-Ports laut Nmap-Datenbank |
Ports 22, 80, 139, 443 und 445 sind offen. Ports 21, 23, 25, 110 und 3389 sind geschlossen – der Host hat mit RST geantwortet.
Geschlossenen Port mit Packet-Trace analysieren
- nmap 192.168.100.59 -p 21 --packet-trace -Pn -n --disable-arp-ping
Ausgabe:
Starting Nmap 7.98 at 2026-04-01 13:28 -0400 SENT (0.0980s) TCP 192.168.100.94:44093 > 192.168.100.59:21 S ttl=39 id=22759 iplen=44 seq=520204497 win=1024 <mss 1460> RCVD (0.0991s) TCP 192.168.100.59:21 > 192.168.100.94:44093 RA ttl=64 id=0 iplen=40 seq=0 win=0 PORT STATE SERVICE 21/tcp closed ftp Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds
| Option | Beschreibung |
|---|---|
-p 21 |
Nur Port 21 scannen |
--packet-trace |
Zeigt alle gesendeten und empfangenen Pakete |
-Pn |
Deaktiviert ICMP-Echo-Requests |
-n |
Deaktiviert DNS-Auflösung |
--disable-arp-ping |
Deaktiviert ARP-Ping |
Die SENT-Zeile zeigt dass Nmap ein TCP-Paket mit SYN-Flag (S) gesendet hat. Die RCVD-Zeile zeigt die Antwort mit RA-Flags (RST+ACK) – der Port ist definitiv geschlossen.
Request-Analyse:
| Feld | Bedeutung |
|---|---|
SENT (0.0980s) |
Paket wurde 0.0980 Sekunden nach Scan-Start gesendet |
TCP |
Verwendetes Protokoll |
192.168.100.94:44093 > |
Quell-IP und Quell-Port (Scanner) |
192.168.100.59:21 |
Ziel-IP und Ziel-Port |
S |
SYN-Flag im TCP-Header gesetzt |
ttl=39 id=22759 iplen=44... |
Weitere TCP- und IP-Header-Werte |
Response-Analyse:
| Feld | Bedeutung |
|---|---|
RCVD (0.0991s) |
Paket wurde 0.0991 Sekunden nach Scan-Start empfangen |
TCP |
Verwendetes Protokoll in der Antwort |
192.168.100.59:21 > |
Quell-IP und Quell-Port (Ziel antwortet) |
192.168.100.94:44093 |
Ziel-IP und Ziel-Port (zurück zum Scanner) |
RA |
RST und ACK Flags gesetzt – Port ist geschlossen |
ttl=64 id=0 iplen=40... |
TCP- und IP-Header-Werte der Antwort |
Connect-Scan (-sT)
Der TCP-Connect-Scan führt einen vollständigen Drei-Wege-Handshake durch:
- nmap 192.168.100.59 -p 443 --packet-trace --disable-arp-ping -Pn -n --reason -sT
Ausgabe:
Starting Nmap 7.98 at 2026-04-01 13:34 -0400 CONN (0.0867s) TCP localhost > 192.168.100.59:443 => Operation now in progress CONN (0.0873s) TCP localhost > 192.168.100.59:443 => Connected Nmap scan report for 192.168.100.59 Host is up, received user-set (0.00054s latency). PORT STATE SERVICE REASON 443/tcp open https syn-ack Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
Die CONN-Zeilen zeigen den vollständigen Verbindungsaufbau. Der Reason "syn-ack" bestätigt dass Port 443 offen ist.
Der SYN-Scan (-sS) ist unauffälliger da er den Handshake nie abschließt – nach Erhalt des SYN-ACK sendet er RST statt ACK. Die Verbindung bleibt halb-offen und erzeugt weniger Logs.
Gefilterte Ports
Wenn eine Firewall Pakete stillschweigend verwirft:
- nmap 192.168.100.59 -p 139 --packet-trace -n --disable-arp-ping -Pn
Ausgabe:
Starting Nmap 7.98 at 2026-04-01 13:36 -0400 SENT (0.0381s) TCP 192.168.100.94:33892 > 192.168.100.59:139 S ttl=41 iplen=44 SENT (1.4411s) TCP 192.168.100.94:33892 > 192.168.100.59:139 S ttl=41 iplen=44 PORT STATE SERVICE 139/tcp filtered netbios-ssn Nmap done: 1 IP address (1 host up) scanned in 2.06 seconds
Zwei SYN-Pakete wurden gesendet, keine Antwort kam zurück. Der Scan dauerte 2.06 Sekunden – deutlich länger als bei einem geschlossenen Port (0.24 Sekunden).
Wenn eine Firewall Pakete aktiv ablehnt (ICMP Unreachable):
- nmap 192.168.100.59 -p 445 --packet-trace -n --disable-arp-ping -Pn
Ausgabe:
Starting Nmap 7.98 at 2026-04-01 13:37 -0400 SENT (0.0429s) TCP 192.168.100.94:57559 > 192.168.100.59:445 S ttl=54 iplen=44 RCVD (0.0434s) ICMP [192.168.100.59 > 192.168.100.94 Port unreachable (type=3/code=3)] PORT STATE SERVICE 445/tcp filtered microsoft-ds Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
ICMP type=3, code=3 bedeutet "Port Unreachable" – aktive Ablehnung durch die Firewall. Der Scan ist mit 0.05 Sekunden deutlich schneller da Nmap sofort eine Antwort erhält.
UDP-Ports scannen
- nmap 192.168.100.59 -F -sU
Ausgabe:
Starting Nmap 7.98 at 2026-04-01 13:38 -0400 Nmap scan report for 192.168.100.59 Host is up (0.00057s latency). Not shown: 58 closed udp ports (port-unreach), 41 open|filtered udp ports (no-response) PORT STATE SERVICE 137/udp open netbios-ns MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 59.33 seconds
Der Scan dauerte 59 Sekunden für nur 100 Ports. Port 137 ist definitiv offen da der Dienst eine UDP-Antwort gesendet hat.
UDP-Port offen (mit Antwort):
- nmap 192.168.100.59 -sU -Pn -n --disable-arp-ping --packet-trace -p 137 --reason
Ausgabe:
SENT (0.4090s) UDP 192.168.100.94:59643 > 192.168.100.59:137 ttl=53 iplen=78 RCVD (0.4101s) UDP 192.168.100.59:137 > 192.168.100.94:59643 ttl=64 iplen=365 PORT STATE SERVICE REASON 137/udp open netbios-ns udp-response ttl 64
UDP-Port geschlossen (ICMP Unreachable):
- nmap 192.168.100.59 -sU -Pn -n --disable-arp-ping --packet-trace -p 100 --reason
Ausgabe:
SENT (0.4095s) UDP 192.168.100.94:60808 > 192.168.100.59:100 ttl=37 iplen=28 RCVD (0.4099s) ICMP [192.168.100.59 > 192.168.100.94 Port unreachable (type=3/code=3)] PORT STATE SERVICE REASON 100/udp closed unknown port-unreach ttl 64
UDP-Port open|filtered (keine Antwort):
- nmap 192.168.100.59 -sU -Pn -n --disable-arp-ping --packet-trace -p 138 --reason
Ausgabe:
SENT (0.4140s) UDP 192.168.100.94:48404 > 192.168.100.59:138 ttl=38 iplen=28 SENT (1.4144s) UDP 192.168.100.94:48406 > 192.168.100.59:138 ttl=52 iplen=28 PORT STATE SERVICE REASON 138/udp open|filtered netbios-dgm no-response
Zwei Pakete wurden gesendet, keine Antwort kam zurück. Da UDP keine Bestätigung kennt kann Nmap nicht unterscheiden ob der Port offen ist oder die Pakete von einer Firewall verworfen werden.
Ergebnisse speichern
Alle Formate gleichzeitig speichern:
- nmap 192.168.100.59 -p- -oA target
Ausgabe:
PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 139/tcp open netbios-ssn 143/tcp open imap 443/tcp open https 445/tcp open microsoft-ds 5001/tcp open commplex-link 8080/tcp open http-proxy 8081/tcp open blackice-icecap Nmap done: 1 IP address (1 host up) scanned in 4.85 seconds
Erzeugte Dateien:
ls target.gnmap target.xml target.nmap
Ausgabeformate
- Normal (-oN)
- Lesbare Textausgabe – spiegelt genau die Terminalausgabe wider. Enthält oben den verwendeten Befehl mit Zeitstempel und unten eine Zusammenfassung.
- cat target.nmap
- Grepbar (-oG)
- Komprimiertes Format – alle Informationen pro Host in einer Zeile. Ideal für grep, awk und cut.
- cat target.gnmap
# Nmap 7.98 scan initiated Wed Apr 1 13:08:40 2026 ... Host: 192.168.100.59 () Status: Up Host: 192.168.100.59 () Ports: 22/open/tcp//ssh///, 80/open/tcp//http///,...
Jeder offene Port wird im Format port/state/protocol/owner/service/rpc-info/version aufgezeichnet. Diese Struktur erlaubt einfaches Filtern – z.B. alle Hosts mit Port 80 offen aus einem großen Scan-Ergebnis per grep extrahieren:
- grep "80/open" target.gnmap
- XML (-oX)
- Maschinenlesbares Format – enthält alle Nmap-Daten inklusive Timing, TTL, MAC-Adressen und Service-Confidence. Wird von Metasploit und Reporting-Tools erwartet.
XML in HTML umwandeln:
- xsltproc target.xml -o target.html
Das erzeugt einen formatierten HTML-Bericht der im Browser geöffnet werden kann – nützlich für Kundendokumentation.
Service-Enumeration
Versions-Erkennung
Schneller Überblick zuerst, dann vollständiger Scan:
- nmap 192.168.100.59 -p- -sV
Scanfortschritt alle 5 Sekunden anzeigen:
- nmap 192.168.100.59 -p- -sV --stats-every=5s
Verbosity erhöhen – offene Ports werden sofort angezeigt:
- nmap 192.168.100.59 -p- -sV -v
| Option | Beschreibung |
|---|---|
192.168.100.59 |
Ziel-IP |
-p- |
Alle Ports scannen |
-sV |
Service-Versionserkennung |
-v |
Verbosity erhöhen |
--stats-every=5s |
Fortschritt alle 5 Sekunden anzeigen |
Banner Grabbing
- nmap 192.168.100.59 -p- -sV
Ausgabe:
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.3p1 Debian 3ubuntu4 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.2.14 ((Ubuntu) mod_mono/2.4.3 PHP/5.3.2...) 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 143/tcp open imap Courier Imapd (released 2008) 443/tcp open ssl/http Apache httpd 2.2.14 ((Ubuntu) ...) 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 5001/tcp open java-object Java Object Serialization 8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1 8081/tcp open http Jetty 6.1.25 Nmap done: 1 IP address (1 host up) scanned in 17.72 seconds
Nmap liest primär die Banner der Dienste. Wenn die Version nicht aus dem Banner erkennbar ist, nutzt Nmap eine Signatur-basierte Erkennung – das erhöht die Scandauer erheblich.
Version Scanning Packet-Trace – Samba-Erkennung
Detailliertes Beispiel wie Nmap einen Dienst über Port 445 identifiziert:
- nmap 192.168.100.59 -Pn -n --disable-arp-ping --packet-trace -p 445 --reason -sV
Ausgabe:
SENT TCP 192.168.100.94:47699 > 192.168.100.59:445 S ttl=41 iplen=44 RCVD TCP 192.168.100.59:445 > 192.168.100.94:47699 SA ttl=64 iplen=44 ... Service scan hard match (SMBProgNeg): 192.168.100.59:445 is netbios-ssn. Version: |Samba smbd|3.X - 4.X|workgroup: WORKGROUP| PORT STATE SERVICE VERSION 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
Der Scan beginnt mit einem Standard-SYN-Paket. Das Ziel antwortet mit SA (SYN-ACK) und bestätigt damit dass der Port offen ist. Nmap baut dann eine vollständige TCP-Verbindung auf und sendet zunächst einen NULL-Probe. Da keine Antwort kommt (READ TIMEOUT) geht Nmap zu einem spezifischeren Probe namens SMBProgNeg über. Das Ziel antwortet mit 101 Bytes Daten die Nmap gegen seine Service-Signaturdatenbank abgleicht und als Samba smbd 3.X - 4.X identifiziert.
Nmap Scripting Engine (NSE)
NSE erweitert Nmap weit über einfaches Port-Scanning hinaus. Die Skripte sind in Lua geschrieben und in 14 Kategorien organisiert.
| Kategorie | Beschreibung |
|---|---|
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 bei -sC
|
discovery |
Enumeriert erreichbare Dienste |
dos |
Prüft auf Denial-of-Service-Schwachstellen – mit Vorsicht verwenden |
exploit |
Versucht bekannte Schwachstellen auszunutzen |
external |
Nutzt externe Drittdienste für zusätzliche Analyse |
fuzzer |
Sendet ungültige Eingaben zur Schwachstellensuche |
intrusive |
Kann das Zielsystem beeinträchtigen |
malware |
Prüft ob das Zielsystem Malware-Infektionen zeigt |
safe |
Nicht-invasive Informationsgewinnung ohne Schaden |
version |
Erweitert die Service-Versionserkennung |
vuln |
Identifiziert bekannte Schwachstellen am Ziel |
Skripte können auf drei Arten aufgerufen werden:
# Alle Standardskripte ausführen: nmap <target> -sC # Alle Skripte einer Kategorie: nmap <target> --script <category> # Bestimmte Skripte namentlich: nmap <target> --script <script-name>,<script-name>,...
Standardskripte (-sC)
- nmap 192.168.100.59 -sC
Ausgabe (gekürzt):
PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 1024 ea:83:1e:45:5a:a6:8c:43:1c:3c:e3:18:dd:fc:88:a5 (DSA) |_ 2048 3a:94:d8:3f:e0:a2:7a:b8:c3:94:d7:5e:00:55:0c:a7 (RSA) 80/tcp open http | http-methods: |_ Potentially risky methods: TRACE |_http-title: owaspbwa OWASP Broken Web Applications 443/tcp open https | ssl-cert: Subject: commonName=owaspbwa | Not valid before: 2013-01-02T21:12:38 |_Not valid after: 2022-12-31T21:12:38 445/tcp open microsoft-ds | smb-security-mode: |_ message_signing: disabled (dangerous, but default)
Port 22 läuft SSH mit einem 1024-Bit DSA-Schlüssel – Schlüsselgrößen dieser Länge gelten als schwach. Port 445 (SMB) hat Message Signing deaktiviert – das macht den Server anfällig für NTLM-Relay-Angriffe.
Skripte nach Name angeben
- nmap 192.168.100.59 -p 80,8080,8081 --script http-enum,http-methods,http-title
Ausgabe (gekürzt):
PORT STATE SERVICE 80/tcp open http | http-enum: | /wordpress/: Blog | /phpmyadmin/: phpMyAdmin | /wordpress/wp-login.php: Wordpress login page. |_ /cgi-bin/: Potentially interesting folder w/ directory listing 8080/tcp open http-proxy | http-enum: | /manager/html/upload: Apache Tomcat (401 Unauthorized) |_ /manager/html: Apache Tomcat (401 Unauthorized)
Das http-enum-Skript findet mehrere bedeutende Verzeichnisse. Die WordPress-Installation und ihre Login-Seite sind sofortige Ziele für Brute-Force. phpMyAdmin sollte niemals öffentlich erreichbar sein. Die Tomcat-Manager-Oberfläche ist ein bekanntes Ziel da Standard- oder schwache Zugangsdaten einem Angreifer direkten Zugriff auf das Deployment ermöglichen.
SSL/TLS-Zertifikat und Cipher-Enumeration
- nmap 192.168.100.59 -p 443 --script ssl-cert,ssl-enum-ciphers,http-title
Ausgabe (gekürzt):
| ssl-cert: Subject: commonName=owaspbwa | Public Key type: rsa | Public Key bits: 1024 | Signature Algorithm: sha1WithRSAEncryption | Not valid after: 2022-12-31T21:12:38 | ssl-enum-ciphers: | SSLv3: | ciphers: | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 1024) - F | TLS_RSA_WITH_RC4_128_MD5 (rsa 1024) - F | warnings: | 64-bit block cipher 3DES vulnerable to SWEET32 attack | Broken cipher RC4 is deprecated by RFC 7465 | CBC-mode cipher in SSLv3 (CVE-2014-3566) |_ least strength: F
Befunde: Selbstsigniertes Zertifikat mit 1024-Bit RSA-Schlüssel (nicht mehr sicher), abgelaufen 2022. Alle Cipher-Suites erhalten Note F. 3DES ist anfällig für SWEET32, RC4 ist durch RFC 7465 verboten, SSLv3 mit CBC-Modus ist direkt anfällig für POODLE (CVE-2014-3566).
Aggressiver Scan (-A)
OS-Erkennung, Versionserkennung, Standardskripte und Traceroute in einem Befehl:
- nmap 192.168.100.59 -p 80 -A
Ausgabe:
PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.2.14 ((Ubuntu) mod_mono/2.4.3 PHP/5.3.2...) | http-methods: |_ Potentially risky methods: TRACE Device type: general purpose Running: Linux 2.6.X OS details: Linux 2.6.17 - 2.6.36 TRACEROUTE HOP RTT ADDRESS 1 0.54 ms 192.168.100.59
Der Apache-Versionsstring ist extrem detailliert. Das System läuft auf einem Linux-2.6-Kernel – ein sehr alter Kernel der bestätigt dass dieses System seit Jahren keine Sicherheitsupdates erhalten hat.
Schwachstellen-Scan (--script vuln)
- nmap 192.168.100.59 -p 80 -sV --script vuln
| Befund | Schwere | Beschreibung |
|---|---|---|
| HTTPOnly Cookie Not Set | Medium | Session-Cookie fehlt HTTPOnly-Flag – XSS kann Token direkt stehlen |
| Cross-Domain Policy (*) | High | crossdomain.xml erlaubt jeder Origin Antworten zu lesen – ermöglicht CSRF und Datenleck |
| HTTP TRACE aktiviert | Medium | TRACE gibt Header zurück inkl. HttpOnly-Cookies – Cross-Site Tracing (XST) |
| CSRF (6 Formulare) | High | Formulare in Shepherd, AppSensorDemo, WackoPicko und WordPress ohne CSRF-Schutz |
| SQL Injection (ESAPI SwingSet) | Critical | 12 Funktionsparameter werden von der Datenbank interpretiert – volles SQLi-Risiko |
| DOM-Based XSS | High | document.write(document.URL) ohne Sanitierung – angreifer-kontrollierte URL wird injiziert |
| CVE-2011-3192 (CVSS 7.8) | High | Apache Byterange DoS – präparierter Range-Header verursacht massive Speicherzuweisung |
| CVE-2010-0425 (CVSS 10.0) | Critical | Maximaler Schweregrad – mehrere öffentliche Exploits und Metasploit-Module verfügbar |
| CVE-2021-40438 (CVSS 9.0) | Critical | Server-Side Request Forgery in mod_proxy – interne Dienste erreichbar |
Apache Byterange Filter DoS (CVE-2011-3192)
Der Apache Byterange-Filter in Version 2.2.14 erzwingt keine Begrenzung für überlappende Byte-Bereiche. Durch einen präparierten Range-Header mit hunderten überlappenden Segmenten kann ein Angreifer den Server dazu bringen massive Mengen Speicher zu allozieren bis der Dienst nicht mehr reagiert. CVSS 7.8, Metasploit-Modul verfügbar.
SQL Injection in ESAPI SwingSet Interactive
Das http-sql-injection-Skript hängte ein einzelnes Anführungszeichen an Funktionsparameter auf zwölf verschiedenen Seiten an und beobachtete Antworten die zeigten dass die Eingabe von der Datenbank interpretiert wurde. SQL-Injection in Parametern die den Anwendungsfluss steuern kann einem Angreifer erlauben Datenbankinhalt zu extrahieren, Authentifizierung zu umgehen, gespeicherte Daten zu modifizieren und in manchen Konfigurationen OS-Befehle durch die Datenbank-Engine auszuführen.
DOM-Based Cross-Site Scripting
Das http-dombased-xss-Skript fand zwei XSS-Quellen auf /dom-xss-example.html. Beide nutzen document.write um Teile der aktuellen URL direkt ohne Sanitierung in die Seite einzufügen. Ein Angreifer kann eine URL mit HTML- oder JavaScript-Payload-Zeichen erstellen die im Kontext der Webanwendung ausgeführt wird wenn ein Opfer diese URL besucht.
CVE-2021-40438 – Server-Side Request Forgery in mod_proxy
Diese SSRF-Schwachstelle ermöglicht einem Angreifer interne Dienste zu erreichen die nicht extern erreichbar sind – der Server wird effektiv als Proxy genutzt um auf Backend-Infrastruktur zuzugreifen. CVSS 9.0 macht dies zu einem der schwerwiegendsten Befunde.
Performance-Optimierung
RTT-Timeout-Tuning
Jedes von Nmap gesendete Paket erwartet eine Antwort. Die Zeit zwischen Senden und Empfangen ist die Round-Trip-Time (RTT). Standardmäßig beginnt Nmap mit 100ms RTT-Timeout und passt sich dynamisch an.
Standard (39 Sekunden, 10 Hosts):
- nmap 192.168.100.0/24 -F
# Nmap done: 256 IP addresses (10 hosts up) scanned in 39.44 seconds
Optimiert (12 Sekunden, 8 Hosts – 2 verpasst):
- nmap 192.168.100.0/24 -F --initial-rtt-timeout 50ms --max-rtt-timeout 100ms
# Nmap done: 256 IP addresses (8 hosts up) scanned in 12.29 seconds
| Option | Beschreibung |
|---|---|
192.168.100.0/24 |
Ziel-Netzwerkbereich |
-F |
Top 100 Ports scannen |
--initial-rtt-timeout 50ms |
Startwert für RTT-Timeout |
--max-rtt-timeout 100ms |
Obere Grenze für RTT-Timeout |
Hinweis: Zu aggressive RTT-Reduzierung führt zu verpassten Hosts. Ergebnisse bei kritischen Netzen immer auf Vollständigkeit prüfen.
Max Retries
Standard (10 Wiederholungen, 23 TCP-Ports):
- nmap 192.168.100.0/24 -F | grep "/tcp" | wc -l
# → 23
Ohne Wiederholungen (schneller, 21 Ports – 2 verpasst):
- nmap 192.168.100.0/24 -F --max-retries 0 | grep "/tcp" | wc -l
# → 21
Hinweis: Zwei Ports wurden mit Retries=0 verpasst. Wie beim RTT-Tuning erkauft man sich Geschwindigkeit mit Genauigkeit.
Minimale Paketrate
Standard (29 Sekunden):
- nmap 192.168.100.0/24 -F -oN tnet.default
# Nmap done: 256 IP addresses (10 hosts up) scanned in 29.83 seconds
Mit 300 Paketen pro Sekunde (8.6 Sekunden, gleiche Ergebnisse):
- nmap 192.168.100.0/24 -F -oN tnet.minrate300 --min-rate 300
# Nmap done: 256 IP addresses (10 hosts up) scanned in 8.67 seconds
Beide Scans lieferten identische Ergebnisse. Bei stabilen Netzbedingungen ist --min-rate eine der effektivsten Methoden die Scandauer ohne Genauigkeitsverlust zu reduzieren.
Timing-Templates
Für Situationen wo manuelles Tuning nicht praktikabel ist bietet Nmap sechs vordefinierte Templates:
| Template | Flag | Einsatz |
|---|---|---|
| Paranoid | -T0 |
Maximale Tarnung, sehr langsam |
| Sneaky | -T1 |
Langsam, IDS-Umgehung |
| Polite | -T2 |
Reduzierte Netzlast |
| Normal | -T3 |
Standard |
| Aggressive | -T4 |
Schnell, für vertrauenswürdige Netze |
| Insane | -T5 |
Maximale Geschwindigkeit, Ergebnisverluste möglich |
Hinweis: Schneller ist nicht immer besser. Jede Optimierung tauscht Geschwindigkeit gegen Vollständigkeit. -T5 nur in stabilen, kontrollierten Umgebungen verwenden.
Firewall- und IDS/IPS-Evasion
Grundkonzepte
- Firewall
- Kontrolliert Traffic zwischen Netzen anhand von Regelwerken – verwirft Pakete stillschweigend oder lehnt sie aktiv ab
- IDS
- Passives Monitoring – erkennt Angriffsmuster in Signaturen und alarmiert
- IPS
- Aktives IDS – blockiert Verbindungen automatisch bei Erkennung
ACK-Scan zur Firewall-Analyse
Wenn ein Port als gefiltert erscheint hat Nmap keine verwertbare Antwort erhalten.
SYN-Scan zeigt offene/geschlossene Ports:
- nmap 192.168.100.96 -p 21,22,25 -sS -Pn -n --disable-arp-ping --packet-trace
Ausgabe:
SENT TCP > 192.168.100.96:25 S → RCVD RA (closed) SENT TCP > 192.168.100.96:21 S → RCVD RA (closed) SENT TCP > 192.168.100.96:22 S → RCVD SA (open) PORT STATE SERVICE 21/tcp closed ftp 22/tcp open ssh 25/tcp closed smtp
ACK-Scan zeigt gefilterte vs. ungefilterte Ports:
- nmap 192.168.100.96 -p 21,22,25 -sA -Pn -n --disable-arp-ping --packet-trace
Ausgabe:
RCVD TCP 192.168.100.96:21 > 192.168.100.97:60548 R RCVD TCP 192.168.100.96:22 > 192.168.100.97:60548 R RCVD TCP 192.168.100.96:25 > 192.168.100.97:60548 R PORT STATE SERVICE 21/tcp unfiltered ftp 22/tcp unfiltered ssh 25/tcp unfiltered smtp
Alle drei Ports sendeten RST zurück – die ACK-Pakete passierten die Firewall und erreichten den Host. "Unfiltered" bedeutet nicht offen oder geschlossen, bestätigt aber dass keine Firewall ACK-Pakete auf diesem Pfad blockiert.
- -sA
- ACK-Scan – ACK-Pakete werden von vielen Firewalls durchgelassen da sie wie Pakete einer bereits bestehenden Verbindung aussehen
IDS/IPS erkennen
IDS/IPS-Systeme sind schwerer zu identifizieren da sie nicht aktiv auf Pakete antworten. Die zuverlässigste Methode ist zu beobachten ob der Zugang zum Ziel nach bestimmten Scans plötzlich blockiert wird.
Empfehlung bei Penetrationstests: Von mehreren VPS-Instanzen mit unterschiedlichen IP-Adressen scannen. Wenn eine IP mitten im Engagement blockiert wird ist das ein starker Hinweis auf ein aktives IPS. In diesem Fall auf eine andere Quell-IP wechseln und die Scan-Aggressivität reduzieren.
Decoy-Scanning (-D)
Fake-Quell-IPs werden in die Paket-Header eingefügt um den echten Scanner zu verschleiern. Aus Zielperspektive scheinen Verbindungsversuche von mehreren verschiedenen Hosts gleichzeitig zu kommen.
- nmap 192.168.100.96 -p 80 -sS -Pn -n --disable-arp-ping --packet-trace -D RND:5
Ausgabe:
SENT from 153.238.79.200 > 192.168.100.96:80 SYN SENT from 149.52.150.116 > 192.168.100.96:80 SYN SENT from 192.168.100.97 > 192.168.100.96:80 SYN ← real RCVD 192.168.100.96:80 > 192.168.100.97 SYN-ACK PORT STATE SERVICE 80/tcp open http
- -D RND
- 5 : Generiert 5 zufällige Decoy-IPs – echte IP wird an zufälliger Position eingefügt
Hinweis: Decoy-IPs müssen erreichbare Hosts sein, sonst entstehen halb-offene Verbindungen am Ziel was zu ungenauen Ergebnissen führen kann.
Gespoofete Quell-IP (-S)
Nützlich wenn Firewallregeln auf Subnetzen statt einzelnen IPs basieren:
- nmap 192.168.100.96 -n -Pn -p 445 -O -S 192.168.100.200 -e wlan0
Ausgabe:
PORT STATE SERVICE 445/tcp open microsoft-ds OS details: Linux 2.6.17 - 2.6.36
| Option | Beschreibung |
|---|---|
-S 192.168.100.200 |
Gespoofete Quell-IP-Adresse |
-e wlan0 |
Pakete über das angegebene Netzwerkinterface senden |
DNS-Proxying – Source Port 53
DNS-Anfragen werden von Firewalls üblicherweise durchgelassen da das Blockieren von UDP/TCP Port 53 normale Namensauflösung im Netz brechen würde. Viele Firewalls vertrauen Traffic auf Port 53 ohne genaue Inspektion.
Gefilterter Port mit Standard-Quellport:
- nmap 192.168.100.96 -p 50000 -sS -Pn -n --disable-arp-ping --packet-trace
50000/tcp closed ibm-db2
Gleicher Port mit Quellport 53:
- nmap 192.168.100.96 -p 50000 -sS -Pn -n --disable-arp-ping --packet-trace --source-port 53
50000/tcp closed ibm-db2 ← Antwort erhalten = Firewall vertraut Port 53
Wenn ein vorher gefilterter Port mit Source-Port 53 antwortet trifft die Firewall Vertrauensentscheidungen basierend auf DNS-Port-Traffic. Mit Netcat direkt interagieren:
- nc -nv --source-port 53 192.168.100.96 50000
Kurzreferenz
| Befehl | Zweck |
|---|---|
nmap -sn 192.168.1.0/24 |
Ping-Sweep – aktive Hosts finden |
nmap -sS -p- target |
Vollständiger SYN-Scan aller Ports (root) |
nmap -sT target |
TCP-Connect-Scan (ohne root) |
nmap -sU -F target |
Schneller UDP-Scan Top 100 |
nmap -sV target |
Versionserkennung |
nmap -O target |
OS-Fingerprinting |
nmap -A target |
Aggressiv: Version + OS + Skripte + Traceroute |
nmap -sC target |
Standard-NSE-Skripte ausführen |
nmap --script vuln target |
Alle Schwachstellen-Skripte ausführen |
nmap -D RND:5 target |
Decoy-Scan mit 5 zufälligen IPs |
nmap --source-port 53 target |
DNS-Quellport zur Firewall-Umgehung |
nmap -T4 -F target |
Schneller aggressiver Scan |
nmap --min-rate 300 target |
Minimale Paketrate setzen |
nmap --max-retries 0 target |
Keine Wiederholungen (schneller, ungenauer) |
nmap -oA output target |
Ergebnisse in allen Formaten speichern |
nmap --packet-trace target |
Alle gesendeten/empfangenen Pakete anzeigen |
nmap --reason target |
Zeigt warum jeder Port seinen Zustand hat |
nmap --disable-arp-ping target |
ICMP statt ARP im LAN erzwingen |
nmap -p- -sV --script vuln target |
Vollständige Enumeration mit Schwachstellenscan |
nmap -sA -p- target |
ACK-Scan zur Firewall-Regel-Analyse |
nmap -Pn target |
Host-Discovery überspringen |
nmap -n target |
DNS-Auflösung deaktivieren |
nmap --top-ports 100 target |
Top 100 häufigste Ports scannen |
nmap -sV --version-intensity 9 |
Maximale Versionserkennungsintensität |
nmap -sC -sV -oA output target |
Standardskripte + Version + alles speichern |