XUT_ / MACHINES / THM

0037

VulnNet - Internal

THMMACHINENONEEASY

Introduction

vulnnet-internal

VulnNet Entertainment aprende de sus errores, y ahora tienen algo nuevo para ti.

VulnNet Entertainment es una compañía que aprende de sus errores. Se dieron cuenta rápidamente de que no podían hacer una web debidamente securizada, por lo que se rindieron. En su lugar, decidieron configurar servicios internos para propósitos de negocio. Como es usual, se te ha encargado realizar un test de penetración de su red y reportar lo que encuentres.

Getting the Flags

Reconocimiento Inicial

Comenzamos escaneando los puertos abiertos de la máquina.

vulnnet-internal

Ahora vamos a escanear los puertos abiertos más en profundidad.

vulnnet-internal vulnnet-internal

Profundización

Vamos a investigar el puerto 445, SMB.

vulnnet-internal

Vamos a ver qué hay en shares.

vulnnet-internal

Parece que hemos encontrado un par de archivos, vamos a ver qué hay en ellos. Primero los descargamos.

vulnnet-internal

Y ahora vamos a leerlos.

vulnnet-internal

Hemos conseguido la primera flag.

Viendo que hay una share vamos a investigar más a fondo esto.

vulnnet-internal

Vemos que hay una mount en /opt/conf. Vamos a montarla en nuestro equipo.

vulnnet-internal

Si hacemos un tree vemos que hay un documento sugerente (la configuración de redis que es una base de datos).

vulnnet-internal

Primero probé a leerlo normal, pero estaba lleno de comentarios que molestaban y no dejaban ver lo importante, por eso filtré con grep -v.

vulnnet-internal

Si seguimos leyendo encontramos algo interesante.


Explotación

Vamos a iniciar sesión con redis-cli. Una vez dentro listaremos las claves que haya.

vulnnet-internal

Aquí vemos "internal flag", vamos a leerla.

vulnnet-internal

Además vimos una authlist, vamos a ver de qué se trata.

vulnnet-internal

Está codificado en base64. Vamos a decodearla.

vulnnet-internal

Aparece una contraseña de alguien que se conectó desde local. Vamos a conectarnos por rsync.

vulnnet-internal

Hay muchas cosas, así que vamos a exportarlo.

vulnnet-internal

Vamos a mirar a ver qué hay.

vulnnet-internal

Vamos a leer la flag.


Escalada de Privilegios

En el sys-internal hay una carpeta .ssh vacía.

vulnnet-internal

Esto significa que si podemos generar un par de claves SSH y subir la clave pública podremos conectarnos por SSH.

Primero generamos el par de claves.

vulnnet-internal

Ahora vamos a subir la clave pública.

vulnnet-internal

Iniciamos sesión por SSH con la clave privada.

vulnnet-internal

Listando el sistema, nos encontramos con una carpeta que no está ahí por defecto.

vulnnet-internal

Buscamos a ver qué es:

vulnnet-internal

Si miramos el readme:

vulnnet-internal

Vemos que es JetBrains TeamCity. Si buscamos por vectores de escalada de privilegios vemos que es posible.

vulnnet-internal

Vamos a seguir investigando, miraremos si está corriendo.

vulnnet-internal

Parece que sí está corriendo. Como no podemos acceder a dicho puerto desde nuestro navegador, vamos a hacer un port forwarding.

vulnnet-internal

Vamos ahora al navegador.

vulnnet-internal

Vamos a darle a iniciar sesión como Super user.

vulnnet-internal

Nos piden un token, vamos a buscarlo en el sistema.

vulnnet-internal

Con este token ya podemos iniciar sesión. Uno de ellos funciona.

vulnnet-internal

Si le damos a + Create project, nos sale esto:

vulnnet-internal

Seleccionamos Manually e introducimos lo que nos pide y le damos a Create.

vulnnet-internal

Seguimos estos pasos:

  1. Vamos a Project Home.

vulnnet-internal

  1. Le damos a Edit Project Settings.

vulnnet-internal

  1. Le damos a + Create build configuration.

vulnnet-internal

  1. En manual ponemos los detalles necesarios.

vulnnet-internal

  1. Le damos a Skip.

vulnnet-internal

  1. Y ahí a Build Steps y creamos uno.

vulnnet-internal

  1. Ahora ponemos el runner type de Command Line y le ponemos un comando para transformar /bin/bash en un binario SUID.

vulnnet-internal

Lo guardamos y le damos a run (arriba, al lado de Actions).

vulnnet-internal

Comprobamos los permisos de /bin/bash.

vulnnet-internal

Bingo! Vamos a ejecutar una shell como root.

vulnnet-internal

Ahora leemos la flag.


Conclusión

Esta máquina empieza fácil, la verdad es que hasta la parte de redis es bastante sencillo llegar, el problema empieza con rsync, no es un comando que suela utilizar mucho y no me daba cuenta de todo lo que se puede llegar a hacer con él. Por último, el vector de escalada es incluso más raro, pero ahora la próxima vez que vea un TeamCity sabré sospechar de él hehe.

Gracias a Z3rObyte por su write up ya que intuía que el vector de escalada era TeamCity pero no conseguía encontrar la forma de escalar.