Das Verwalten von Netzwerken und das Überwachen des Datenverkehrs zwischen Systemen klingt einschüchternd. Nun, es sei denn, Sie wissen, wie man Netcat verwendet.
Netcat ist ein Befehlszeilentool, das Sie für verschiedene Zwecke verwenden können, wie z. B. Portscans, Dateiübertragungen und das Erstellen eines minimalen Webservers, um Verbindungsaktivitäten zu testen. Und in diesem Tutorial lernen Sie, wie Sie Netcat optimal nutzen können, während Sie einige der häufigsten Anwendungsfälle für Netcat durchgehen.
Bereit? Lesen Sie weiter und bringen Sie Ihre Netzwerkfähigkeiten auf ein neues Level!
Voraussetzungen
In diesem Tutorial wird eine praktische Demonstration durchgeführt. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben.
- Zwei Linux-Maschinen: Eine (ubuntu1) dient als Empfangshost und eine andere (ubuntu2) als sendender Host – dieses Tutorial verwendet Ubuntu 20.04 für beide Maschinen.
Scannen nach offenen Ports
Ports sind die Türöffnungen, die den Netzwerkverkehr in eine Maschine hinein- und herauslassen. Wenn ein Port geschlossen ist, lauscht kein Dienst auf diesem Port und kein Verkehr kann hindurchgelangen. Aber wenn der Port geöffnet ist, ist Ihr Netzwerk Angriffen ausgesetzt.
Wenn Sie überprüfen möchten, ob ein bestimmter Port auf einer Maschine geöffnet ist, um Sicherheitslücken zu patchen, ist Netcat dafür geeignet. Als Pentester müssen Sie wissen, welche Ports geöffnet sind, um Ihren Angriff durchzuführen. Aus welchem Grund auch immer, das Scannen nach offenen Ports ist ein häufiges Bedürfnis.
Die grundlegende Syntax zum Scannen von Ports mit Netcat lautet wie folgt:
host
– ist die IP-Adresse oder der Hostname der Maschine, die Sie scannen möchten.startport
– ist die Startportnummer.endport
– ist die Endportnummer.
Der Netcat-Befehl hat eine Alias-Version namens nc, die praktisch ist, um Befehle zu verkürzen. Aber dieses Tutorial verwendet Netcat für eine korrekte Dokumentation.
Verbinden Sie sich per SSH mit Ihrem Absender-Host (ubuntu2) und führen Sie den folgenden Befehl aus, um nach offenen Ports zwischen den Ports 1-100
zu scannen.
Ersetzen Sie in diesem Tutorial 149.28.86.131 durch die IP-Adresse Ihres Absender-Hosts.
In den meisten Fällen reicht der Portbereich 1-100
aus. Die meisten Dienste verwenden Standardportnummern, die in der Regel in diesem Bereich liegen, wie z.B. 22
für SSH, 80
für HTTP, etc.
Die unten stehende Liste erläutert jede der Flags, die das Verhalten des Portscans steuern:
-z
(Null-I/O-Modus) – Netcat liest nicht von der Netzwerkverbindung und schreibt auch nicht darauf. Diese Option macht den Scan-Prozess schneller.-n
– Teilt Netcat mit, die DNS-Auflösung zu deaktivieren, um Verzögerungen zu vermeiden.-v
– Lässt Netcat alle Port-Scan-Prozesse im Detail anzeigen.
Sie können unten sehen, dass die Verbindung zum Port 22 (SSH) erfolgreich war, aber alle anderen Ports fehlgeschlagen sind.

Da der Befehl netcat
alle gescannten Ports auflistet, erhalten Sie viele Informationen, von denen einige Sie nicht benötigen. In diesem Fall führen Sie den unten stehenden Befehl aus und leiten ihn durch den Befehl grep
. Dieser Befehl filtert nur die offenen Ports mit der Nachricht “succeeded!”
am Ende, wie unten gezeigt.
Unten sehen Sie, dass der Port 22 für die SSH-Verbindung geöffnet ist, wie erwartet.

Dateien sicher zwischen Hosts senden
Abgesehen vom Portscannen ermöglicht es Netcat, Dateien sicher zwischen zwei Rechnern zu übertragen. Netcat verwendet das TCP-Protokoll für die Dateiübertragung, das zuverlässiger ist als UDP.
Die grundlegende Syntax für das Senden einer Datei mit Netcat lautet wie folgt:
Um Dateien von Ihrem Host an einen anderen Rechner zu senden:
1. Führen Sie den unten stehenden Befehl aus, um auf dem Empfangshost (ubuntu1) auf Port 4444 zu lauschen.
Dieser Befehl hat keine Ausgabe, aber die unten aufgeführten Optionen beeinflussen, wie der Befehl den zu lauschenden Port festlegt:
-l
– teiltnetcat
mit, auf dem angegebenen TCP-Port auf eine eingehende Verbindung zu lauschen. Der Port kann jede beliebige Zahl sein, aber stellen Sie sicher, dass andere Dienste Ihren bevorzugten Port nicht verwenden.
>
– teilt netcat mit, alle eingehenden Daten in eine Datei auf dem angegebenen Pfad (ata_file) umzuleiten.
Nur der Root-Benutzer kann an Ports unterhalb von 1000 binden, daher müssen Sie als Nicht-Root-Benutzer einen Port größer als 1000 auswählen. Wenn Sie versuchen, als Nicht-Root-Benutzer eine Portnummer unter 1000 zu verwenden, erhalten Sie folgenden Fehler.

