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.
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
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
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 archivotargeted
. 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:
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.
Encontramos una ruta llamada shop
.
Si accedemos a la misma, nos encontramos con la siguiente sección del sitio.
Vemos que presenta una sección login, en la cual debemos ingresar un Username
y Password
.
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.
Encontramos el subdominio dev.midnight.coffee
.
Agregemos este a nuestro archivo /etc/hosts
.
Si accedemos desde nuestro navegador podemos observar el siguiente sitio web.
Encontramos unas credenciales pertenecientes al usuario developer
.
Usuario tuna
Probemos iniciar sesión en el sistema principal.
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.
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
.
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
.
De esta forma ya podemos leer la flag del 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
.
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.
De esta manera, ya podemos leer el flag de 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!