ArtigosOffensive

Metasploit Framework de cabo a rabo – Parte 2

Fala galera! No post de hoje, dando continuidade a série Metasploit, iremos entrar na parte mais prática da coisa, onde iremos aprender sobre a integração do MSF com o banco de dados, importação de scanning de rede e exemplos de módulos de coleta de informação. Pessoal quero lembrar que os comentários sempre são bem vindos, o feedback de vocês ajuda muito no nosso trabalho 😉

Caso você ainda não tenha visto os outros posts da série Metasploit, recomendo fortemente a leitura antes de continuar aqui. Já falei um pouco sobre a história do Metasploit, terminologias, interfaces, arquitetura e utilitários. Para checar acesse:

Metasploit Framework de cabo a rabo – Parte 1

Trabalhando com Database

Durante um pentest nós temos que lidar com dezenas ou até centenas de hosts, cada um com seu sistema operacional, seus serviços, portas e versões. Por isso é importante se manter um registro de todas essas informações que vamos obtendo durante o pentest. Para nos ajudar nessa tarefa o Metasploit trabalha em conjundo com diversos bancos de dados, no caso do Kali o padrão é o PostgreeSQL, por isso será ele que iremos abordar aqui. Antes de mais nada precisamos iniciar o banco:

# systemctl start postgresql

Depois nós precisamos criar e inicializar o banco, como nos estamos utilizando o Kali esse processo é ridicularmente simples, basta utilizar o comando abaixo para concluir essa tarefa:

# msfdb init

Creating database user 'msf'
Enter password for new role: 
Enter it again: 
Creating databases 'msf' and 'msf_test'
Creating configuration file in /usr/share/metasploit-framework/config/database.yml
Creating initial database schema

Depois nos precisamos checar se o Metasploit conseguiu se conectar com o banco corretamente, para isso acesse a interface msfconsole e execute o comando db_status, caso esteja tudo funcionando você deverá receber a mensagem abaixo:

# msfconsole
msf > db_status 
[*] postgresql connected to msf

Agora que o Metasploit já está conectado com o banco e somos capazes de salvar nossas atividades iremos começar a organizar as Workspace, essa funcionalidade nos dá a capacidade de salvar nossos trabalhos de forma organizada. Imagine que uma workspace é uma pasta, assim podemos criar diferentes pastas para atividades específicas. O comando “workspace” serve para mostrar as workspaces existentes, se você rodar o comando só existirá uma instância:

msf > workspace
* default

Para criar novas workspaces basta utilizar o parâmetro -a do comando como é mostrado abaixo:

msf > workspace -a guiadoti
[*] Added workspace: guiadoti

Para mudar de workspace basta rodar o comando “workspace” seguido no nome da instância desejada, como é mostrado abaixo:

msf > workspace irlanda
[*] Workspace: irlanda
msf > workspace
 default
* irlanda
 guiadoti
 brasil

Para ver todos os parâmetros disponíveis do comando basta executar:

msf > workspace -h
Nmap vs Metasploit

Agora que nós já aprendemos o que são as workspaces, precisamos adicionar as informações necessárias, ou seja, popular a base. Nos temos algumas maneiras de fazer isso, uma delas é importando os resultados dos scans feito com Nmap por exemplo. O Nmap permite exportar os resultados em formato XML, e é justamente esse formato que nós iremos utilizar. Para exportar a saída de um scan em xml basta utilizar o parâmetro -oX como é mostrado abaixo:

# nmap -sS -sV 10.0.0.0/24 -oX subnet_10.0.0.0_24

Pessoal eu não vou ficar me aprofundando no Nmap nesse post pois não é o foco, mas caso queira aprender mais basta acessar o manual da ferramenta no site oficial. Eu ainda pretendo fazer uma série de posts sobre o Nmap aqui no site 😉

Depois de gerar o arquivo xml temos que importá-lo para o Metasploit, nós fazemos isso através do comando “db_import”. Depois de importar o arquivo podemos analisar o resultado com os comandos “hosts” e “services”.

msf > db_import subnet_10.0.0.0_24
[*] Importing 'Nmap XML' data
[*] Import: Parsing with 'Nokogiri v1.8.1'
[*] Importing host 10.0.0.30
[*] Importing host 10.0.0.55
[*] Importing host 10.0.0.85
[*] Importing host 10.0.0.99
[*] Successfully imported /root/subnet_10.0.0.0_24

