Entrada

CoffeeShop

¡Hola, hacker! ¡Bienvenido a un nuevo post!

En este artículo, llevaremos a cabo la resolución de la máquina CoffeeShop de la plataforma HackMyVM. La máquina presenta un sitio web en el puerto 80 con un formulario de inicio de sesión. Sin embargo, carecemos de credenciales y no podemos registrarnos de manera convencional. Realizando una enumeración con web fuzzing, descubrimos un subdominio que revela credenciales, las cuales aprovechamos para iniciar sesión en el sitio web. Una vez dentro, obtenemos nuevas credenciales que nos permiten acceder al servidor a través de SSH. Posteriormente, debemos realizar un movimiento lateral hacia otro usuario, aprovechando una tarea programada mediante cron. Finalmente, explotamos una mala configuración de sudo para elevar nuestros privilegios y completar la escalada de privilegios con éxito.

Reconocimiento

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

CoffeeShop Reconocimento usando el comando ping

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).

Enumeración

Descubrimiento de puertos abiertos

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

1
nmap -sS -p- --open --min-rate 5000 -Pn -n 10.10.10.12 -oG scanPorts -vvv

CoffeeShop Descubrimiento de puertos abiertos

Parámetros utilizados:

  • -sS: Realiza un TCP SYN Scan para escanear de manera sigilosa, es decir, que no completa las conexiones TCP con los puertos de la máquina víctima.
  • -p-: Indica que debe escanear todos los puertos (es igual a -p 1-65535).
  • --open: Solo considerar puertos abiertos.
  • --min-rate 5000: Establece el número mínimo de paquetes que nmap enviará por segundo.
  • -Pn: Desactiva el descubrimiento de host por medio de ping.
  • -vvv: Activa el modo verbose para que nos muestre resultados a medida que los encuentra.
  • -oG: Determina el formato del archivo en el cual se guardan los resultados obtenidos. En este caso, es un formato grepeable, el cual almacena todo en una sola línea. De esta forma, es más sencillo procesar y obtener los puertos abiertos por medio de expresiones regulares, en conjunto con otras utilidades como pueden ser grep, awk, sed, entre otras.

Enumeración de versión y servicio

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 abiertos.

1
nmap -sCV -p22,80 10.10.10.12 -oN targeted -vvv

CoffeeShop Descubrimiento de versión y servicio con nmap

Parámetros utilizados:

  • -sCV Es la combinación de los parámetros -sC y -sV. El primero determina que se utilizarán una serie de scripts básiscos de enumeración propios de nmap, para conocer el servicio que esta corriendo en dichos puertos. Por su parte, el segundo parámetro permite conocer más acerca de la versión de ese servicio.
  • -p-: Indica que debe escanear todos los puertos (es igual a -p 1-65535)
  • -oN: Determina el formato del archivo en el cual se guardan los resultados obtenidos, junto con el nombre del archivo targeted. En este caso, utiliza el formato por defecto de nmap.
  • -vvv: Activa el modo verbose para que nos muestre resultados a medida que los encuentra. `

Explotación

Usuario developer

Si ingresamos al la dirección 10.10.10.12 desde nuestro navegador, nos encontramos con el siguiente sitio web:

CoffeeShop Web CoffeeShop

Vemos que nos indica que el sitio web se encuentra en construcción, haciendo mención también a un dominio midnight.coffee.

Agregemos este a nuestro archivo /etc/hosts.

1
echo '10.10.10.12 midnight.coffee' >> /etc/hosts

Hagamos un poco de fuzzing para descubrir alguna ruta o archivo interesante.

CoffeeShop Fuzzing Web CoffeeShop

Encontramos una ruta llamada shop.

Si accedemos a la misma, nos encontramos con la siguiente sección del sitio.

CoffeeShop Web CoffeeShop

Vemos que presenta una sección login, en la cual debemos ingresar un Username y Password.

CoffeeShop Web CoffeeShop - Login

Al intentar acceder utilizando credenciales comunes como admin:admin, user:user, o admin:password123, observamos que no logramos obtener acceso. Del mismo modo, al explorar la posibilidad de realizar una inyección SQL, parece que el sistema no presenta vulnerabilidades aparentes.

Sigamos realizando fuzzing, pero ahora en lugar de buscar archivos o rutas, busquemos si existe algún subdominio.

CoffeeShop Fuzzing - We CoffeeShop

Encontramos el subdominio dev.midnight.coffee.

Agregemos este a nuestro archivo /etc/hosts.

Si accedemos desde nuestro navegador podemos observar el siguiente sitio web.

CoffeeShop Web Dev CoffeeShop

Encontramos unas credenciales pertenecientes al usuario developer.

Usuario tuna

Probemos iniciar sesión en el sistema principal.

CoffeeShop Web Dev CoffeeShop

Encontramos otras credenciales, en este caso, del usuario tuna.

Si recordamos nuestra enumeración de puertos, el puerto 22 (SSH) estaba abierto.

Usemos estas credenciales para iniciar sesión a través de esta utilidad.

CoffeeShop tuna login Server CoffeeShop

Genail! logramos entrar en el servidor con el usuario tuna.

Usuario shopadmin

Después de llevar a cabo una enumeración básica en el sistema, identificamos una tarea cron en ejecución asociada al usuario shopadmin. Esta tarea está programada para ejecutar un script ubicado en el directorio del usuario shopadmin, el cual, a su vez, ejecuta todos los archivos con extensión .sh encontrados bajo el directorio /tmp.

CoffeeShop Archivo crontab

CoffeeShop execute.sh

Probemos crear un pequeño script en el directorio /tmp, el cual nos otorge una shell como el usuario shopadmin.

1
2
3
#!/bin/bash
cp /bin/bash /tmp # copia el binario bash a el directorio tmp
chmod u+s /tmp/bash # asigna privilegios SUID

Si ejecutamos el binario, vemos que logramos obtener una shell como el usuario shopadmin.

CoffeeShop execute.sh

De esta forma ya podemos leer la flag del user.txt.

CoffeeShop user.txt

Escalación de privilegios

Durante la enumeración básica, observamos la capacidad de ejecutar un script en Ruby utilizando el comando sudo.

CoffeeShop sudo /usr/bin/ruby

Haciendo una búsqueda en GTFOBins, vemos que existe una forma de escalar nuestros privilegios en este contexto. La cual consiste en pasar el argumento -e 'exec "/bin/sh"' al momento de ejecutar el binario.

Si probamos ejecutar el script, vemos que logramos elevar nuestros privilegios.

CoffeeShop Escalación de privilegios

De esta manera, ya podemos leer el flag de root.txt.

CoffeeShop root.txt

Con esto, concluimos la resolución de la máquina CoffeeShop.

Espero que los conceptos hayan quedado claros. Si has llegado hasta este punto y aún tienes dudas, te recomiendo volver a realizar la máquina.

Gracias por tu lectura!

Happy Hacking!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.