Intentions

Detalles
- IP Address: 10.10.11.220
- Sistema Operativo: Linux
- Dificultad: Hard
- Autor: AETH3RON
Resumen
Intentions es una máquina Linux de dificultad Hard centrada en encadenar vulnerabilidades web. El acceso inicial se obtiene mediante una inyección SQL en la API para eludir la autenticación, lo que lleva a la Ejecución Remota de Código a través de un exploit de PHP ImageMagick. Tras ganar acceso, nos movemos lateralmente recuperando credenciales de un repositorio Git. La escalada de privilegios se logra abusando de un binario personalizado con la capacidad cap_dac_read_search para realizar un ataque de canal lateral y extraer la clave SSH de root.
Enumeración
Nmap
Comenzamos escaneando el objetivo en busca de puertos abiertos y servicios.
nmap -Pn -sS -sV -p- 10.10.11.220 -oN nmap-basic

Realizamos un escaneo dirigido sobre los puertos descubiertos para obtener más detalles.
nmap -Pn -sS -sC -p22,80 10.10.11.220 -oN nmap-common

Los escaneos confirman dos servicios expuestos:
- 22/tcp: SSH (OpenSSH)
- 80/tcp: HTTP (nginx)
Enumeración Web
Visitando la aplicación web en el puerto 80, encontramos una plataforma estilo galería.
Para interactuar con toda la funcionalidad de la aplicación, registramos una nueva cuenta e iniciamos sesión exitosamente.


Dentro del panel de usuario, la configuración del perfil nos permite actualizar los géneros favoritos. Interceptamos esta interacción con Burp Suite para analizar la comunicación con el backend.

Observamos que la aplicación usa una API de backend. Dos peticiones destacan como vectores potenciales de inyección:
POST /api/v1/gallery/user/genres(Actualiza preferencias de usuario)GET /api/v1/gallery/user/feed(Obtiene datos basados en preferencias)

Análisis de API e Inyección SQL
Sospechamos que los inputs de estas peticiones podrían estar interactuando directamente con la base de datos. Guardamos las peticiones GET y POST en archivos para automatizar las pruebas.
Configuramos SQLMap para inyectar en la petición POST usando la GET como comprobación de segundo orden (--second-req), ya que los resultados de la inyección probablemente se reflejan en el feed.
sqlmap -r post_genres.req --second-req get_feed.req -p genres --level 5 --risk 3

SQLMap confirma que el parámetro genres es vulnerable a una inyección SQL de tipo UNION.
Enumeración de Base de Datos
Con la inyección confirmada, procedemos a enumerar las tablas de la base de datos.

La tabla users parece la más relevante. Volcamos su contenido para recuperar credenciales.

Recuperamos exitosamente los hashes de los usuarios steve y greg. Sin embargo, las contraseñas están hasheadas con bcrypt, haciendo inviable el cracking offline. Necesitamos una forma alternativa de usar estas credenciales.
Bypass de Versión de API
Durante la enumeración adicional de la estructura de la API, descubrimos una estructura de endpoint v2. Enviando una petición POST vacía al endpoint de login v2 confirmamos que está activo:

Esto sugiere que la aplicación tiene una segunda versión de API que podría manejar la autenticación de manera diferente.
Bypass de Autenticación vía Manipulación de API
Intentamos un ataque de Bypass de Autenticación (Pass-the-Hash). Capturamos una petición de login legítima para el admin steve y la modificamos:
- Cambiamos el path de
/api/v1/a/api/v2/. - Reemplazamos la contraseña en texto plano con el hash bcrypt volcado anteriormente.

El servidor acepta el hash como contraseña válida, concediéndonos acceso a la aplicación como administrador steve.
Acceso Inicial
Como administrador, accedemos al panel /admin.

Explorando las funciones de admin, encontramos una sección de Imagen que permite edición y efectos.

Observamos que la aplicación pasa rutas absolutas de archivos al backend para procesamiento. Un post de noticias en el sitio hace referencia a “PHP Imagick constructors”, insinuando una vulnerabilidad conocida en la clase Imagick de PHP que permite RCE mediante archivos MSL maliciosos.