2. Auf dem sendenden Host (ubuntu2) führen Sie den folgenden Echo-Befehl aus, der keine Ausgabe hat, aber eine Datei namens ata_file mit dem Inhalt „Hallo von ATA“ erstellt.
3. Führen Sie nun den unten stehenden netcat-Befehl aus, um ata_file an den empfangenden Host (ubuntu1) zu senden. Stellen Sie sicher, dass Sie auf dem empfangenden Host (4444) dieselbe Portnummer wie auf dem sendenden Host verwenden.
Dieser Befehl hat keine Ausgabe, aber die <-Option teilt netcat mit, die Eingabe aus der angegebenen Datei zu lesen.
4. Wechseln Sie schließlich zum empfangenden Host (ubuntu1) und führen Sie den unten stehenden cat-Befehl aus, um den Inhalt der ata_file zu überprüfen.
Sie können unten die Nachricht „Hallo von ATA“ sehen, die darauf hinweist, dass die Übertragung funktioniert hat.

Senden von Verzeichnissen an einen anderen Host
Bisher haben Sie erfolgreich eine einzelne Datei von einem Host an einen anderen gesendet. Aber was ist, wenn Sie ein ganzes Verzeichnis mit all seinen Unterverzeichnissen und Dateien senden möchten? Netcat kann auch Verzeichnisse senden!
Angenommen, Sie haben ein Backup-Verzeichnis namens apache_backup auf dem sendenden Host (ubuntu2). Sie müssen das Verzeichnis zuerst komprimieren, dann senden und auf dem empfangenden Host (ubuntu1) extrahieren.
1. Auf dem empfangenden Host (ubuntu1) führen Sie den folgenden Befehl aus, um ein neues Verzeichnis namens apache_backup zu erstellen und (cd) in dieses Verzeichnis zu wechseln.

2. Führen Sie als Nächstes den folgenden Befehl aus, um auf Port 4444 zu lauschen und die komprimierten Dateien zu extrahieren, die der sendende Host (ubuntu2) an den empfangenden Host (ubuntu1) sendet.
Dieser Befehl hat keine Ausgabe, aber die tar xf – Flags nehmen die Eingabe von Netcat (Standardeingabe) entgegen und extrahieren alle Dateien in das aktuelle Verzeichnis.
3. Auf dem sendenden Host (ubuntu2) führen Sie die folgenden Befehle aus, um ein Verzeichnis (apache_backup), einige Textdateien zu erstellen und sie an den empfangenden Host (ubuntu1) zu senden.
Diese Befehle haben keine Ausgabe, aber Sie überprüfen, ob die Übertragung im nächsten Schritt funktioniert hat.
4. Wechseln Sie schließlich zum empfangenden Host (ubuntu1), drücken Sie Strg+C, um das Lauschen auf Port 4444 zu beenden, und führen Sie den Befehl ls aus, um die Dateien im Verzeichnis apache_backup aufzulisten.
Wie Sie unten sehen können, wurden die Dateien des Verzeichnisses apache_backup erfolgreich in das Verzeichnis apache_backup auf dem empfangenden Host übertragen.

Senden des gesamten Laufwerks oder der Partition an einen anderen Host
Das Senden Ihrer gesamten Festplatte oder Partition an einen anderen Host mag ehrgeizig erscheinen, aber diese Aufgabe ist durchaus machbar, abgesehen vom Senden von Dateien und Verzeichnissen. Dies ist besonders nützlich, wenn Sie Ihre gesamte Festplatte sichern müssen, bevor Sie drastische Maßnahmen ergreifen, wie z.B. das Verschieben oder Löschen großer Dateimengen.
1. Führen Sie den Befehl auf dem Empfangshost (ubuntu1) aus, um das Zuhören am Port 4444 zu starten. Dieser Befehl hat keine Ausgabe, entpackt jedoch alle eingehenden Daten (bzip2 -d | dd) auf /dev/sdb.
/dev/sdb ist Ihre zweite Festplatte auf der Maschine. In diesem Fall handelt es sich jedoch um eine leere Festplatte, die für dieses Tutorial an diese Maschine angeschlossen ist.
2. Führen Sie auf dem sendenden Host (ubuntu2) den folgenden fdisk-Befehl aus, um alle Festplatten und Partitionen auf Ihrer Maschine zu finden.
Wie Sie unten sehen können, ist /dev/vda1/ die Stamm-Partition für den sendenden Host in diesem Tutorial. Ihre Ausgabe kann je nach Konfiguration Ihrer Maschine unterschiedlich sein.

