Introdução
No mundo dos testes de penetração com o Metasploit Framework, um payload é o código que é executado no sistema alvo após uma vulnerabilidade ter sido explorada com sucesso. Compreender os diferentes tipos de payloads é crucial para um engajamento bem-sucedido. As duas categorias principais de payloads são "staged" (em estágios) e "stageless" (sem estágios).
Um payload staged é enviado em duas partes: um pequeno "stager" inicial e um "stage" final maior. A função do stager é estabelecer uma conexão de volta com a máquina do atacante e, em seguida, baixar o restante do payload. Um payload stageless, por outro lado, é um pacote único e autônomo que inclui todo o código necessário para ser executado no alvo.
Neste laboratório, você terá experiência prática com ambos os tipos. Você usará o console do Metasploit para selecionar cada tipo de payload, observar suas principais diferenças, particularmente em tamanho, e aprender sobre os prós e contras de usar cada um deles.
Selecione um exploit e um payload staged como windows/meterpreter/reverse_tcp
Nesta etapa, você iniciará o console do Metasploit Framework e selecionará um manipulador de exploit genérico. Em seguida, você o configurará para usar um payload staged comum. Usamos o módulo exploit/multi/handler porque ele é um listener universal, perfeito para demonstrar payloads sem a necessidade de um alvo vulnerável específico.
Primeiro, abra seu terminal e inicie o console do Metasploit. Usaremos a flag -q (quiet) para pular o banner de inicialização.
msfconsole -q
Assim que você vir o prompt do Metasploit (msf6 >), você precisará selecionar o manipulador de exploit.
use exploit/multi/handler
Em seguida, vamos definir o payload. O nome de um payload staged é tipicamente formatado como plataforma/estágio/stager. Por exemplo, windows/meterpreter/reverse_tcp significa que a plataforma é Windows, o payload final (stage) é Meterpreter, e o método de conexão inicial (stager) é um shell TCP reverso.
Defina o payload staged com o seguinte comando:
set payload windows/meterpreter/reverse_tcp
Você verá uma mensagem de confirmação payload => windows/meterpreter/reverse_tcp. Para ter certeza, você pode visualizar a configuração atual.
show options
Você verá o payload listado nas opções. Não precisamos definir LHOST ou LPORT porque não estamos realmente executando o exploit; estamos apenas examinando as propriedades do payload.
msf6 exploit(multi/handler) > show options
Module options (exploit/multi/handler):
Name Current Setting Required Description
---- --------------- -------- -----------
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Wildcard Target
Observe o pequeno tamanho do payload staged
Nesta etapa, você usará o comando info para inspecionar os detalhes do payload staged que você selecionou. O detalhe mais importante a notar é o seu tamanho.
Ainda no console do Metasploit com o payload windows/meterpreter/reverse_tcp selecionado, digite o comando info:
info
O Metasploit exibirá informações detalhadas sobre o payload, incluindo seu nome, plataforma, arquitetura e tamanho. Percorra a saída e encontre a linha "Payload size".
msf6 exploit(multi/handler) > info
Name: Windows Meterpreter, Reverse TCP Stager
Module: payload/windows/meterpreter/reverse_tcp
Platform: Windows
Arch: x86
Needs Admin: No
Total size: 354
Rank: Normal
Provided by:
skape <stephen_fewer@harmonysecurity.com>
sf <stephen_fewer@harmonysecurity.com>
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Description:
Connect back to the attacker and spawn a Meterpreter server (staged).
Listen for a connection from the stager and send the second stage.
Observe que o Total size é muito pequeno (por exemplo, 354 bytes). Esta é a característica principal de um payload staged. Este pequeno pedaço de código, o stager, é projetado apenas para se conectar de volta à sua máquina e baixar o estágio Meterpreter, muito maior. Este pequeno tamanho o torna ideal para se encaixar em restrições de memória apertadas de certos exploits.
Selecione o mesmo exploit e um payload stageless como windows/meterpreter_reverse_tcp
Agora, vamos mudar para um payload stageless para ver a diferença. O nome de um payload stageless é tipicamente formatado como plataforma/tipo_de_payload, usando um underscore _ em vez de uma segunda barra /. Esta convenção de nomenclatura ajuda você a identificá-los rapidamente.
Na mesma sessão do msfconsole, use o comando set payload novamente, mas desta vez para a versão stageless: windows/meterpreter_reverse_tcp.
set payload windows/meterpreter_reverse_tcp
Você verá a confirmação payload => windows/meterpreter_reverse_tcp. Note o underscore no nome. Este único payload contém o servidor Meterpreter completo e a lógica de conexão, tudo em um único pacote.
Vamos verificar as opções novamente para confirmar a mudança.
show options
A saída agora refletirá o payload stageless recém-selecionado.
msf6 exploit(multi/handler) > show options
Module options (exploit/multi/handler):
Name Current Setting Required Description
---- --------------- -------- -----------
Payload options (windows/meterpreter_reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
...
Você agora mudou com sucesso de um payload staged para um stageless.
Observe o tamanho maior do payload stageless
Nesta etapa, você inspecionará o payload stageless que acabou de selecionar e comparará seu tamanho com o payload staged da Etapa 2.
Assim como antes, use o comando info para obter detalhes sobre o payload atual.
info
Examine a saída e localize a linha "Payload size".
msf6 exploit(multi/handler) > info
Name: Windows Meterpreter, Reverse TCP Inline
Module: payload/windows/meterpreter_reverse_tcp
Platform: Windows
Arch: x86
Needs Admin: No
Total size: 999335
Rank: Normal
Provided by:
skape <stephen_fewer@harmonysecurity.com>
sf <stephen_fewer@harmonysecurity.com>
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Description:
Connect back to the attacker and spawn a Meterpreter server (inline).
This payload is a single executable and does not need to download a
second stage.
Como você pode ver, o Total size é dramaticamente maior (por exemplo, 999335 bytes ou quase 1 MB) em comparação com o tamanho de algumas centenas de bytes do payload staged. Isso ocorre porque o payload stageless contém toda a funcionalidade do Meterpreter. Ele não precisa baixar mais nada após a execução.
Agora que você viu a principal diferença, pode sair do console do Metasploit.
exit
Discuta os prós e contras de cada tipo de payload
Nesta etapa final, resumiremos as vantagens e desvantagens dos payloads staged e stageless. Compreender esses trade-offs é fundamental para escolher a ferramenta certa para um cenário específico. Não há comandos para executar nesta etapa; é para compreensão conceitual.
Payloads Staged (por exemplo, windows/meterpreter/reverse_tcp)
Prós:
- Tamanho Pequeno: O stager inicial é muito pequeno. Esta é uma vantagem significativa quando o exploit tem um buffer size ou espaço de memória muito limitado para o payload.
- Discrição (Estágio Inicial): O stager pequeno pode ter menos probabilidade de ser detectado por soluções antivírus simples baseadas em assinatura em comparação com um payload grande e rico em recursos.
Contras:
- Múltiplas Conexões: Eles exigem uma segunda conexão para baixar o estágio principal. Isso gera mais tráfego de rede e oferece outra oportunidade para firewalls, Sistemas de Detecção de Intrusão (IDS) ou administradores de rede detectarem e bloquearem o ataque.
- Menos Estável: A conexão pode ser frágil. Se a conexão cair enquanto o segundo estágio está sendo baixado, o exploit falhará.
- Problemas de Callback: A máquina alvo deve ser capaz de alcançar a máquina do atacante pela rede para baixar o estágio, o que pode ser um problema em redes altamente restritas.
Payloads Stageless (por exemplo, windows/meterpreter_reverse_tcp)
Prós:
- Confiabilidade e Estabilidade: Como tudo está em um único pacote, o payload é mais autônomo e estável. Ele só precisa estabelecer uma conexão, e uma vez que está em execução, não depende de baixar mais componentes.
- Funciona em Ambientes Restritos: Uma vez que o payload é entregue ao alvo, ele pode ser executado sem precisar baixar mais nada, o que é útil se o alvo tiver acesso limitado ou nenhum acesso à internet de saída.
Contras:
- Tamanho Grande: Seu tamanho grande é sua maior desvantagem. Eles podem não caber no espaço de memória permitido por muitos exploits, tornando-os inutilizáveis nesses casos.
- Mais Fácil de Detectar: Um executável grande e único é frequentemente mais fácil para soluções antivírus e de segurança analisarem e sinalizarem como malicioso com base em seu tamanho e assinaturas.
Em resumo, você deve escolher um payload staged ao lidar com exploits que têm restrições de tamanho. Escolha um payload stageless quando a confiabilidade for primordial e o método de exploit puder lidar com um tamanho de payload maior.
Resumo
Neste laboratório, você explorou a diferença fundamental entre payloads staged e stageless dentro do Metasploit Framework.
Você começou iniciando o msfconsole e selecionando um payload staged, windows/meterpreter/reverse_tcp. Você observou seu tamanho muito pequeno, que é projetado para ser um stager leve. Em seguida, você mudou para seu correspondente stageless, windows/meterpreter_reverse_tcp, e notou seu tamanho significativamente maior, pois ele contém todo o payload em um único pacote.
Finalmente, você revisou os prós e contras de cada tipo, aprendendo que a escolha entre eles envolve um trade-off entre tamanho, discrição e confiabilidade. Payloads staged são pequenos, mas requerem uma segunda conexão, enquanto payloads stageless são grandes, mas mais estáveis e autônomos. Esse conhecimento é essencial para tomar decisões eficazes durante os engajamentos de testes de penetração.


