El Candidato

¡Hola hacker! Bienvenido a una nueva resolución. En esta ocasión, estaremos resolviendo una nueva máquina, la cual creé para nuestra comunidad de The Hackers Labs, la máquina El candidato.

Reconocimiento

Comenzamos como siempre lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Linux basandonos en el TTL (Time To Live) 64.

Enumeración inicial

Realizamos un escaneo con nmap para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.

Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos.

Explotación inicial

Si ingresamos al puerto 80, nos encontramos con la siguiente web.

Si hacemos hover sobre alguno de los enlaces del menú, vemos que se estan apuntando al siguiente nombre de dominio: gyhabogados.thl.

Por lo tanto, registramos la siguiente linea en nuestro archivo hosts.

Volvemos a ingresar a la web y vemos que tenemos acceso a las demás secciones.

Hay una sección del sitio web que es particularmente interesante y es la sección de "Trabaja con Nosotros". A través de este formulario los candidatos pueden subir su Curriculum Vitae.

Vemos que el tipo de archivo que los tipos de archivos que se nos permite subir son pdf, doc, y odt. Podemos cargar el formulario y tramitar la petición a Burp Suite para intentar manipular la petición para subir por ejemplo un script php, pero no va por ahi.

En este caso, la vulnerabilidad que explotaremos se encuentra en los macros del archivo odt. Lo que haremos será subir un archivo odt malicioso el cual nos permita obtener una reverse shell.

En primer lugar, debemos crear el archivo odt, para ello utilizaremos LibreOffice Writer.

Para crear un nuevo macro, debemos acceder a la sección Tools/Organize Macros/Basic...

En este punto, deberemos seleccionar nuestro documento y hacer clic en el botón New. Ingresamos el nombre del macro, en este caso AutoOpen.

Se abrirá la siguiente ventana.

Dentro de la sección del código, escribiremos lo siguiente indicando la IP de nuestra máquina atacante:

Guardamos el macro.

En este caso, se nos solicita despliega el siguiente cuadro de dialogo para ingresar el nombre del archivo en caso de todavía no haberlo indicado.

Ahora, lo que demos hacer, es asociar el macro a un evento, en este caso lo asociaremos al evento Open Document, es decir, que nuestro código se ejecutara al momento de abrirse el documento.

Para ello, debemos acceder a Tools/Customize...

Luego, en la pestaña Events debemos buscar el evento Open Document y seleccionarlo. A continuación, debemos hacer clic en el botón Macro....

Por ultimo, debemos seleccionar nuestro macro y guardar.

Guardamos el archivo y ya estamos listos para subirlo.

Volvemos a la web y completamos el formulario.

Antes de enviar el formulario, nos ponemos en escucha con netcat por el puerto que hayamos elegido.

Ahora si, enviamos el formulario.

Esperamos unos segundos, y deberíamos recibir la reverse shell.

Genial, estamos dentro del sistema como el usuario bob.

Hacemos el tratamiento de la tty para tener una terminal más interactiva:

  • script /dev/null -c bash

  • CTRL + Z

  • stty raw -echo; fg

  • reset xterm

  • export TERM=xterm

  • export SHELL=bash

  • stty rows <rows> columns <columns>

bob -> sam

Si realizamos una enumeración básica del sistema, encontramos un archivo credentials.7z en el directorio home de bob.

Si intentamos extraer el contenido del archivo, vemos que nos solicita una contraseña.

Descargamos el archivo a nuestra máquina atacante para poder crackearlo con john.

Creamos un servidor HTTP con Python por el puerto 8000.

Utilizamos 7z2john para generar el hash.

Crackeamos el hash con john usando el rockyou.

Logramos obtener la contraseña del archivo 7z.

Extraemos el contenido del archivo, lo cual genera un archivo credentials.txt.

Dentro del archivo, encontramos las credenciales de bob.

Las cuales podemos utilizar para conectarnos por ssh.

Usuario: bob

Contraseña: a7gyqqp6bt2!uv@2u

Continuamos enumerando el sistema y encontramos que además del sitio principal gyhabogados.thl, existe un segundo sitio configurado mail.gyhabogados.thl.

Si miramos el contenido del archivo, nos encontramos con lo siguiente:

Al aparecer, lo que esta corriendo bajo la dirección mail.gyhabogados.thl es una instancia de Roundcube.

¿Qué es Roundcube?

