Escolares
🚀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.
🕵️ Análisis de vulnerabilidades
Como primer paso, realizamos una inspección del código. A continuación, encontramos este comentario que decía...

Accedemos a la ruta /profesores.html y observamos un listado de profesores. Lo que llama nuestra atención es Luis, quien se identifica como el administrador de WordPress. A partir de su correo, deducimos que su usuario es luisillo.

El código <link rel='dns-prefetch' href='//escolares.dl' /> indica que el dominio escolares.dl se utiliza en el entorno. Dado que no es un dominio real, necesitamos configurarlo en el DNS local. Para resolver el dominio escolares.dl en nuestro entorno, editamos el archivo /etc/hosts de la siguiente manera:
Y así ya estamos en el login de wordpress
http://escolares.dl/wordpress/wp-login.php
🎯 Explotación
Ahora que hemos identificado un usuario (luisillo), intentaremos un ataque de fuerza bruta utilizando el diccionario de contraseñas rockyou.txt con el siguiente comando:
wpscan --url http://escolares.dl/wordpress/ -U luisillo --passwords /usr/share/wordlists/rockyou.txt
Sin embargo, no se encontró ninguna contraseña válida. Dado que contamos con información adicional sobre Luis (como su fecha de nacimiento, correo electrónico y especialidad), podemos generar un diccionario personalizado basado en estos datos.
Para ello, utilizaremos la herramienta cupp (Common User Passwords Profiler), que permite generar listas de contraseñas personalizadas utilizando datos específicos de una persona, aumentando así las probabilidades de éxito.
Al ejecutar cupp -i, se solicitan varios datos personales de la víctima para crear el diccionario. A continuación, detallamos los datos ingresados y su propósito:
-
First Name (Nombre): Luis
Se utiliza para generar contraseñas relacionadas con el nombre de la víctima. -
Surname (Apellido): luisillo
Se emplea para crear variaciones basadas en el apellido o nombre de usuario de la víctima. -
Nickname (Apodo): admin
Si la víctima utiliza un apodo o alias, este también se incorpora al diccionario para generar más combinaciones. -
Birthdate (Fecha de nacimiento): 09101981
Las fechas de nacimiento son comunes en contraseñas, por lo que se usan para crear variaciones de contraseñas basadas en esta información.
Una vez generado el diccionario de contraseñas personalizado (luis.txt) utilizando CUpp, podemos emplearlo para realizar un ataque de fuerza bruta sobre el usuario luisillo en el sitio web de WordPress. Tras ejecutar el ataque, obtenemos su contraseña.
wpscan --url http://escolares.dl/wordpress/ -U luisillo --passwords luis.txt
La contraseña obtenida es Luis1981, que corresponde a su nombre seguido de su año de nacimiento.

Una vez dentro de WordPress, si tenemos la posibilidad de subir un plugin, crearemos una reverse shell camuflada como un plugin legítimo. Para ello, creamos un archivo PHP que contiene el código de la reverse shell y añadimos un encabezado de comentario al inicio del archivo, de modo que WordPress lo detecte como un plugin válido. Este encabezado incluye detalles como el nombre del plugin, su descripción y versión, permitiendo que el archivo sea reconocido y cargado sin levantar sospechas, mientras ejecuta el código malicioso en segundo plano.

Primero, comprimimos el archivo PHP que contiene la reverse shell en un archivo ZIP utilizando el siguiente comando:
zip pwned.zip pwned.php
Este comando configura Netcat para escuchar en el puerto 443, esperando la conexión de la reverse shell.
Luego, subimos e instalamos el archivo ZIP como un plugin en WordPress a través de la página de instalación de plugins:
nc -lvnp 4443
Luego, subimos e instalamos el archivo ZIP como un plugin en WordPress a través de la página de instalación de plugins:http://escolares.dl/wordpress/wp-admin/plugin-install.php

Una vez instalado el plugin, lo activamos desde el panel de administración de WordPress. Al hacerlo, el código malicioso se ejecuta y establece la conexión inversa hacia nuestra máquina atacante. En ese momento, comenzamos a recibir la shell y obtenemos acceso al servidor comprometido.

Una vez obtenemos la reverse shell, es necesario ajustar algunos parámetros para hacerla más manejable. Esto nos permitirá usar combinaciones de teclas como Ctrl+C sin interrumpir la conexión, y también limpiar la pantalla con Ctrl+L.
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
Vamos a la carpeta /home y encontramos un archivo .txt secreto que contiene la contraseña de luisillo.

Así que cambiamos al usuario luisillo utilizando el siguiente comando:
luisillo
Al ejecutar el comando sudo -l, podemos ver qué comandos el usuario luisillo tiene permiso para ejecutar con privilegios elevados sin necesidad de ingresar una contraseña. El resultado es el siguiente:
sudo -l

Esto indica que el usuario luisillo tiene permiso para ejecutar el comando /usr/bin/awk como root sin necesidad de ingresar una contraseña, debido a la directiva NOPASSWD. Esta configuración puede ser aprovechada para ejecutar comandos arbitrarios como root utilizando awk.
Para encontrar una forma de explotar esta vulnerabilidad, consultamos el sitio web
GTFOBinspara ver cómo podemos usar awk para ejecutar comandos con privilegios elevados. Allí descubrimos que awk puede ejecutar comandos arbitrarios mediante la función system().


Este comando ejecuta awk como root, y dentro del bloque BEGIN invocamos una shell interactiva con /bin/sh. Como resultado, obtenemos una shell con privilegios de root.
