Skip to content

Devil

This content is not available in your language yet.

Este documento presenta la resolución completa de la máquina Devil, desarrollada por kaikoperez para la plataforma DockerLabs, clasificada con una dificultad Media.

El objetivo del laboratorio es comprometer un servidor WordPress vulnerable mediante la identificación de un plugin malicioso expuesto, el abuso de una funcionalidad de subida arbitraria de archivos que permite ejecución remota de comandos, y una posterior escalada de privilegios local basada en binarios mal configurados con privilegios elevados.

La metodología empleada se divide en los siguientes pasos:

  1. Reconocimiento: enumeración del servicio HTTP y análisis de la aplicación web.
  2. Explotación: abuso de un plugin vulnerable para obtener una reverse shell.
  3. Escalada de privilegios: abuso de binarios locales inseguros hasta obtener acceso como root.

El laboratorio se realizó íntegramente dentro del entorno controlado proporcionado por DockerLabs, con fines exclusivamente educativos.


AtributoValor
NombreDevil
Autorkaikoperez
DificultadMedio
Fecha12/05/2024
PlataformaDockerLabs
IP Objetivo172.17.0.2

Se descomprime la máquina y se despliega utilizando el script proporcionado:

Ventana de terminal
unzip Devil.zip
sudo bash auto_deploy.sh Devil.tar

IP asignada

Se organiza el entorno de trabajo:

Ventana de terminal
mkdir -p Devil/{content,exploits,nmap,scripts}
cd Devil

Se realiza un escaneo completo de puertos TCP:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Puertos abiertos identificados:

  • 80/tcp — HTTP

Puertos abiertos


Se realiza fuzzing de rutas y archivos:

Ventana de terminal
feroxbuster -u http://172.17.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \
-x php,html,txt,js -t 100 -C 404

Al acceder a la página principal se observa que el sitio utiliza WordPress:

index

Para una correcta resolución de rutas, se añade el dominio al archivo /etc/hosts:

Ventana de terminal
172.17.0.2 devil.lab

Se realiza un escaneo con wpscan, sin resultados relevantes:

Ventana de terminal
wpscan --url http://devil.lab --detection-mode aggressive -e ap,at,u -t 32

Tras continuar con el fuzzing manual, se identifica el directorio:

/wp-content/plugins/backdoor

Al acceder desde el navegador se observa un formulario de subida de archivos:

backdoor


El plugin backdoor permite subir archivos sin ningún tipo de validación:

  • No restringe extensiones
  • No valida tipo MIME
  • No sanitiza el contenido
  • Guarda los archivos en una ruta accesible desde el navegador

Esto permite subir directamente una web shell en PHP, obteniendo ejecución remota de comandos.

Se inicia un listener:

Ventana de terminal
nc -nlvp 443

Se sube una reverse shell en PHP y se accede al directorio:

/wp-content/plugins/backdoor/uploads

uploads

Al ejecutar el archivo subido, se obtiene una conexión como www-data:

reverse shell


Se enumeran los directorios de /home y se observa acceso al directorio del usuario andy. Dentro de este se identifica el binario:

/home/andy/.secret/ftpserver

Al ejecutarlo, el binario cambia el contexto de usuario y proporciona una shell como lucas:

ftpserver

Esto indica un binario mal configurado con privilegios elevados.


Dentro del directorio /home/lucas/.game se encuentran dos archivos:

  • game.c
  • EligeOMuere (binario compilado)

El código fuente revela el problema:

game.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int guess;
int secret_number = 7; // Número secreto para ganar
printf("¡Bienvenido al juego de adivinanzas!\n");
printf("Adivina el número secreto (entre 1 y 10): ");
scanf("%d", &guess);
if (guess == secret_number) {
printf("¡Felicidades! Has adivinado el número.\n");
printf("Iniciando shell como root...\n");
// Cambia el UID efectivo a root (0)
setuid(0);
system("/bin/bash");
} else {
printf("Número incorrecto. Intenta de nuevo.\n");
}
return 0;
}

El binario cambia su UID efectivo a root si el usuario introduce el número correcto (7). Esto indica un binario SUID inseguro que permite escalada directa de privilegios.

Se ejecuta el binario:

Ventana de terminal
./EligeOMuere

Se introduce el número 7 y se obtiene una shell como root:

root


VulnerabilidadSeveridadImpacto
Plugin WordPress con subida arbitraria de archivosCríticaEjecución remota de comandos
Falta de validación de archivos subidosCríticaCompromiso total del servidor
Binarios locales con privilegios elevadosAltaEscalada de privilegios
Uso inseguro de setuid(0)CríticaAcceso directo a root

  • Eliminar plugins innecesarios o no confiables.
  • Validar estrictamente la subida de archivos (extensión, MIME, contenido).
  • Evitar binarios con permisos SUID innecesarios.
  • Nunca utilizar setuid(0) sin controles estrictos.
  • Auditar periódicamente permisos y binarios del sistema.