Desenvolver um Scanner Metasploit no Nmap

NmapBeginner
Pratique Agora

Introdução

Neste laboratório, revisitaremos a estrutura modular e a análise funcional do Metasploit, e então focaremos na introdução de scanners. Você aprenderá como desenvolver seu próprio scanner para o Metasploit.

Este laboratório é um tutorial prático. Para ajudá-lo a entender algumas operações, incluiremos alguma teoria de segurança da informação e recomendaremos artigos valiosos para você ler, permitindo que você solidifique sua base teórica enquanto pratica.

Revisar a Estrutura do Metasploit e Criar o Arquivo simple_tcp.rb

Primeiramente, vamos revisar a estrutura do Metasploit.

O Metasploit é projetado com um conceito modular para melhorar a eficiência da reutilização de código. O framework é desenvolvido em Ruby e inclui componentes escritos em Perl, C, Assembly e Python. Ele é projetado principalmente para sistemas operacionais Linux, portanto, sua estrutura de comandos é muito semelhante a um shell de comando Linux. No entanto, agora ele suporta todos os principais sistemas operacionais, como Windows, Solaris e Mac.

+---------------+------------------+----------------------------------------------+
| Nome em Inglês | Nome do Módulo   | Descrição                                  |
+---------------+------------------+----------------------------------------------+
| `Aux`         | Módulo Auxiliar  | Fornece uma variedade de módulos auxiliares  |
|               |                  | para coleta de informações durante a         |
|               |                  | penetração, incluindo a varredura e a        |
|               |                  | identificação de serviços de rede, a         |
|               |                  | construção de serviços falsos para coletar   |
|               |                  | credenciais de login, adivinhação de        |
|               |                  | senhas, etc.                                 |
+---------------+------------------+----------------------------------------------+
| `Exploits`    | Módulo de Exploit | Componentes de código que exploram         |
|               |                  | vulnerabilidades de segurança ou falhas de   |
|               |                  | configuração descobertas para atacar sistemas |
|               |                  | alvo remotos, plantar e executar payloads e  |
|               |                  | obter controle de acesso sobre os sistemas   |
|               |                  | alvo.                                        |
+---------------+------------------+----------------------------------------------+
| `Post`        | Pós-Exploração   | Suporta várias ações de pós-exploração no    |
|               | Módulo           | sistema controlado após obter controle de    |
|               |                  | acesso remoto por meio da exploração, como   |
|               |                  | obter informações confidenciais, fazer       |
|               |                  | pivoting adicional e lançar ataques de pivot. |
+---------------+------------------+----------------------------------------------+
| `Payloads`    | Módulo de Payload | Payloads são segmentos de código que são    |
|               |                  | executados no sistema alvo após uma          |
|               |                  | exploração bem-sucedida, normalmente para    |
|               |                  | abrir uma conexão de sessão de controle para |
|               |                  | o atacante.                                  |
+---------------+------------------+----------------------------------------------+
| `Encoders`    | Módulo Encoder   | Após montar o payload e as instruções NOP   |
|               |                  | em uma sequência de instruções, o Metasploit |
|               |                  | precisa realizar uma etapa de codificação    |
|               |                  | importante antes que o módulo de exploit     |
|               |                  | injete o buffer de dados maliciosos no       |
|               |                  | sistema alvo para execução.                  |
+---------------+------------------+----------------------------------------------+
| `Nops`        | Módulo NOP       | Instruções NOP (No Operation) são           |
|               |                  | operações ou instruções que não têm nenhum   |
|               |                  | efeito substancial no estado de execução do  |
|               |                  | programa.                                    |
+---------------+------------------+----------------------------------------------+

O Metasploit também integra vários componentes de varredura de vulnerabilidades, como:

- Scanner `Nmap`: Adequado para Windows, Linux e Mac OS. Usado para descoberta de hosts, varredura ou enumeração de portas, descoberta de serviços e detecção de sistemas operacionais, endereços de hardware, versões de software e vulnerabilidades.

- Scanner `NeXpose`: Varre a rede para encontrar dispositivos em execução, identificar seus sistemas operacionais e vulnerabilidades de aplicativos, analisar os dados varridos e gerar relatórios de varredura de vulnerabilidades.

- Scanner `Nessus`: Uma das ferramentas de varredura de vulnerabilidades mais amplamente utilizadas. Ele adota um modelo cliente/servidor, com o servidor realizando verificações de segurança e o cliente configurando e gerenciando o servidor. O servidor também usa um sistema de plugin, permitindo que os usuários adicionem plugins para funções específicas e verificações de segurança mais complexas.

Agora, criaremos um novo módulo de scanner do Metasploit chamado `simple_tcp.rb`.

1. Abra um terminal xfce na máquina host LabEx e inicie o alvo Metasploitable2 executando o seguinte comando:

