Write-ups

Resolución del CTF: AllSafe


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.

Identificamos servicios SSH en los puertos 22 y 2222, y un servicio HTTP en el puerto 80.

Enumeración Web

Accedemos al servicio HTTP y detectamos virtual hosting mediante el código fuente.

echo "192.168.0.100 allsafe.thl" | sudo tee -a /etc/hosts

Enumeramos subdominios y descubrimos el subdominio interno.

wfuzz -c -u http://allsafe.thl/ -H "Host: FUZZ.allsafe.thl" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt --hw 560

Añadimos el subdominio descubierto.

echo "192.168.0.100 intranet.allsafe.thl" | sudo tee -a /etc/hosts

Acceso a Intranet

El portal de intranet requiere un ID de empleado y contraseña. Mediante un SSRF en el formulario público obtenemos una contraseña válida.

Credenciales utilizadas:

ID: 0-477-9990
Password: 123456Seven

LaTeX Injection y Lectura Arbitraria de Archivos

Dentro del panel, el generador de contratos utiliza LaTeX y es vulnerable a inclusión arbitraria de archivos.

\\lstinputlisting{/home/parker/.ssh/id_rsa}

Extraemos la clave privada SSH del usuario parker y la reconstruimos eliminando espacios y corrigiendo encabezados.

Acceso SSH al Contenedor

chmod 600 id_rsa
ssh [email protected] -p 2222 -i id_rsa

Accedemos a un contenedor Docker como el usuario parker.

Movimiento Lateral y Escalada en el Contenedor

Encontramos credenciales en el correo local del usuario parker.

cat /var/mail/parker/meeting

Decodificamos la clave hexadecimal.

Accedemos como goddard y revisamos privilegios sudo.

Explotamos make para obtener root dentro del contenedor.

Extracción de Credenciales y Acceso al Host

Localizamos una base de datos Password Safe.

Obtenemos credenciales del usuario cisco y accedemos por SSH al host.

Servicio Interno Node.js

Detectamos un servicio Node.js escuchando en localhost:3000.

Revisamos logs accesibles y obtenemos credenciales válidas.

Node.js Deserialization RCE

El servicio deserializa directamente una cookie Base64. Inyectamos una función IIFE para ejecución remota de comandos.

Codificamos el payload y lo inyectamos en la cookie de sesión, forzando la reconexión del socket.

Recibimos una shell como root en el host y accedemos a la flag final.


Deja una respuesta

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