Zur Identifikation der erreichbaren Server in einem Netzbereich kann nmap mittels ICMP einen Ping-Sweep durchführen. Hierbei wird an jede IP-Adresse im Netz das ICMP-Paket Echo Request versendet und auf den Echo Reply des Servers gewartet. Selbstverständlich bleiben bei diesem Vorgehen alle Server unentdeckt, welche Ping deaktiviert haben. Mittels der folgenden Befehlszeile kann beispielsweise ein Netzbereich nach erreichbaren Hosts gescannt werden:

nmap -sn ${Netzbereich}

Die einzelnen IP-Adressen können wir dann nach erreichbaren Diensten über einen Port-Scan absuchen: Bei TCP geschieht ein erfolgreicher Verbindungsaufbau in drei Schritten (Three-Way-Handshake). Dabei sendet der Client als initiale Verbindungsanfrage ein Syn-Paket an den offenen Port des Servers und der Server bestätigt die Anfrage mit einem Syn/Ack-Paket. Im abschließenden dritten Schritt muss der Client für einen erfolgreichen Verbindungsaufbau ebenfalls nur noch mit einem Ack-Paket antworten. Wir können nmap über die Option -sT mitteilen, den Three-Way-Handshake für einen Port durchzuspielen.

Natürlich werden nicht alle Ports auf einem Zielsystem offen sein, sodass wir von nmap im Normalfall einen der drei Zustände open, closed oder filtered angezeigt bekommen. Am Beispiel des TCP-Three-Way-Handshake können wir jeden dieser Zustände nachvollziehen:

  • Port ist open: Der Server sendete im zweiten Schritt des Three-Way-Handshakes ein Syn/Ack-Paket und akzeptiert daher die Verbindung.
  • Port ist closed: Der Server sendete im zweiten Schritt des Three-Way-Handshakes ein RST-Paket, da der Port geschlossen ist.
  • Port ist filtered: Der Server sendete im zweiten Schritt des Three-Way-Handshakes überhaupt kein Paket, da bspw. eine Firewall vorgeschaltet ist, die den Verbindungsaufbau ablehnt.

Im Gegensatz zu TCP ist UDP verbindungslos, wodurch sich ein Port-Scan von UDP-Ports schwierig gestaltet. Bei UDP werden wir auf ein versandtes Datagramm nur eine Antwort erhalten, wenn ein Dienst auf dem Port lauscht, das Datagramm sein Ziel erreicht hat, von der Gegenseite verstanden wurde und eine Antwort dafür vorgesehen ist. Die Ergebnisse bei einem UDP-Scan sind somit grundsätzlich unzuverlässiger. Sofern wir aber keine Antwort vom Server erhalten haben, können wir auf eventuell vorhandene ICMP-Nachrichten vom Server zurückgreifen. Im Falle eines geschlossenen UDP-Ports wird der Server beispielsweise mit der ICMP-Nachricht port unreachable antworten. Über die Option -sU können wir bei nmap einen UDP-Port-Scan veranlassen.

Im Allgemeinen bietet nmap eine Vielzahl von Scan-Techniken, welche über die Optionen gesteuert werden können. Eine detaillierte Auskunft über den Funktionsumfang von nmap liefert dessen Manpage (→man nmap). Beispielsweise versucht der nmap-Befehl nmap -p22 -sTV 10.13.53.32, eine vollständige TCP-Verbindung mit dem Zielsystem 10.13.53.32 und dem Port 22 aufzubauen. Sofern dies erfolgreich war und ein Dienst antwortet, soll nmap über seine Versionserkennung versuchen, die Softwareversion des lauschenden Dienstes zu identifizieren.

Der folgende nmap-Befehl scannt zum Beispiel den angegebenen Host so schnell wie möglich nach allen UDP-Ports. Neben der offiziellen Erklärung der verwendeten Parameter sind die nützlichsten auch unten aufgeführt:

nmap -Pn -sU -p- --open --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 api.dubius-payment.com
-Pn: Treat all hosts as online -- skip host discovery
-T5 <0-5>: Set timing template (higher is faster)
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
-p- scan all ports (1 - 65535) or e.g. -p 80,443
--script=${Lua scripts}: Enable script scanning
-sV: Probe open ports to determine service/version info
-O: Enable OS detection
-6: Enable IPv6 scanning

Grundsätzlich kann Ping auf den Zielsystemen deaktiviert sein, weswegen ein Portscan gegen jede IP-Adresse durchgeführt werden sollte. Infolgedessen sollte immer die nmap-Option '-Pn' bei Portscans gesetzt werden. Zudem ist es empfehlenswert, immer einzelne Portscans von IP-Adressen durchzuführen, da es zeitlich ineffiziet ist, auf die Ausgabe eines Portscans gegen ein Netzbereich zu warten. Ein Ansatz wäre es, alle IP-Adressen eines Netzbereichs in eine Datei mittels des folgenden Befehls zu schreiben:

nmap -sL -n ${network}> | grep "Nmap scan" | cut -d" " -f5 > targets.txt

Im Anschluss könnten die Portscans gegen die Zielsysteme wie folgt iteriert werden:

for ip in $(cat targets.txt); do ${nmap command} >> $ip-[slow|fast]-[default|full]-[tcp|udp].txt; done

Im obigen Beispiel werden die Zielsysteme aus einer Liste gelesen. Demnach könnten auch mehrere Portscans von verschiedenen IT-Systemen parrallel ausgeführt werden, wenn die nmap-Befehle die IP-Adressen aus verschiedenen Dateien beziehen. Zum Beispiel unterteilt der folgende Befehl eine Liste in 10er-Pakete auf:

split -l 10 -d targets.txt segment

Letzte Änderung: 2022-12-15

Kursinformationen Penetrationstest

Über das Pentest Training

Entdecken Sie die Welt des Penetration Testing. Lernen Sie Netzwerke zu infiltrieren sowie erfolgreich Systeme und Anwendungen zu penetrieren. Eignen Sie sich das notwendige Hacking-Handwerkszeug an und setzen Sie es bei der Durchführung von profesionellen Penetrationstest ein. Werden Sie zum Penetrationstester. Hier finden Sie die öffentlichen und kostenlosen Unterlagen zum Pentest Training der binsec academy GmbH. Die binsec academy GmbH bietet die dazugehörigen virtuellen Labor-Umgebungen und Zertifizierungen an. Das vermittelte Wissen zu Hacking and Penetration Testing ist aber allgemeingültig.

Über binsec academy GmbH

Die binsec academy GmbH ist der europäische Anbieter für Online Security Trainings mit virtuellen Labor-Umgebungen. Kernbestandteil aller Security Trainings ist die Vermittlung von Praxis, Praxis und nochmals Praxis. Im Wiki finden Sie hier die öffentlichen und frei verfügbaren Kurs-Materialien. Die Theorie in die Praxis umsetzen, können sie auf binsec-academy.com.