Pilgrimage

Publicado: 15 de Mayo de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Easy

๐Ÿ“ Descripciรณn

Pilgrimage es una mรกquina Linux que aloja un servicio web para la subida y procesamiento de imรกgenes. La mรกquina explota dos vulnerabilidades principales: una en ImageMagick (CVE-2022-44268) que permite la exfiltraciรณn de archivos sensibles del sistema, y otra en Binwalk (CVE-2022-4510) que permite escalar privilegios a root. La ruta de ataque requiere conocimientos sobre explotaciรณn de aplicaciones de procesamiento de imรกgenes, anรกlisis de cรณdigo fuente y enumeraciรณn de sistemas Linux.

๐Ÿ”ญ Reconocimiento

Ping para verificaciรณn en base a TTL

๐Ÿ’ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.

Escaneo de puertos

Enumeraciรณn de servicios


โš ๏ธ Debemos agregar este dominio a nuestro archivo hosts.

๐ŸŒ Enumeraciรณn Web

80 HTTP

Enumerando el servicio web del puerto 80 descubrimos un servicio web que permite la subida de imรกgenes.

Creamos una cuenta:

Si intentamos subir un archivo con extensiรณn php falla:

Tras interceptar la peticiรณn con burp, usar el Intruder para intentar bypassear los filtros de extensiones y el Content-Type no encontramos un posiblevector de entrada.

๐Ÿ•ท๏ธFuzzing de directorios

Al realizar fuzzing de directorios encontramos un recurso interesante llamdo /tmp:

Aunque al intentar acceder nos devuelve un 403

Probamos de nuevo pero esta vez usando la lista common.txt de seclists y encontramos que existe un repositorio git:

Procedemos a descargarlo usando la herramienta git_dumper:

Una vez descargado vemos los siguientes recursos:

En el directorio .git encontramos un usuario llamado emily en el fichero COMMIT_EDITMSG

Por otro lado, tabiรฉn vemos un binario llamado magick. Vale la pena enumera la versiรณn ya que esta herramienta presentรณ vulnerabilidades en el pasado:

๐Ÿ’ป Explotaciรณn

๐Ÿ”“ CVE-2022-44268

Comprobamos que tal como suponรญamos la versiรณn de Magic es vulnerable a Arbitrary File Upload: https://www.exploit-db.com/exploits/51261

Usaremos el siguiente exploit en python:

https://github.com/kljunowsky/CVE-2022-44268

Descargamos la herramienta y sus dependencias

Usamos la herramienta para crear la imagen "envenenada"

A continuaciรณn la subimos al host.

Ahora comprobamos si el exploit ha funcionado y al cargar la imagen podemos leer el contenido del fichero /etc/hosts que habรญamos embebido:

La prueba de concepto ha funcionado, por lo que podemos probar esto mismo con otros archivos que puedan resultar รบtiles.

Anteriormente cuando descargamos el cรณdigo fuente del sitio web vimos que habรญa un archivo interesante en login.php:

Podemos intentar leer el archivo /var/db/pilgrimage

Pero obtenemos el siguiente error:

Eso puede tener sentido, ya que se trata de datos binarios y el script parece esperar solo texto ASCII.

Descargamos el archivo de imagen manualmente de la web y a continuaciรณn mediante el uso de grep extraemos el contenido:

Ahora que ya tenemos un archivo .sqlite descargado, usamos la herramienta para cargarlo y obtener la contraseรฑa del usuario emily:

FootHold

Iniciamos sesiรณn vรญa ssh como emily y cpaturamos la primera flag.

๐Ÿ‘‘ Escalada de privilegios

Enumeramos la mรกquina para encontrar un vector que nos permita escalar privilegios.

Tras un buen rato enumerando (SUID, permisos, grupos, capabilities, directorios, etc) lo encontramos finalmente al enumerar los servicios:

Verificamos que รบnicamente tenemos permisos de lectura sobre este script:

Podemos enviarnos el contenido de este script a nuestro host de ataque para una mejor visualizaciรณn con el siguiente comando:

En el host de ataque nos podemos a la escucha:

En el host remoto:

El script usa inotifywait para monitorear el directorio /var/www/pilgrimage.htb/shrunk/ en busca de nuevos archivos.

Cuando se crea un archivo nuevo, el script usa tail y sed para extraer el nombre del archivo de la salida de inotifywait.

Luego, se usa binwalk para extraer cualquier dato binario y almacenarlo en la variable binout. Si se encuentra alguna de las cadenas en la lista negra, el archivo se elimina. Siempre que se usen herramientas no predeterminadas en scripts ejecutados por root como estos, conviene analizarlo con mรกs detalle. Empezamos enumerando la versiรณn de Binwalk:

๐Ÿ”“ CVE-2022-4510

Esta versiรณn es vulnerable. Existe un exploit para esta versiรณn que permite la ejecuciรณn remota de comandos. En este caso voy a usar uno que realiza directory path traversal que permite copiar una clave ssh generada en el directorio /root/.ssh de la mรกquina comprometida:

https://github.com/adhikara13/CVE-2022-4510-WalkingPath

Generamos una clave pรบblica y privada con SSH sin contraseรฑa:

Ahora usamos el exploit indicando una imagen fake y la clave id_rsa.pub que copiaremos en el directorio /root/.ssh de la mรกquina comprometida.

Observamos que tras la ejecuciรณn del comando, nos genera la imagen envenenada que deberemos copiar en el directorio /shrunk donde la herramienta binwalk comprueba el tipo si es un ejecutable de windows o linux.

Subimos la imagen a la mรกquina comprometida usando scp:

Una vez hemos copiado el archivo, presuponemos que el proceso que identifica que cada vez que haya un cambio se ejecute binwalk, ya habrรก copiado la clave pรบblica fake de ssh al directorio /root/.ssh y podremos conectarnos con root sin contraseรฑa, asรญ que verificamos:

Confirmamos la escalada de privilegios a root y ya podemos obtener la flag.

Last updated