HTB — Inject Writeup
Descubrimos un LFI que nos permitirá leer carpetas y ficheros internos. Gracias al LFI, identificaremos el servicio interno y encontraremos una vulnerabilidad que nos permitirá realizar RCE utilizando Java para obtener una reverse shell. Localizaremos las credenciales de otro usuario en un archivo XML y, por último, utilizando pspy, podremos ver una tarea que ejecuta archivos YML, lo que nos permitirá elevarnos a una bash shell con permisos SUID.
Enumeración
nmap -sVC 10.10.11.204
Hemos encontrado 2 puertos abiertos, el 22 para SSH y el 8080 para una aplicación web.
De todas las opciones, solo podemos elegir las opciones de Blogs y Upload.
La parte de Subir (Upload) es bastante interesante, así que intentamos subir una imagen para ver si nos permite verla después de que el proceso esté completo.
Somos capaces de ver la imagen subida (la imagen utilizada es de otra maquina).
Utiliza el parámetro ‘img’ para que podamos ver la imagen. Esto puede ser interesante por dos razones: puede ser vulnerable a LFI o podemos subir un archivo y establecer una reverse shell.
Acceso inicial
Al probar la carga típica de LFI, podemos ver el archivo passwd de la máquina. También podemos observar que hay dos usuarios que parecen interesantes, frank y phil.
Sabiendo eso, comenzamos a investigar la máquina. Podemos ver que el archivo user.txt se encuentra en la carpeta de inicio de phil.
Luego, al enumerar, encontramos la carpeta /var/www/WebApp.
Leemos el archivo pom.xml, ya que generalmente contiene información interesante. Podemos ver que se está ejecutando el framework Spring. Spring es un framework de código abierto que facilita el desarrollo de aplicaciones Java..
Después de buscar un poco en línea, encontramos un exploit para esta versión.
Para confirmar que esta vulnerabilidad funciona para nosotros, intentaremos ejecutar un ping hacia nuestra máquina utilizando el siguiente payload:
Configuramos nuestro tcpdump para escuchar conexiones:
tcpdump -i tun0 icmp
¡Y tenemos un ping desde la máquina!
El siguiente paso consiste en crear una reverse shell y subirla a la máquina utilizando este exploit. Primero, creamos el archivo de la reverse shell.
Luego, lanzamos un servidor HTTP para que la máquina remota pueda obtener el archivo desde nuestra máquina.
A continuación, ejecutamos el siguiente código para llevar nuestra reverse shell a la máquina remota.
Después de eso, verificamos si se cargó correctamente. Podemos ver el archivo en la carpeta /tmp, junto con otras reverse shells de otras personas.
Ahora configuramos el listener.
nc -lvnp 4444
El siguiente paso consiste en otorgar permisos de ejecución a la reverse shell.
Y ahora lo ejecutamos para recibir la shell.
Privesc to user
En el directorio HOME de Frank, encontramos una carpeta oculta inusual. Dentro de esta carpeta, hay un archivo XML.
En ese archivo, encontramos la contraseña de Phil.
DocPhillovestoInject123 (SSH is disabled for PHIL user)
Ahora debemos cambiar de usuario a Phil.
Una vez que estamos conectados como Phil, podemos leer el archivo user.txt.
Privesc to root
En nuestra búsqueda para elevar privilegios, ejecutamos “ps -aux” para identificar procesos intrigantes. Encontramos “ansible-parallel” ejecutándose con permisos de root..
Podemos ver que ejecuta todos los archivos YML de la carpeta /opt/automation/tasks.
Posteriormente, generamos un archivo YML análogo en nuestra máquina atacante para adquirir permisos SUID.
A continuación, subimos el archivo YML malicioso a la máquina víctima y esperamos.
Después de un corto tiempo, verificamos si los permisos SUID están establecidos.
Como tenemos derechos SUID, ejecutamos bash -p para cambiar a root y leer el archivo root.txt.