```bash
sudo virsh start Metasploitable2

Aguarde o início da máquina alvo, pode levar de 1 a 3 minutos.

  1. Teste a conectividade com a máquina alvo fazendo ping nela:
ping 192.168.122.102

Pressione Ctrl+C para parar o ping.

  1. Inicie o container Kali Linux e entre no ambiente bash executando:
docker run -ti --network host b5b709a49cd5 bash
  1. Dentro do container Kali, teste a conexão de rede com a máquina alvo:
ping 192.168.122.102

Pressione Ctrl+C para parar o ping.

  1. Em seguida, navegue até o diretório do módulo scanner:
cd /usr/share/metasploit-framework/modules/auxiliary/scanner
  1. Crie um novo arquivo chamado simple_tcp.rb:
sudo vi simple_tcp.rb
  1. Copie e cole o seguinte código no arquivo:
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
    include Msf::Exploit::Remote::Tcp
    include Msf::Auxiliary::Scanner

    def initialize
        super(
            'Name'        => 'Mr_Zhou Scanner',
            'Version'     => '$Revision$',
            'Description' => 'Shiyanlou TCP Scanner',
            'Author'      => 'lucat',
            'License'     => MSF_LICENSE
        )
        register_options(
            [
                Opt::RPORT(12345)
            ], self.class)
    end

    def run_host(ip)
        connect()
        sock.puts('HELLO SERVER')
        data = sock.recv(1024)
        print_status("Received: #{data} from #{ip}")
        disconnect()
    end
end
  1. Este código define um novo módulo do Metasploit chamado "Mr_Zhou Scanner" que varre portas TCP e exibe quaisquer dados recebidos do servidor. Vamos analisar o código:
def initialize
    super(
        'Name'        => 'Mr_Zhou Scanner',
        'Version'     => '$Revision$',
        'Description' => 'Shiyanlou TCP Scanner',
        'Author'      => 'lucat',
        'License'     => MSF_LICENSE
    )

Esta seção define os metadados para o módulo, como seu nome, descrição, autor e licença.

register_options(
    [
        Opt::RPORT(12345)
    ], self.class)

Esta linha registra a opção para varrer a porta 12345.

def run_host(ip)
    connect()
    sock.puts('HELLO SERVER')
    data = sock.recv(1024)
    print_status("Received: #{data} from #{ip}")
    disconnect()
end

Este método é executado para cada endereço IP alvo. Ele se conecta à porta especificada, envia a string "HELLO SERVER", recebe e imprime quaisquer dados do servidor e, em seguida, desconecta.

Salve o arquivo e saia do editor.

Configurar um Servidor de Escuta

Para testar nosso scanner simple_tcp.rb, precisamos configurar um servidor de escuta na máquina alvo.

No host LabEx, abra um novo terminal Xfce e crie um arquivo chamado shiyanlou.txt:

vi shiyanlou.txt

Neste arquivo, insira qualquer texto que você desejar. Este texto será enviado de volta ao scanner quando ele se conectar à porta de escuta. Por exemplo:

Life is short, i use Python.

Salve o arquivo e saia do editor.

Em seguida, inicie um servidor de escuta na porta 12345 (a porta para a qual nosso scanner está configurado) e envie o conteúdo de shiyanlou.txt para quaisquer clientes que se conectarem:

sudo nc -l 12345 < shiyanlou.txt

O servidor agora estará escutando na porta 12345 e aguardando conexões de entrada.

Executar o Scanner simple_tcp

Agora que temos nosso módulo de scanner simple_tcp e um servidor de escuta configurados, vamos executar o scanner e ver se ele funciona.

Primeiro, inicie o console do Metasploit no container Kali Linux:

cd ~
sudo msfconsole

Assim que o console for carregado, use nosso módulo simple_tcp:

use auxiliary/scanner/simple_tcp

Você pode visualizar as informações do módulo com o comando info:

info

Aqui está um exemplo da saída que você pode ver:

Name:          Mr_Zhou Scanner
Description:   Shiyanlou TCP Scanner
Author:        lucat
License:       Metasploit Framework License (BSD)
Version:       $Revision$

Em seguida, defina o endereço IP do host alvo:

set RHOSTS 192.168.122.1

Observação: Use RHOSTS (com um 's'), não RHOST. Você pode verificar qual opção usar com o comando show options.

Finalmente, execute o scanner:

run

Se tudo estiver configurado corretamente, você deverá ver a mensagem do servidor de escuta:

[+] Received: Life is short, i use Python. from 192.168.122.1

Se você não recebeu essa mensagem, volte ao seu servidor de escuta e execute sudo nc -l 12345 < shiyanlou.txt novamente.

Parabéns! Você desenvolveu e testou com sucesso seu próprio módulo de scanner Metasploit.

Pressione Ctrl+D para sair do console do Metasploit e, em seguida, inicie a inspeção

Resumo

Neste laboratório, você aprendeu como desenvolver seu próprio módulo de scanner Metasploit. Você revisou a estrutura do módulo Metasploit, criou um novo módulo de scanner TCP chamado simple_tcp.rb, configurou um servidor de escuta para testar o scanner e executou com sucesso o scanner para receber e exibir dados do servidor.

Esta experiência prática com o desenvolvimento de um scanner Metasploit o ajudará a entender melhor as capacidades do framework e como estendê-lo com módulos personalizados. Você pode usar esse conhecimento para criar scanners mais avançados ou outros tipos de módulos para várias tarefas de teste de penetração.