Creación del Payload Imagick
Creamos un archivo MSL malicioso llamado payload.msl. Este payload usa el esquema caption: para ejecutar código PHP y el esquema info: para escribir la salida en un directorio accesible por web.
Explotación
Para disparar la vulnerabilidad, debemos subir este archivo vía el endpoint de modificación de imágenes. Extraemos la petición legítima de las herramientas de desarrollador del navegador y la convertimos a un comando curl, inyectando nuestros esquemas maliciosos.

El servidor procesa el archivo MSL y escribe nuestra webshell en el directorio storage. Verificamos la ejecución ejecutando ls desde el navegador:


Reverse Shell
Con la ejecución de código confirmada, servimos un script de bash reverse shell desde nuestra máquina atacante y lo ejecutamos en el objetivo para obtener una sesión interactiva.

Capturamos la shell en nuestro listener, obteniendo acceso como www-data.

Movimiento Lateral
Ahora estamos dentro como el usuario www-data. Enumerando el directorio web, identificamos un directorio .git, indicando que la aplicación tiene control de versiones.

Intentamos leer los logs de git, pero la operación falla porque el repositorio es propiedad de root, activando la protección de directorio seguro de Git.
Para bypassear esto (CVE-2022-24765), podemos sobreescribir la variable HOME a un directorio que controlemos (como /tmp) y añadir el repositorio a la lista segura en un config global temporal.


Escaneando el historial de commits se revelan credenciales de desarrollador hardcodeadas en un commit anterior. Usamos estas credenciales para SSH a la máquina como el usuario greg.

Escalada de Privilegios
Como greg, exploramos el directorio home y encontramos un sistema de escáner de derechos de autor que consiste en un script (dmca_check.sh) y un binario (/opt/scanner/scanner).
El escáner compara archivos en /home/legal/uploads contra una lista de hashes en dmca_hashes.test. Aunque no podemos leer el directorio uploads directamente debido a los permisos, el binario del escáner sí puede.
Comprobamos las capacidades del binario:
getcap /opt/scanner/scanner

El binario tiene cap_dac_read_search establecido. Esta poderosa capacidad permite al proceso eludir las comprobaciones de permisos de lectura de archivos y directorios. Efectivamente, este binario puede leer cualquier archivo del sistema, incluido /root.
El Ataque de Canal Lateral
El escáner acepta un argumento -l, que define la longitud del contenido del archivo a hashear (p.ej., hashear solo los primeros 5 bytes). También nos dice si se encuentra una coincidencia con nuestra lista de hashes proporcionada.
Esto crea un oráculo de canal lateral. Podemos:
- Apuntar a un archivo sensible (p.ej.,
/root/.ssh/id_rsa). - Generar hashes MD5 para cada carácter posible (A, B, C…).
- Pedirle al escáner que compruebe solo el 1er byte del archivo objetivo contra nuestra lista.
- Cuando el escáner reporta una coincidencia, sabemos el primer carácter.
- Repetir para el 2do byte, 3er byte, y así sucesivamente.
Automatizamos esta extracción usando un script Python.

Ejecutar el script extrae exitosamente la clave SSH privada del usuario root.
Guardamos la clave recuperada, establecemos los permisos correctos e iniciamos sesión como root.

Impacto de Negocio
Esta cadena de ataque demuestra un compromiso multi-etapa sofisticado que comienza desde una vulnerabilidad web común. La inyección SQL que permite el bypass de autenticación API ilustra cómo un único fallo de validación de entrada puede socavar un sistema de autenticación completo. La posterior explotación de PHP Imagick para ejecución remota de código resalta el riesgo de bibliotecas de procesamiento de imágenes que soportan formatos de archivo peligrosos. El movimiento lateral mediante credenciales hardcodeadas en Git expone prácticas deficientes de gestión de secretos, mientras que el ataque de canal lateral final usando capabilities de archivos Linux revela cómo los controles de privilegios granulares pueden ser abusados para extraer datos sensibles — incluyendo claves SSH — sin activar alertas tradicionales de acceso a archivos.
Referencias
- Arbitrary Object Instantiations in PHP (PT Security):
- Git Safe Directory (CVE-2022-24765):
- Linux Capabilities (CAP_DAC_READ_SEARCH):
Nuevos archivos recuperados, directos a tu bandeja. Sin ruido.