Imagen del post

Resumen

Objetivo: explotar un servicio web en el puerto 80 que permite subir y servir imágenes, y usarlo para conseguir ejecución de código. Tras enumerar subdominios/vhosts se identifica un panel relacionado con CrushFTP. Se utiliza un exploit público de la CVE-2025-31161 para acceder al panel, enumerar usuarios y finalmente obtener acceso interactivo. Después se exploran rutas alternativas de acceso (cambio de contraseña de un usuario) y se prepara la escalada a través de un servicio SSH interno expuesto en el puerto 2222.


Puerto 80: primera observación

Imagen del post

Se trata de una app de citas. La funcionalidad de subida de fotos sugiere una posible vulnerabilidad de file upload.

El endpoint donde se guardan/gestionan las imágenes:

Imagen del post

La idea es encontrar una forma de subir contenido malicioso que termine ejecutándose en el servidor.

Imagen del post

Imagen del post

Se observa que el endpoint cambia los últimos 3 dígitos, lo que parece relevante para activar o localizar la shell.


Enumeración: subdominios y vhosts

Se realizan descubrimientos de subdominios y vhosts.

Imagen del post

Aparece un panel y se obtiene información del servicio: CrushFTP.

Imagen del post

Exploit utilizado:

https://github.com/Immersive-Labs-Sec/CVE-2025-31161/blob/main/cve-2025-31161.py


¿Cómo funciona técnicamente? (CVE-2025-31161)

  1. Proceso de autenticación (race condition): el servidor CrushFTP emplea el método AWS4-HMAC-SHA256 (compatible S3) para autorizar peticiones.
  2. Al recibir una autenticación, primero verifica la existencia del usuario (p. ej. login_user_pass()) sin exigir contraseña, lo que durante un lapso breve deja la sesión en un estado “válido”.
  3. Si durante ese lapso se envía un header Authorization malformado (por ejemplo, con solo el nombre de usuario y una /, como AWS4-HMAC-SHA256 Credential=crushadmin/), se puede provocar un error que evita que la sesión se cierre y mantiene la autenticación sin validación.
  4. Con ello, se puede actuar como un usuario conocido (especialmente crushadmin, por ser cuenta por defecto) y obtener control del servidor.

Imagen del post

Imagen del post


Acceso al panel

Estamos dentro.

Imagen del post

Enumeración de usuarios disponibles:

Imagen del post


Web shell a través de la foto de perfil

Desde un usuario con permisos administrativos, se renombra la foto de perfil para intentar obtener una web shell.

Imagen del post

Imagen del post

Comprobación:

/etc/passwd

Imagen del post


Shell y credenciales encontradas

Se obtiene una shell.

Imagen del post

Revisión de configuración:

config

Imagen del post

Credencial observada:

Crush4dmin990

Imagen del post


Vía alternativa: acceso como otro usuario

Otra manera de acceder: se cambia la contraseña de ben y se entra como ese usuario para subir una shell.

Imagen del post


Escalada: servicio interno SSH (Erlang 5.2.9)

Se detecta un servicio SSH interno en el puerto 2222.

Imagen del post

link_preview

Se modifica el exploit, ya que nc no funciona bien en este contexto.

Imagen del post

Ejecución / resultados:

Imagen del post

Imagen del post