Sputnik: 1 - Vulnhub

Sputnik: 1 - Vulnhub

- 3 mins

Enumeración

Comenzamos la exploración de la máquina, como es habitual en nuestras pruebas locales, utilizando arp-scan para detectar la IP.

arp-scan -I eth0 --localnet --ignoredups

192.168.0.29	00:0c:29:ed:1f:ab  VMware, Inc.

Una vez obtenida la IP, continuamos la enumeración con nmap.

nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn -oG allPorts 192.168.0.29
nmap -sCV -p 8089,55555,61337 192.168.0.29 -oN targeted

PORT      STATE SERVICE  VERSION
8089/tcp  open  ssl/http Splunkd httpd
|_http-title: splunkd
|_http-server-header: Splunkd
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2019-03-29T11:03:21
|_Not valid after:  2022-03-28T11:03:21
| http-robots.txt: 1 disallowed entry 
|_/
55555/tcp open  http     Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Flappy Bird Game
|_http-server-header: Apache/2.4.29 (Ubuntu)
| http-git: 
|   192.168.0.29:55555/.git/
|     Git repository found!
|_    Repository description: Unnamed repository; edit this file 'description' to name the...
61337/tcp open  http     Splunkd httpd
|_http-server-header: Splunkd
| http-robots.txt: 1 disallowed entry 
|_/
| http-title: Site doesn\'t have a title (text/html; charset=UTF-8).
|_Requested resource was http://192.168.0.29:61337/en-US/account/login?return_to=%2Fen-US%2F

Al explorar, identificamos varios servicios web. Al lanzar los scripts básicos de reconocimiento de nmap, descubrimos un directorio .git en el puerto 55555. Extraemos este repositorio utilizando git_dumper.py.

./git_dumper.py http://192.168.0.29:55555 ../website

Con el repositorio local, podemos examinar más detenidamente el git. En el directorio .git/logs, encontramos el archivo HEAD, que nos dirige a un repositorio en GitHub, que también clonamos en nuestro equipo.

git clone https://github.com/ameerpornillos/flappy

Después de un análisis exhaustivo del git, encontramos un secreto que parece ser un par de credenciales (usuario y contraseña).

Recordando un panel de autenticación en el puerto 61337, probamos estas credenciales y tenemos acceso…

Explotación

Una vez dentro, investigo el software Splunk, que es el servicio web al que hemos accedido, y encuentro un poc en https://github.com/TBGSecurity/splunk_shells?tab=readme-ov-file. Este poc explica cómo cargar un reverse shell en el servidor y lanzarlo a nuestra máquina.

Primero, descargamos el archivo comprimido que contiene las diferentes reverse shells que necesitamos en nuestra máquina atacante.

wget https://github.com/TBGSecurity/splunk_shells/archive/1.2.tar.gz

Luego, en la interfaz web de Splunk, nos dirigimos a “Manage Apps” y seleccionamos “Install app from file”.

Seleccionamos nuestro archivo comprimido “splunk_shells-1.2.tar.gz”, reiniciamos Splunk.

Navegamos nuevamente a “Manage Apps” y seleccionamos “Permisos”.

Marcamos la casilla “All apps” y seleccionamos “Save”.

Luego, vamos a “Search & Reporting” y podemos ejecutar la reverse shell como se muestra en el recuadro verde, aunque también podríamos usar Meterpreter según el poc, pero prefiero hacerlo todo manualmente si es posible.

Iniciamos una escucha con netcat en el puerto 443 y lanzamos la reverse shell.

nc -nvlp 443

Ahora estamos dentro de la máquina víctima, pero notamos que la shell es inestable y se desconecta rápidamente. Opto por enviar otra shell desde esta misma.

Escalada de Privilegios

Recibimos la shell de nuevo y la estabilizamos utilizando nc mkfifo, luego trabajamos en mejorar la TTY y enumerar el sistema para escalar privilegios.

Literalmente, lo primero que intentamos es un éxito: sudo -l nos permite ejecutar el binario /bin/ed como usuario root. Consultamos gtfobins.

En gtfobins, filtramos por el binario ed y buscamos los permisos que tenemos, que en este caso es SUID. Nos indica que ejecutemos el binario y dentro de este, lanzamos una shell. Ahora somos root y podemos acceder a la bandera de alto privilegio.

comments powered by Disqus