Introduction

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.

Ahora vamos a escanear los puertos abiertos más en profundidad.
Profundización
Vamos a investigar el puerto 445, SMB.

Vamos a ver qué hay en shares.

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

Y ahora vamos a leerlos.

Hemos conseguido la primera flag.
Viendo que hay una share vamos a investigar más a fondo esto.

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

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

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

Si seguimos leyendo encontramos algo interesante.
Explotación
Vamos a iniciar sesión con redis-cli. Una vez dentro listaremos las claves que haya.

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

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

Está codificado en base64. Vamos a decodearla.

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

Hay muchas cosas, así que vamos a exportarlo.

Vamos a mirar a ver qué hay.

Vamos a leer la flag.
Escalada de Privilegios
En el sys-internal hay una carpeta .ssh vacía.

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.

Ahora vamos a subir la clave pública.

Iniciamos sesión por SSH con la clave privada.

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

Buscamos a ver qué es:

Si miramos el readme:

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

Vamos a seguir investigando, miraremos si está corriendo.

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

Vamos ahora al navegador.

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

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

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

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

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

Seguimos estos pasos:
- Vamos a
Project Home.

- Le damos a
Edit Project Settings.

- Le damos a
+ Create build configuration.

- En manual ponemos los detalles necesarios.

- Le damos a
Skip.

- Y ahí a
Build Stepsy creamos uno.

- Ahora ponemos el runner type de
Command Liney le ponemos un comando para transformar/bin/bashen un binario SUID.

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

Comprobamos los permisos de /bin/bash.

Bingo! Vamos a ejecutar una shell como root.

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.

