Cryptcat

Aus mxlinuxusers.de

Bei cryptcat handelt es sich um eine Variante von netcat, die Daten über Netzwerk-Verbindungen per TCP- oder UDP-Protokoll liest und schreibt. Der Vorteil gegenüber netcat besteht darin, daß bei cryptcat die Daten mit dem Twofish-Algorithmus verschlüsselt übertragen werden, während netcat von sich aus Daten unverschlüsselt überträgt. cryptcat ist als verlässliches Backend-Werkzeug entworfen und kann direkt benutzt oder einfach durch andere Programme und Skripte gesteuert werden. Gleichzeitig ist es ein funktionsreiches Werkzeug zur Erkundung, Fehlersuche- und -behebung im Netzwerk, da es fast alle möglichen Verbindungen herstellen kann, die man benötigen könnte.

Da cryptcat jedoch schon seit längerem nicht mehr weiterentwickelt wird (letztes Update 2023[1]) sollte man vielleicht statt dessen die Verwendung von socat in Betracht ziehen, auch eine Weiterentwicklung von netcat, die jedoch ebenfalls Verschlüsselung von Netzwerkverbindungen ermöglicht.

Optionen[Bearbeiten | Quelltext bearbeiten]

Option Beschreibung
-h Hilfe
-i SEK Anzahl Sekunden für die Verzögerung beim Senden von Zeilen oder beim Port-Scannen
-k setzt das Passwort/Key für die Verbindung (Default = metallica). Dieser Standardchlüssel metallica sollte unbedingt mit der Option -k verändert )neu gesetzt) werden, da sonst jeder der den Defaultschlüssel kennt, die Verbindung entschlüsseln kann.
-l wartet (lauscht) auf eingehende Verbindungen (Serverseite)
-n akzeptiert nur numerische IP-Adressen, keine DNS
-o DATEI schreibt einen Hexdump des Datenverkehrs nach DATEI. Kann u.a. zur Fehleranalyse benutzt werden
-p PORT Nummer des Ports, der benutzt wird (für Ports < 1024 benötigt man Root-Rechte)
-r zufällige Auswahl des lokalen und entfernten Ports
-s ADRESSE lokale Adresse der Quelle
-u UDP Modus (schneller als TCP, es findet aber keine Kontrolle statt, ob die übertragenen Daten auch korrekt ankommen)
-v ausführliche Meldungen, kann mehrmals wiederholt werden um ausführlichere Meldungen zu erhalten (nützlich zur Fehlersuche)
-w SEKUNDEN wartet Anzahl Sekunden bis die Verbindung aufgegeben wird (Timeout)
-z Portscanner-Modus (zero-I/O mode), es wird nur nach lauschenden Diensten gescannt ohne Daten zu schicken

Verwendung[Bearbeiten | Quelltext bearbeiten]

Cryptcat arbeitet nach dem Client-Server-Prinzip, das heisst es muss auf beiden Rechnern laufen, damit man damit arbeiten kann. Man sollte es mit der Option -k PASSWORT starten, da sonst das fest eingebaute Passwort metallica benutzt wird. In den Beispielen lasse ich diese Option der Einfachheit halber aber immer weg. Zuerst startet man es auf dem Zielrechner

cryptcat -l PORT

wobei PORT ein geeigneter freier lokaler Port sein muss. So gestartet läuft cryptcat auf dem Server und lauscht dabei auf dem angegebenen Port auf eingehende Verbindungen von der Gegenseite, dem Client. Beim Portscan kann auch ein Bereich angegeben werden, z.B. 1-100

Dann startet man cryptcat auf dem Client:

cryptcat [-u] ZIELRECHNER ZIELPORT
  • ZIELRECHNER = Hostname oder IP-Adresse des Rechners, mit dem man sich verbinden will
  • ZIELPORT = der Port, an dem cryptcat auf der Gegenseite lauscht
  • -u = optionaler Parameter, wenn angegeben benutzt netcat statt TCP das verbindungslose UDP.

Wichtig ist, daß cryptcat auf dem Zielrechner schon laufen muss, sonst bricht cryptcat mit einer Fehlermeldung ab. Deshalb die anfangs etwas merkwürdig anmutende Reihenfolge der Kommandos, bei denen immer zuerst das lauschende cryptcat auf dem Zielrechner gestartet wird und anschliessend erst die Kommandos auf dem Client.

Zum weiteren Verständnis ist unbedingt wichtig zu wissen, daß alle ausgehenden Daten auf dem Client durch die Standardeingabe der Shell (stdin) über das Netzwerk an den Kommunikationspartner geschickt werden und die ankommenden Daten auf dem Server auf der Standardausgabe der Shell (stdout) ausgegeben werden. Dieser Mechanismus hat den Vorteil, daß die zu kopierenden Daten mittels Skripten bei Bedarf auch beliebig verarbeitet werden können.