Outra maneira de popular a base é fazendo o scan diretamento do msfconsole através do comando “db_nmap”, assim o resultado do scan é salvo automaticamente na base. O comando funciona da mesma maneira que o Nmap através da linha de comando, você não perde nada fazendo isso, pelo contrário, só ganha tempo 🙂


Dentro da área de TI o backup é um item de extrema importancia, e para o trabalho de um pentester não é diferente, é muito importante fazer o backup dos dados. O Metasploit permite que façamos o backup de todos os dados de maneira simples e rápida exportando tudo em um arquivo xml através do comando “db_export”.

msf > db_export -f xml /root/guiadoti/pentest_XPTO.xml
[*] Starting export of workspace msfu to /root/guiadoti/pentest_XPTO.xml [ xml ]...
[*] >> Starting export of report
[*] >> Starting export of hosts
[*] >> Starting export of events
[*] >> Starting export of services
[*] >> Starting export of credentials
[*] >> Starting export of web sites
[*] >> Starting export of web pages
[*] >> Starting export of web forms
[*] >> Starting export of web vulns
[*] >> Finished export of report
[*] Finished export of workspace msfu to /root/guiadoti/pentest_XPTO.xml [ xml ]...

Muitos comandos são disponibilizados para realizar uma busca por uma informação específica armazenada no nosso banco de dados como nomes de hosts, endereços IP e MAC, serviços descobertos e etc. Nós podemos até utilizar esses dados como input nas configurações dos módulos de exploits, como é o caso do campo RHOSTS por exemplo. O comando “hosts” é mais utilizado para checar os dados presentes na nossa base, porém ele tem uma série de parâmetros que podem ser utilizados em conjunto. Eu vou citar somente alguns exemplos aqui, mas você pode checar a lista de opções disponíveis utilizando o parâmetro “-h”. Para limitar a quantidade de informações exibidas de acordo com as colunas desejadas, devemos utilizar a opção “-c”:

msf > hosts -c address,os_name, os_flavor

A opção “-S” faz uma busca pelas strings desejadas:

msf > hosts -c address,os_name,os_flavor -S Windows

Uma outra maneira de manipular os dados da base é através do comando “services” que também vimos um exemplo a pouco. Assim como o comando “hosts” ele vai exibir os dados da nossa base, a diferença é que ele é exclusivo para os dados de serviços dos hosts. O comando “services” também conta com uma série de parâmetros que podem ser utilizados, assim como o “hosts”, a maioria dessas opções são semelhantes. Para acessar a lista das opções disponíveis utilize o parâmetro “-h”. Caso você deseje filtrar o resultado por serviço, você deve utilizar a opção “-s”:

Caso você deseje usar a saída do comando como input para algum módulo de exploit basta utilizar o parâmetro “-R”. No exemplo abaixo irei utilizar o módulo de SMB Scanning, esse módulo serve para verificar a versão do sistema operacional, nome do host e outras informações.

O último comando de manipulação dos dados que quero mostrar pra vocês é o “creds”,  ele é usado para gerenciar as credenciais encontradas e utilizadas durante nossas atividades, se você rodar o comando sem nenhum parâmetro você irá ver todas as credenciais já encontradas:


Caso você obtenha alguma credencial utilizando uma outra ferramenta ou de qualquer outro modo você pode adicionar a credencial manualmente, abaixo é mostrado um exemplo:

msf > creds -a 10.0.0.55 -p 445 -u Administrator -P 7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e:::
Scanning com Metasploit

Além da possibilidade de usar scan de terceiros, o Metasploit também oferece alguns scans que podem ser utilizados. Vou utilizar como exemplo aqui o syn scan do Metasploit, mas caso você queira dar uma olhada nos outros scans é só rodar o comando abaixo:

msf > search portscan

Na imagem acima podemos ver que as portas 135, 139 e 445 do host 10.0.0.202 estão abertas, em seguida poderíamos utilizar o módulo smb_version para obter mais informações como foi feito anteriormente.

MS SQL