RoundCube es un cliente de correo web gratuito y de código abierto que permite gestionar emails a través de un navegador. Ofrece una interfaz moderna, soporte IMAP, gestión de contactos y extensibilidad mediante plugins.

Agregamos este dominio al archivo host de nuestra máquina atacante y accedemos a ella desde el navegador.

Nota:

También podríamos haber realizado fuzzing para encontrar el subdominio.

Efectivamente, nos encontramos con una instancia de RoundCube.

Ingresamos con las credenciales de bob.

Si miramos dentro de los mensajes enviados por bob, encontramos uno interesante.

En este correo, podemos ver que se da la bienvenida a sam que es uno de los nuevos abogados. Podemos ver, que se le brindan las credenciales necesarias para acceder al sistema.

Nos movernos al usuarios sam usando esas credenciales, ya que no las ha cambiado.

Usuario: sam

Contraseña: Welcome2024!

Genial, logramos acceder como sam al sistema.

sam -> dean

Si recordamos los servicios expuestos, uno de ellos era el Samba (445). Ahora que tenemos credenciales validas, podemos intentar enumerar recursos.

Vemos tres recursos interesantes, CONFIDENCIALES, RESPALDOS_IT y IT_TOOLS, pero solo tenemos permisos de lectura en los primeros dos. Si miramos dentro del recurso compartido CONFIDENCIALES no encontraremos nada interesante, solo archivos pdf sin valor. Pero, dentro del recurso compartido RESPALDOS_IT si encontramos algo.

Descargamos ambos archivos a nuestra máquina atacante.

Si miramos lo que dice el archivo txt, nos encontramos con lo siguiente:

Vemos que el archivo credenciales.psafe3 corresponde a la boveda de contraseñas de dean uno de los usuarios del sistema y que la contraseña maestra esta formada por ChevyImpala y un año, que no sabemos cual.

Creamos un simple diccionario usando el siguiente one-liner.

Generamos el hash usando la herramienta pwsafe2john.

Crackeamos el hash con john y el diccionario generado.

Obtenemos la contraseña maestra de la boveda.

Abrimos el archivo con la aplicación de Password Safe.

Encontramos las credenciales de dean.

Usuario: dean

Contraseña: MasterOfPuppets1986

dean -> john

Obtenemos la flag de user.txt

Si recordamos, cuando enumeramos recursos compartidos con sam, había un recurso que no podíamos acceder. Si volvemos a enumerar, en este caso con dean vemos que tenemos permisos de lectura en este recurso, por lo que nos conectamos.

Encontramos un archivo .ppk, lo descargamos a nuestra máquina.

Utilizamos la utilidad puttygen para generar una clave privada rsa y poder conectarnos por ssh como john.

Logramos ganar acceso como john.

Escalación de Privilegios

Después de realizar una enumeración del sistema y no encontrar nada interesante, probamos ingresar a la casilla de correo de john pero no encontramos nada. Sin embargo, si ingresamos a la casilla de correo de dean, observamos un correo un tanto particular.

En este correo, el usuario bob envia una imagen de un Chevrolet Impala del año 67 adjunta.

Descargamos la imagen y aplicamos esteganografía junto con un poco de fuerza bruta.

Para ello, podemos usar un pequeño script en bash.

Ejecutamos el script.

Y luego de unos segundos, logramos obtener la contraseña y extraer el archivo oculto.

De esta forma, obtenemos las credenciales de john.

Usuario: john

Contraseña: TI!Powerful2024

Volvemos a conectarnos como john al sistema y enumeramos si tenemos la capacidad de ejecutar comandos con sudo. Efectivamente, podemos ejecutar el siguiente comando con sudo.

Vemos que podemos ejecutar un script de python que se encuentra en /home/john/tools/backup.py. Pero si nos fijamos dentro del directorio tools no existe ningun archivo backup.py por lo que creamos este.

Ejecutamos el script

De esta manera, logramos escalar privilegios.

Post Explotación

Por ultimo, leemos el flag de root el cual se encuentra en notes.txt.

De esta forma, llegamos al final de la máquina El Candidato.

Como siempre, si te gustó este CTF, ¡cuentaselos a otros!.

Si aun no eres parte de nuestra comunidad, te dejo los enlaces a la web The Hackers Labs y a el servidor de Discord.

Gracias por tu lectura!

Happy Hacking!

Última actualización