Hört sich komplizierter an als es ist und wird hoffentlich durch die nacfolgenden kleinen Beispiele klarer.

Dateien kopieren (Dateitransfer)[Bearbeiten | Quelltext bearbeiten]

kopieren von Datei ORIGINAL (vom Client) nach Datei KOPIE (auf dem Server ZIEL)

cryptcat -l -p PORT > KOPIE        # Starten von cryptcat auf Serverseite und umleiten der ankommenden Daten in die Datei KOPIE
cryptcat -w1 ZIEL PORT < ORIGINAL  # cryptcat auf Client schickt die Datei ORIGINAL nach dem Server ZIEL

die Option -w ist nicht unbedingt erforderlich. Wird die Option nicht angegeben, so muss der Befehl auf der Client-Seite mit Strg+C beendet werden. Wurde alles richtig kopiert, so erfolgt Linux-typisch keinerlei Meldung und beide cryptcat beenden ihren Dienst. Auch wenn das Senden nicht funktioniert erhält man nur dann eine Fehlermeldung wenn mindestens die Option -v benutzt wurde. Auf jeden Fall kann man aber den Exitstatus $? abfragen

$?=0  # Erfolg
$?=1  # Fehler

Möchte man mehrere Dateien (z.B. alle Dateien eines Verzeichnisses) kopieren, so kann man sie z.B. mit Hilfe eines Packprogrammes (hier tar) auf dem Client zu einer gepackten Datei zusammenfassen und auf der Serverseite in ähnlicher Seite wieder entpacken:

cryptcat -l -p PORT | tar xv                    # Entpacken der ursprünglichen Verzeichnisstruktur auf dem Zielrechner
tar cf - VERZEICHNIS/ | cryptcat -w1 ZIEL PORT  # Packen von VERZEICHNIS und schicken nach Zielrechner

Anmerkung für alle tar Ent- und Ungewöhnten: vc und vx sind Opionen des tar-Kommandos

  • v = ausführliche Ausgabe (verbose)
  • c = Archiv erstellen (create)
  • x = Archiv entpacken (extract)

cryptcat als einfacher Chatservice[Bearbeiten | Quelltext bearbeiten]

Starte auf dem einen Rechner cryptcat auf einem freien und nicht durch Firewall blockierten PORT:

cryptcat -v -l -p PORT

es sollte folgende Ausgabe kommen:

listening on [any] PORT ...

auf dem anderen Rechner ebenfalls cryptcat auf der gleichen Portnummer starten:

cryptcat IP PORT
  • IP = IP-Adresse oder Hostname der Gegenstelle
  • PORT = gleiche Portnummer wie auf der Gegenstelle

Im Erfolgsfall erscheint auf der Gegenstelle folgende Meldung:

connect to [192.168.178.23] from caia.lokal.com [192.168.178.21] XXXXX

von nun an wird jede Eingabe auf dem einen Rechner als Echo auf dem anderen Rechner angezeigt, so daß man sich gegenseitig unterhalten kann.

Abbruch mit Strg+C

cryptcat als Portscanner[Bearbeiten | Quelltext bearbeiten]

cryptcat kann auch als schneller Portscanner benutzt werden. Die Ergebnisse sind nicht so ausführlich wie bei nmap, reichen aber für einfache Untersuchungen durchaus.

cryptcat -vv -z IP PORT
  • IP = IP-Adresse oder Hostname des zu untersuchenden Rechners
  • PORT = Portnummer, es kann auch ein Bereich angegeben werden: 1-1024

die Meldung "Connection refused", bedeutet, daß der Port geschlossen ist. Geht der Scan sehr langsam voran (Ausgabe "Connection timed out"), so liegt das in den meisten Fällen daran, daß auf dem entfernten Rechner eine Firewall läuft. Wird statt -vv die Option -v benutzt, so werden nur die offenen Ports angezeigt.

Ausgaben umleiten[Bearbeiten | Quelltext bearbeiten]

Zuerst wie üblich auf dem entfernten Rechner einen Port öffnen, auf dem dann die Ausgabe des Clients empfangen wird:

cryptcat -l -p PORT

dann auf dem lokalen Rechner beliebige Kommandos ausführen und deren Ausgabe durch eine Pipe an cryptcat weiterleiten. cryptcat schickt diese Ausgabe dann an den entfernten Rechnern

ls -l | cryptcat -v -w1 ZIEL PORT

In diesem einfachen Beispiel erscheint auf dem Zielrechner das Inhaltsverzeichnis des lokalen Rechners.

Weblink[Bearbeiten | Quelltext bearbeiten]

Homepage von cryptcat