O primeiro serviço que vamos fazer o footprint é o SQL, hoje em dia é praticamente impossível não achar ao menos uma intância SQL em uma rede durante um pentest. Em muitas ocasiões os adminsitradores da rede nem sabem que existe um serviço SQL rodando em um servidor da rede, muitas das vezes algum usuário instalou por ser pré requisito de algum outro software e isso acaba abrindo uma brecha.

Quando um MS_SQL é instalado ele usa por padrão a porta TCP 1433, durante a execução dos nossos scans anteriormente nos identificamos uma instância SQL. Agora nos iremos utilizar o módulo mssql_ping para coletar mais informações sobre esse serviço:

Nós podemos ainda tentar um brute force com credenciais padrão para tentar ter acesso a base, nos podemos utizar o módulo mssql_login para nos auxiliar nessa tarefa:

Uma vez que sabemos a senha podemos tentar executar comandos através do serviço do MSSQL caso ele tenha a permissão necessária pra isso, é mais um exemplo de vulnerabilidade de misconfiguration. O módulo mssql_exec irá nos auxiliar com essa tarefa. No exemplo aqui eu irei criar um novo usuário e adicioná-lo nos grupos necessários, depois de executar os comandos basta logar com o usuário criado através do utilitário remote desktop:

SNMP

Outro protocolo que é muito importante na fase de coleta de informação é o SNMP (Simple Network Management Protocol). O SNMP é tipicamente usado em dispositivos de rede para reportar informações como consumo de banda, recursos, estatísticas e etc. No entanto, alguns sistemas operacionais possuem o serviço de SNMP para gerenciamento remoto de CPU, memória, processos e etc. Toda essa conveniencia dos administradores pode se tornar uma mina de ouro para o atacante. Na maioria das vezes conseguimos informações importantes e em alguns casos conseguimos até comprometer o dispositivo.

Por exemplo, caso se obtenha uma community read/write em um roteador Cisco, você pode fazer o download de todas as configurações, alterar e fazer o upload de volta. No caso de sistemas Windows configurados com o protocolo SNMP, frequentemente se obtêm informações de patchs, serviços, nomes de usuários, processos, compartilhamentos e muito mais.

O primeiro passo quando se encontra um serviço SNMP é descobrir sua community, essa informação é uma espécie de senha utilizada pelo protocolo. Depois de descobrir essa informação podemos partir para o processo de enumerção de todas as informações que o protocolo pode nos fornecer. As versões 1 e 2 do protocolo SNMP são vulneráveis, o SNMP v3 trás uma série de melhorias além de passar a ser criptografado. Para tentar descobrir a community que está sendo utilizada iremos utilizar o módulo snmp_login:

Agora que descobrimos a community do nosso alvo é “system” com o nível de acesso read/write iremos utilizar o módulo snmp_enum para listar todas as informações disponíveis:

Bem pessoal é isso ai, espero que tenham curtido. No próximo post da série iremos ver a parte de scanner de vulnerabilidade, comandos de manipulação de módulos e muito mais. Não preciso dizer que esse post tem fins educacionais apenas, não utilize esse conhecimento para fins maliciosos. Não esqueçam de curtir nossas páginas nas redes sociais, FacebookG+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.

Referências
Book: Metasploit - The Penetration Tester's Guide
https://metasploit.help.rapid7.com/docs
https://www.offensive-security.com/metasploit-unleashed/
Ricardo Galossi
Siga me
Últimos posts por Ricardo Galossi (exibir todos)

Ricardo Galossi

É um apaixonado por segurança da informação, atua profissionalmente há mais de 7 anos na área de tecnologia da informação, onde é focado em análise de vulnerabilidades e testes de invasão. Criou o blog Guia do TI para compartilhar conhecimento, ajudar os mais novos, incentivar debates e manter a comunidade atualizada com as principais notícias da área de TI.

2 thoughts on “Metasploit Framework de cabo a rabo – Parte 2

  • Ícaro

    Olá, estou acompanhando estes artigos. Gostaria de lhe parabenizar pelo conteúdo, estou adorando.

    Resposta
  • Carlos

    Olá, depois que o brutal force achar os hosts com o usuário e senha certo dá para listar do banco com IP ,user e passwd ?

    Resposta

Deixe seu comentário