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:

📌 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

🕵️ Análisis de vulnerabilidades

Como primer paso, realizamos una inspección del código. A continuación, encontramos este comentario que decía...
Pasted image 20241128112934.png
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.
Pasted image 20241128120453.png

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:

  1. First Name (Nombre): Luis
    Se utiliza para generar contraseñas relacionadas con el nombre de la víctima.

  2. Surname (Apellido): luisillo
    Se emplea para crear variaciones basadas en el apellido o nombre de usuario de la víctima.

  3. Nickname (Apodo): admin
    Si la víctima utiliza un apodo o alias, este también se incorpora al diccionario para generar más combinaciones.

  4. 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.

Pasted image 20241128115129.png
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.
Pasted image 20241128115337.png
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
Pasted image 20241128115644.png

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.
Pasted image 20241128115722.png
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.
Pasted image 20241128115838.png
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

Pasted image 20241128120118.png

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().
Pasted image 20241128120301.png
Pasted image 20241124171415.png
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.

¡Ya somos root!

Pasted image 20241128120424.png