Pilgrimage

Pilgrimage es una máquina Linux de dificultad fácil que presenta una aplicación web con un repositorio Git expuesto. El análisis del sistema de archivos subyacente y el código fuente revela el uso de una versión vulnerable de ImageMagick, que se puede utilizar para leer archivos arbitrarios en el objetivo mediante la incorporación de un fragmento tEXT malicioso en una imagen PNG. La vulnerabilidad se aprovecha para obtener un archivo de base de datos SQLite que contiene una contraseña de texto sin formato que se puede utilizar para acceder a la máquina mediante SSH. La enumeración de los procesos en ejecución revela un script Bash ejecutado por root que llama a una versión vulnerable del binario Binwalk. Al crear otro PNG malicioso, se aprovecha CVE-2022-4510 para obtener la ejecución remota de código (RCE) como root.


Reconnaissance

Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Pilgrimage. Este resultado lo almacenaremos en un archivo llamado allPorts.

A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una página web de Nginx.

Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Añadiremos la siguiente entrada en nuestro archivo /etc/hosts.

Web Enumeration

Realizaremos una comprobación de las tecnologías que utiliza el sitio web.

Accederemos a http://pilgrimage.htb y nos encontraremos con la siguiente página web. Al parecer, esta página web su función es redimensionar imágenes que subamos en la aplicación web.

Al acceder a la opción de Register, comprobamos que podemos registrarnos correctamente.

Volviendo a la página principal, verificamos la opción de subir imágenes. Intentamos subir directamente un archivo PHP, pero se nos indicaba mensaje de error.

Probamos de subir una imagen normal, al darle a la opción de Shrink, se nos proporcionaba un enlace de la imagen redimensionada.

Accederemos al enlace, y comprobaremos que nos muestra la imagen subida redimensionada correctamente.

Downloading Git Folder disclosure (GitHack)

Realizando una enumeración de los directorios y páginas web presentes en la página web, nos encontramos un directorio /.git/.

A través de la herramienta de GitHack, nos descargaremos todo el directorio de /.git/ de la página web.

Accederemos al directorio que se nos ha generado, y comprobaremos la estructura de los archivos que disponemos. Entre ellos, nos encontramos archivos de lo que parece ser la página web.

Verificamos que disponemos de un archivo llamado magick, al revisar el archivo, nos encontramos que se trata del ejecutable.

ImageMagick es un complemento de software para crear, editar, componer o convertir imágenes de mapa de bits. Puede leer y escribir imágenes en varios formatos (más de 200), incluidos PNG, JPEG, JPEG-2000, GIF, TIFF, DPX, EXR, WebP, Postscript, PDF y SVG.

Le daremos permisos de ejecución al binario, y comprobaremos que la versión es la 7.1.0-49.

Este archivo index.php se encarga de procesar imágenes subidas por los usuarios y redimensionarlas utilizando ImageMagick.

Primero, gestiona sesiones con session_start(), verificando si hay un usuario autenticado. Luego, al recibir una solicitud POST, usa la biblioteca bulletproof para manejar la imagen.

  • Restricciones: Solo permite imágenes PNG y JPEG, con tamaños entre 100 bytes y 4 MB.

  • Almacenamiento temporal: Guarda la imagen en /var/www/pilgrimage.htb/tmp/.

  • Procesamiento con ImageMagick: Usa exec() para ejecutar convert, redimensionando la imagen al 50% y almacenándola en /var/www/pilgrimage.htb/shrunk/.

  • Registro en la base de datos: Si el usuario está autenticado, inserta la imagen en una base de datos SQLite ubicada en /var/db/pilgrimage.

  • Mensajes de respuesta: Redirige a la página principal con un mensaje de éxito o fallo.

El siguiente archivo, login.php, gestiona la autenticación de usuarios mediante una base de datos SQLite ubicada en /var/db/pilgrimage.

  • Control de sesión: Si el usuario ya ha iniciado sesión, lo redirige automáticamente a dashboard.php.

  • Manejo de credenciales: Al recibir una solicitud POST, obtiene el username y password del formulario.

  • Consulta en la base de datos: Usa un SELECT para buscar en la tabla users dentro de la base de datos SQLite en /var/db/pilgrimage, verificando si coinciden el usuario y la contraseña.

  • Inicio de sesión: Si las credenciales son válidas, almacena el nombre de usuario en $_SESSION['user'] y redirige a dashboard.php.

  • Manejo de errores: Si la autenticación falla, redirige a login.php con un mensaje de error.

Initial Acces

ImageMagick 7.1.0-49 Exploitation - Arbitrary File Read (CVE-2022-44268)

Sabiendo que la aplicación web al realizar la redimensión de la imagen que le subimos y utiliza ImageMagick para realizar esta conversión, decidimos buscar vulnerabilidades de la versión que nos encontramos del binario que al parecer utiliza.

