¡Buenas! Hoy venimos con la última máquina retirada de la plataforma Hackthebox: Canape. Para resolverla necesitaremos tener conocimientos básicos de Linux, un poco de coding para explotar una vulnerabilidad PHP, aprovecharnos de una versión vulnerable de base de datos y finalmente, escalar privilegios vía sudo. Así que... ¡Vamos allá!
Enum
A primera vista ya encontramos mucha información interesante… un servidor SSH en el puerto
65535, un servidor web con un sitio fan de los Simpsons y… un repositorio GIT!
Privesc
Scanning
Como siempre, comencemos con un SYN scan para ser rápidos y
sigilosos y, después, comprobar versiones de servicios y ejecutar scripts
seguros de NSE.
-sS
Un escaneo de los puertos más comunes no arroja toda la información que podemos obtener, y es cuando utilizamos el parámetro -p- (escanear todos los puertos) cuando descubrimos que hay otro puerto abierto.
Ilustración 1. Resultados SYN scan.
-sV
Ilustración 2. Scripts NSE y escaneo
de versiones.
Nota: -sS = SYN scan; -sV = version scan; -sC = ejecutar scripts NSE seguros; -n = no resolver nombre; -Pn = no intentar comprobar si el host está vivo; -p = puertos -oA = todos los formatos de salida.
Enum
Usemos Burp para preparar un proxy que nos logee todas las
peticiones hacia la web.
Ilustración 3. Árbol inicial en Burpsuite.
Sólo echando un vistazo a la página principal, podemos
comprobar que probablemente la máquina esté utilizando CouchDB y, si además
inspeccionamos el código, vemos una url escondida (/check).
Enviando una petición mediante Burpsuite, podemos comprobar
que /check
no acepta el método GET, pero sí POST y OPTIONS pero, antes de continuar con esta
parte, echemos un ojo al repositorio git.
Echando un vistazo al repositorio git, encontramos un
archivo de configuración con la información suficiente como para realizar un git
clone <repo> correctamente para clonar el repositorio completo.
Usando la url encontrada en el archivo de configuración, podemos
usar git
clone para clonar todo el código, lo cual será muy útil para realizar
pruebas localmente antes de lanzarlas en remoto.
Nota: comando utilizado à git clone
http://git.canape.htb/simpsons.git
El fichero en el que estamos interesados es __init.py__.
Ejecutarlo es muy sencillo, únicamente tenemos que comentar la línea referente
a CouchDB (no tenemos la bbdd en nuestro equipo) y ejecutarlo como un script
común. Tras esto, tendremos nuestra web replicada en http://127.0.0.1:5000.
Inspeccionando __init.py__ comprobamos que hace /check
y, además, que usa una función php vulnerable: cPickle.loads(data).
Lo primero será conseguir una ejecución correcta, utilizando
por una parte /submit para subir una cita correcta y luego usar /check
para ver si funciona correctamente.
Por tanto, el script para convertir a “leíble por check”
cada cita añadida, sería algo como lo siguiente:
Ahora, necesitamos utilizar el hash obtenido, para incluirlo
en el parámetro id en la petición POST de /check.
Ha funcionado! Por tanto, nuestro objetivo es explotar la
funcionalidad /check para obtener una shell.
Exploiting
Exploiting
Intentemos conseguir RCE. Para ello tenemos que pensar en 3
cosas:
- Es necesario incluir el nombre de algún personaje de los Simpsons en nuestro exploit à por ejemplo, “krusty”.
- Por alguna razón, tuve algunos problemas para enviar las peticiones vía curl o por el navegador à necesitamos enviar las peticiones post desde dentro del propio script.
- cPickle tiene una vulnerabilidad de deserialización, permitiendo a objetos aleatorios declarar cómo deben ser “pickled” definiendo un método __reduce__.
En este punto realicé muchas pruebas pero, finalmente, el
código del exploit es el siguiente:
Ilustración 13. Código del exploit
cPickle.
Nota: El código en b64 es
una web_delivery shell, pero es posible utilizar cualquier comando.
Ejecutando este exploit contra la máquina víctima nos dará
una shell sin privilegios:
Ilustración 14. Shell en la víctima
como www-data.
Pero no podemos conseguir la flag de user… ¿por qué? Bueno,
no somos un usuario creado como tal, sólo www-data. Pero… ¿Recordáis que vimos
que se utiliza CouchDB en la máquina? Vamos a comprobar si es cierto y si es
vulnerable. Para ello vamos a enviar una petición http mediante curl al puerto
por defecto de CouchDB (5984/tcp).
Ilustración 15. Versión de CouchDB.
Como era de esperar, la versión de CouchDB es vulnerable (CVE-2017-12635)
así que utilicé un exploit público (https://www.exploit-db.com/exploits/44498/)
para crear un usuario con permisos de admin dentro de la bbdd de CouchDB y…
funcionó!!
Ilustración 16. Ejecución de CouchDB
y creación de usuario con permisos de admin.
Ahora podemos ver todo el contenido de la ddbb. CouchDB es
una base de datos no relacional, por lo que todo está estructurado en torno a
documentos en lugar de tablas. Lo que debemos hacer es:
- Comprobar todas las dbs à curl –x GET http://<user>:<pass>@127.0.0.1:5984/_all_dbs
- Seleccionar una bd y comprobar todos los documentos à curl –x GET http://<user>:<pass>@127.0.0.1:5984/passwords/_all_docs
- Seleccionar el ID de cada documento y ver qué contiene à curl –x GET http://<user>:<pass>@127.0.0.1:5984/passwords/<id>
Ilustración 17. Inspección de la BBDD
de CouchDB.
Lo tenemos!!
Ilustración 18. Credenciales de homer
y "su homer".
Ilustración 19. Flag de user.
Privesc
La elevación de privilegios es muy rápida. Tan sólo tenemos
que comprobar los permisos que tiene homer en sudo y veremos el camino claro…
Ilustración 20. Privilegios de homer
en sudo.
Podemos abusar de pip para instalar lo que queramos como
root, así que utilizaremos el script en python fakepip.py para crear una shell
reversa hasta nuestro equipo con privilegios de root.
Fakepip se puede encontrar aquí (https://github.com/0x00-0x00/FakePip)
y hay que modificar el RHOST para indicar nuestra IP, aunque tan sólo contiene
una reverse shell común, por lo que es muy sencillo crear tu propio script.
Ilustración 21. Contenidos de
fakepip.py
Ilustración 22. Subida de fakepip.py
a la víctima via wget.
Ilustración 23. Ejecución de fakepip.
Ilustración 24. Nueva shell reversa
con privilegios de root y root.txt
Pwned!
Y hasta aquí Canape, cualquier duda o sugerencia, no dudes en dejar un comentario o pregunta en el canal de Telegram - HackTheBox Hispano.
Si tienes algún write-up no dudes en decírnoslo para darte acceso al repositorio de write-ups de Hackplayers: https://github.com/Hackplayers/hackthebox-writeups/blob/master/README.md
Saludos!!
Comentarios
Publicar un comentario