Payload Staged ou Unstaged, qual escolher?
Você já parou para se perguntar por que existem payloads tão parecidos tal como windows/shell_reverse_tcp
e windows/shell/reverse_tcp
? Por que o nc
não abre a sessão com um e não com outro? Em qual deles você precisa usar o exploit/multi/handler
? Imagine o seguinte: você está lá bem feliz montando seu payload, “essa máquina vai ser fácil!”, manda um windows/shell/reverse_tcp
no msfvenom, sobe o payload para o alvo, o nc já está escutando, você roda o seu exploit, a sessão não abre e você fica triste. “Máquinas são temperamentais”, “quando esse não funciona você tenta o outro”, “vai chutando até um funcionar” são coisas que você já deve ter ouvido antes. O que talvez você não saiba é que windows/shell_reverse_tcp
é um payload unstaged e windows/shell/reverse_tcp
é um payload staged. Você também pode notar essa sutil diferença em outros payloads.
Mas o que é um payload staged?
Quando você escolhe esse tipo de payload no msfvenom, o binário gerado vai conter um stager. Stager é um pequeno código que vai estabelecer uma conexão TCP no endereço e porta fornecidos, ler o tamanho restante do payload e reservar um espaço suficiente de memória que possa ser lido, escrito e executável. E então vai ler o restante do payload e escrevê-lo no espaço de memória reservado. Por isso, quando estiver usando um payload staged, você precisa usar o exploit/multi/handler
para pegar o shell (e fazer o envio do restante do payload). O nc
velho de guerra não vai fazer isso por você.
E o que é um payload unstaged?
O payload unstaged é enviado de uma vez só e executado na máquina alvo. Esse é o tipo de payload para o nc
. Se você está habituado em usar o Metasploit provavelmente não esteja fazendo muito uso deles.
Eu gosto do Metasploit e quero continuar usando ele
Por ser um staged handler, o exploit/multi/handler
vai ignorar que o restante do seu payload inicial já foi enviado e enviar o seu próprio stage, gerando mais barulho na rede, o que é bom evitar. No caso do meterpreter você ainda pode dar de cara com um erro SSLError SSL_accept. Então é melhor usar um stageless listener para um unstaged payload.
Mas e qual eu devo escolher?
No final, depende. “Máquinas são temperamentais”, “quando esse não funciona você tenta o outro”, “vai chutando até um funcionar”. Diferentes patches, diferentes anti-vírus, diferentes dlls. Por isso, algumas vezes um pode funcionar e outro não, então é bom sempre saber o que você tem à sua disposição e pode ser usado ou não. Se você quiser procurar mais sobre o assunto, este texto foi inspirado em um guia de como evitar o uso do Metasploit. O blog do Cobalt Strike também já abordou o assunto dos staged payloads e o buffered.io explica melhor a diferença entre staged e stageless handlers.