Resolución del CTF THEOFFICE
Escaneo de puertos
Realizamos un escaneo de todos los puertos para saber cuáles están activos.

Los parámetros utilizados son:
- -p- : Escaneo de todos los puertos. (65535)
- -sS : Realiza un TCP SYN Scan para escanear de manera rápida que puertos están abiertos.
- -sC : Realiz una escaneo con los scripts basicos de reconocimiento
- -sV : Realiza un escaneo en buqueda de los servicios
- –min-rate 5000: Especificamos que el escaneo de puertos no vaya más lento que 5000 paquetes por segundo, el parámetro anterior y este hacen que el escaneo se demore menos.
- -n: No realiza resolución de DNS, evitamos que el escaneo dure más tiempo del necesario.
- -Pn: Deshabilitamos el descubrimiento de host mediante ping.
Vamos a fuzzear y nos encuentra dos directorio muy interesantes.

Estamos ante un panel de login en el cual nos muestra un usuario y contraseña.

Una vez dentro al indicarle algún servicio vemos que no somos «admin«

Si vemos el código fuente podemos ver la estructura de las contraseñas y las cookies:
Nos llama la atención el «isAdmin«:true una propiedad la cual es explotable mediante un ataque de Prototype pollution.

Vamos a interceptar la petición:

Eliminamos la cookie y cambiamos el Content-Type en formato json para que la propiedad la acepte, esto nos debería permitir que el usuario guest obtenga el rol de admin

Vemos que lo a ejecutado correctamente.

Y al recargar vemos que efectivamente a funcionado.

Vamos a lanzarnos una revshell a nuestra maquina.

Y estamos dentro.

Nos llama la atención un archivo oculto el cual contiene lo que parece un usuario y contraseña por ftp.

Pero nos damos cuenta que estamos en un red distinta(docker), así que vamos a pivotar, en este caso utilizaremos la herramienta ligolo.

Vamos a crear una interfaz y la levantamos.

Nos traemos el binario agent a a maquina victima.

Ejecutamos el proxy en nuestra maquina.

Y el agent en la maquina victima.

Empezamos el túnel y añadimos la nueva red

vemos las sesiones que hay con ligolo y la iniciamos

Hacemos un escaneo de la red en concreto y vemos que tenemos varias:

Vamos a entrar a una de ellas con el usuario y contraseña que nos encontramos.

Vemos que hay una clave id_rsa, nos la descargamos, extraemos en hash y lo rompemos para saber el pharaprase

Vemos que hay un comentario en la clave, nos indica que es del usuario «willsmith».

Al entrar por ssh encontramos la bandera y unas claves de acceso por ftp.

Encontramos una archivo en C, así que vamos a descargarlo para analizarlo en nuestra maquina.

Vemos que el código ejecuta un comando con system() siempre y cuando este con la extensión 7z.

De vuelta al servidor vemos que tenemos privilegios de ejecutar como «root» sin proporcionar contraseña el binario /opt/uncompress.

Como sabemos que el código ejecuta mediante una llamada al sistema archivos 7z, vamos a crearnos un archivo de prueba vacío.

Lo copiamos con la extensión 7z y al ejecutarlo vemos que nos responde.

Nos creamos una revshell en local.

Y nos la taremos a la maquina victima, la copiamos con el formato y extensión 7z y estando al escucha al ejecutarlo:

Recibimos la conexión;

Nos encontramos el usuario y contraseña del usuario «office».

Así que si lo probamos, efectivamente estaríamos como «root».

Especial agradecimiento al compañero MURRUSKO por la creación y el conocimiento aportado en esta máquina.