Realizando una búsqueda por Internet, nos encontramos con el siguiente CVE-2022-44268.

Exploitation with Rust Script

Realizando una búsqueda por Internet de proyectos en dónde se nos muestre cómo explotar dicha vulnerabilidad, nos encontramos con el siguiente repositorio que mediante un script de Rust, podríamos a llegar a realizar la explotación.

Ejecutaremos el proyecto a través de cargo run y le indicaremos el nombre del archivo que queremos leer, en este caso, el archivo es el de /etc/passwd. El propio proyecto ya nos proporciona una imagen de prueba en la cual le inyectaremos la vulnerabilidad.

Revisaremos mediante exiftool la imagen, y comprobaremos que en el Profile se ha incrustado el archivo /etc/passwd. Por lo tanto, si subimos esta imagen maliciosa en la página web y se redimensiona mediante ImageMagick tal y como comprobamos anteriormente, si es vulnerable, posteriormente deberíamos poder listar el contenido del archivo arbitrario indicado.

Por lo tanto, subiremos esta nueva imagen en la página web y le daremos a la opción de Shrink para redimensionar la imagen. Verificamos que se nos proporciona el enlace de la imagen redimensionada.

Nos descargaremos en nuestro equipo la imagen en local.

A través de identify, comprobaremos la información de la imagen, en la cual en el apartado de Raw profile type, se nos muestra un contenido codificado en Hex. Parece ser que la vulnerabilidad está presente en la versión de ImageMagick que realiza la redimensión de la imagen que subimos.

Mediante CyberChef, descodificaremos el contenido indicado y verificaremos el resultado del archivo /etc/passwd del sistema vulnerable.

Por lo tanto, tenemos una vía potencial de realizar un Arbitrary File Read y obtener archivos del sistema objetivo.

Manual Exploitation

Por otro lado, podemos realizar la explotación de esta vulnerabilidad manualmente. En el siguiente repositorio de GitHub, se nos muestra un PoC de cómo realizarlo.

El siguiente procedimiento muestra cómo hemos incrustado el contenido del archivo /etc/hosts dentro de los metadatos de una imagen PNG y luego lo hemos verificado.

Utilizamos pngcrush para agregar el contenido de /etc/hosts en un campo de metadatos tEXt dentro de la imagen image.png. A través de exiv2, verificamos que en los metadatos se ha incrustado correctamente.

Subiremos nuevamente la imagen maliciosa en la aplicación web para que se nos genere el enlace. Una vez generado el enlace, nos descargaremos la imagen redimensionada en nuestro equipo.

Al revisar con identify la imagen descargada, volvemos a verificar que se nos proporcionan datos codificados en Hex en el campo Raw profile type.

Volviendo a descodificar en Hex el contenido recibido, verificamos que hemos podido comprobar el contenido del archivo /etc/hosts.

Automated Exploitation with Python Script

Realizando una búsqueda por Internet, nos encontramos con el siguiente repositorio de GitHub que realiza la explotación de la vulnerabilidad de manera más automatizada.

A continuación, se muestra una simple prueba de cómo poder explotar la vulnerabilidad con el script mencionado.

En nuestro caso, en la imagen image.png que disponemos le indicaremos que el archivo a leer es /etc/group y que nos devuelva el resultado en una imagen llamada gzzcoo.png.

Verificaremos que se ha creado correctamente la imagen maliciosa y que en el campo Profile de los metadatos, está presente el nombre del archivo a querer listar.

Subiremos manualmente la imagen maliciosa en la aplicación web y mediante el siguiente comando, le indicaremos la URL de la imagen redimensionada que nos ha generado la aplicación web y comprobaremos directamente el resultado del archivo listado.

Information Leakage

Ahora que tenemos la capacidad de listar el contenido de archivos del sistema, deberemos de encontrar aquel archivo que nos pueda llegar a proporcionar información interesante.

En nuestro caso, se probaron de intentar obtener las credenciales privadas SSH (id_rsa) de usuarios, verificar archivos de configuración, etc pero no logramos obtener resultado.

Recordando que disponemos de los archivos de configuración de la aplicación web encontrados en el /.git/, nos encontramos que en el archivo login.php se indica la ubicación de la base de datos de SQLite3 de los usuarios de la aplicación web.

Con lo cual, podríamos intentar verificar si podemos obtener el archivo de la base de datos y ver su contenido.

Por lo tanto, en nuestra imagen de prueba image.png, le indicaremos que el archivo a leer sea el de la base de datos ubicada en /var/db/pilgrimage y se nos devuelva la imagen maliciosa con el nombre gzzcoo.png.

Verificamos que en el apartado de Profile de los metadatos de la imagen se ha indicado correctamente el archivo a obtener.

Subiremos la imagen maliciosa en la aplicación web y obtendremos la URL de la imagen redimensionada.