3. Führen Sie den folgenden Befehl auf dem sendenden Host (ubuntu2) aus, der keine Ausgabe hat, aber die Partition /dev/vda1 an den Empfangshost (ubuntu1) über Port 4444 sendet.
Das Komprimieren und Senden der Partition an den Empfangshost dauert je nach Größe der Partition eine Weile.
4. Sobald der Vorgang abgeschlossen ist, wechseln Sie zum Empfangshost (ubuntu1) und Sie werden die folgende Ausgabe sehen.
Der Fehler „Kein Speicherplatz mehr auf dem Gerät“ wird erwartet, da /dev/vda1 wahrscheinlich größer als /dev/sdb ist. Aber Sie haben die Idee verstanden! Sie können Netcat verwenden, um Ihre gesamte Festplatte oder Partition an einen anderen Computer zu senden.

5. Führen Sie abschließend die Befehle auf dem empfangenden Host (ubuntu1) aus, um die Partition /dev/vda1 zu mounten und alle Dateien in der Partition aufzulisten.
Wie unten zu sehen ist, werden alle Dateien und Verzeichnisse von /dev/vda1 erfolgreich nach /dev/sdb übertragen.

Erstellung eines Minimal-Webservers
Das Konfigurieren eines vollwertigen Webservers wie Apache oder NGINX nur zur Diagnose eines Webserver-Problems kann lästig sein. Erstellen Sie stattdessen einen minimalen Webserver mit Netcat, um Webserver-Probleme schnell zu identifizieren.
Um einen minimalen Webserver zu erstellen:
1. Wechseln Sie zu Ihrem empfangenen Host und führen Sie die folgenden Befehle aus, um ein Stammverzeichnis (nc-webserver-docroot) für den Webserver und ein Shell-Skript (httpresponse.sh) zu erstellen, das die HTTP-Antwort generiert.

2. Erstellen Sie anschließend eine index.html Datei im Verzeichnis /root/nc-webserver-docroot/ mit Ihrem bevorzugten Editor und füllen Sie die Datei mit dem untenstehenden Code aus. Diese HTML-Datei enthält die Inhalte, die der Netcat-Webserver bereitstellen wird.
3. Erstellen Sie eine Shell-Skriptdatei namens httpresponse.sh im /root/nc-webserver-docroot/ Verzeichnis und füllen Sie den folgenden Code ein.
Dieses Shell-Skript gibt den Inhalt der Datei /root/nc-webserver-docroot/index.html als HTTP-Antwort an jeden Client zurück, der eine Anfrage an Ihren Netcat-Webserver sendet.
4. Führen Sie nun den unten stehenden chmod-Befehl aus, der keine Ausgabe hat, aber die Datei httpresponse.sh ausführbar (+x) macht.
5. Führen Sie den folgenden ncat-Befehl aus, um den Netcat-Webserver auf Port 7777 zu starten.
Stellen Sie sicher, dass Sie den Port 7777 durch die Portnummer Ihrer Wahl ersetzen, die von keinem anderen Dienst auf Ihrem System verwendet wird.
Die folgenden Optionen beeinflussen das Verhalten des Netcat-Webservers:
-l
– gibt Ncat an, auf eine eingehende Verbindung zu warten.
-v
– aktiviert den Verbose-Modus, um alle eingehenden HTTP-Anfragen in Ihrem Terminal anzuzeigen.
-c
– gibt den Pfad zum Skript httpresponse.sh an, das die HTTP-Antworten generiert.
- -keep-open – hält den Ncat-Listener offen, auch nachdem die erste Verbindung geschlossen wurde. Diese Option ist nützlich, wenn Sie Ihren Webserver mit mehreren Clients testen.
Sie werden die folgende Ausgabe sehen, sobald der Netcat-Webserver auf Port 7777 auf allen verfügbaren Netzwerkschnittstellen läuft.

6. Öffnen Sie nun ein weiteres Terminal und führen Sie den folgenden Befehl aus, um Ihren Netcat-Webserver zu testen (http://localhost:7777).
Die Ausgabe unten zeigt, dass der Netcat-Webserver wie erwartet funktioniert und den Inhalt der Datei /root/nc-webserver-docroot/index.html als HTTP-Antwort zurückgeben kann.

7. Schließlich wechseln Sie zurück zum Terminal, in dem der Netcat-Webserver ausgeführt wird. Sie werden sehen, dass der Netcat-Webserver die HTTP-Anfrage vom curl-Client empfangen und verarbeitet hat.
Herzlichen Glückwunsch! Sie haben erfolgreich einen minimalen Netcat-Webserver erstellt, um Ihre Netzwerkverbindung zu testen!

Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie Sie Netcat verwenden, um Ihre Netzwerk- und Debugging-Fähigkeiten zu verbessern. Sie haben offene Ports gescannt, Dateien übertragen und einen minimalen Webserver erstellt. Und zu diesem Zeitpunkt können Sie viele realen Netzwerkprobleme mit diesem leistungsstarken Netzwerk-Dienstprogramm lösen!
Mit diesem neu erlangten Wissen, warum nicht Ihre Netzwerkfähigkeiten noch weiter verbessern und ein Experte in der Cybersecurity werden?