Nmap ausführlich: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Netzwerk-Enumeration mit Nmap = Nmap ist das Standardwerkzeug für Host-Discovery, Port-Scanning, Service-Enumeration und Schwachstellenanalyse im Rahmen von…“)
 
 
Zeile 92: Zeile 92:
 
* nmap 192.168.100.59 -sn -oA host -PE --packet-trace
 
* nmap 192.168.100.59 -sn -oA host -PE --packet-trace
  
Ausgabe (gekürzt):
+
Ausgabe:
 
  Starting Nmap 7.98 at 2026-04-02 23:32 -0400
 
  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
 
  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
 
  RCVD (0.0365s) ARP reply 192.168.100.59 is-at 08:00:27:00:14:D9
...
 
 
  Host is up (0.00062s latency).
 
  Host is up (0.00062s latency).
 
  MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC)
 
  MAC Address: 08:00:27:00:14:D9 (Oracle VirtualBox virtual NIC)
Zeile 399: Zeile 398:
 
  Host: 192.168.100.59 ()  Status: Up
 
  Host: 192.168.100.59 ()  Status: Up
 
  Host: 192.168.100.59 ()  Ports: 22/open/tcp//ssh///, 80/open/tcp//http///,...
 
  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 (-oX) : Maschinenlesbares Format – enthält alle Nmap-Daten inklusive Timing, TTL, MAC-Adressen und Service-Confidence. Wird von Metasploit und Reporting-Tools erwartet.
Zeile 450: Zeile 452:
  
 
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.
 
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) ==
 
== Nmap Scripting Engine (NSE) ==

Aktuelle Version vom 29. Mai 2026, 12:14 Uhr

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

  • 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