A través del script de Python, al indicarle la URL de la imagen, se nos proporcionaba el siguiente mensaje de error. Esto es debido a que el archivo a querer listar se trata de un binario codificado actualmente en Hex, pero la función principal del script es descodificarlo en Hex para mostrarlo en ASCII.

Nos descargaremos la imagen en nuestro equipo y verificaremos a través de identifyque en el campo Raw profile type se muestra el contenido del binario de la base de datos.

El valor inicial de 53514c69 corresponde a los primeros bytes de una base de datos SQLite, que empieza con la cadena "SQLite" (en formato hexadecimal: 53 51 4c 69).

Guardamos todo el contenido en un archivo llamado data. Posteriormente, utilizamos el comando xxd para convertirlo de vuelta a su formato binario original, generando el archivo sqlite.db.

Mediante sqlite3 accederemos a la base de datos. Enumerando las tablas presentes, nos encontramos con la tabla users la cual nos presenta las credenciales en texto plano del usuario emily.

También podemos visualizar en entorno gráfico a través de la herramienta de sqlitebrowser.

Trataremos de acceder al SSH del equipo con las credenciales encontradas. Finalmente, logramos obtener acceso al sistema y visualizar la flag de root.txt.

Privilege Escalation

Reviewing Running Processes and Exploiting Automatically Executed Root Scripts

Al acceder al sistema, verificamos los procesos que se encuentran en ejecución mediante el comando ps aux. En el resultado obtenido, comprobamos que el usuario root ejecuta un script que se encuentra en /usr/bin/malwarescan.sh.

El siguiente script malwarescan.sh se encarga de monitorear la creación de archivos en el directorio /var/www/pilgrimage.htb/shrunk/ y realizar un escaneo para detectar posibles archivos maliciosos.

  1. Monitoreo de archivos: El script utiliza inotifywait para monitorear en tiempo real el directorio /var/www/pilgrimage.htb/shrunk/ y detectar la creación de nuevos archivos.

  2. Análisis de archivo: Cuando se crea un archivo en el directorio, se obtiene el nombre del archivo utilizando una combinación de comandos echo, tail y sed. Este nombre se almacena en la variable filename.

  3. Uso de binwalk: Luego, el archivo es analizado con binwalk, una herramienta utilizada para detectar contenido binario, archivos ejecutables y otras estructuras dentro del archivo. El resultado del escaneo se guarda en la variable binout.

  4. Verificación contra la lista negra: El script compara el contenido del archivo con una lista negra definida al inicio ("Executable script" y "Microsoft executable"). Si alguna de estas cadenas aparece en el resultado del escaneo, el archivo se considera sospechoso.

  5. Eliminación de archivos maliciosos: Si el archivo contiene alguna de las cadenas de la lista negra, el script elimina el archivo sospechoso usando rm.

Este script está diseñado para ayudar a prevenir la ejecución de archivos maliciosos en el servidor al monitorear de manera continua y eliminar automáticamente aquellos archivos que coincidan con las firmas de los ejecutables no deseados.

Binwalk v2.32 - Remote Command Execution [RCE] (CVE-2022-4510)

En el script se menciona el uso del binario de binwalk, con lo cual decidimos revisar la versión instalada en el equipo por si tenía alguna vulnerabilidad de la que nos podamos aprovechar.

Binwalk es una herramienta para buscar archivos incrustados y código ejecutable en una imagen binaria determinada . En concreto, está diseñada para identificar archivos y código incrustados dentro de imágenes de firmware. Binwalk utiliza la biblioteca libmagic, por lo que es compatible con las firmas mágicas creadas para la utilidad de archivos de Unix.

Revisando por Internet, nos encontramos que la versión de Binwalk v2.3.2 era vulnerable a Remote Code Execution (RCE) reportado en el siguiente CVE-2022-4510.

Nos encontramos el siguiente repositorio de GitHub en el cual nos proporcionaban un PoC y el exploit para aprovecharnos de la vulnerabilidad.

En nuestro caso, dispondremos de una imagen normal llamada image.png. Utilizaremos el exploit para inyectar en la imagen una Reverse Shell hacía nuestro equipo remoto. Verificamos que se nos genera una nueva imagen llamada binwalk_exploit.png el cual compartiremos a través de un servidor web.

Por otro lado, nos pondremos en escucha con nc para recibir la conexión.

Desde el equipo comprometido, nos dirigiremos al directorio /var/www/pilgrimage.htb/shrunk para descargar la imagen maliciosa que estamos compartiendo desde nuestro servidor. Si todo funciona correctamente y el script que ejecuta root detecta este nuevo archivo, será analizado por el binario de binwalk y al ser una versión vulnerable, nos deberá proporcionar la Reverse Shell.

Verificamos que finalmente ganamos acceso al sistema como usuario root y podemos visualizar la flag root.txt.

Última actualización

¿Te fue útil?