HTB{FRIENDZONE}

Vaya que pasa el tiempo cuando uno se divierte, después de algunas semanas de ausencia, les tengo la solución de la máquina que hoy ha sido dada de baja en los retos de la página de Hack the Box

FriendZone fue una máquina en muchos sentidos divertida y entretenida por los múltiples retos que tenía en si misma, ésta es una de las máquinas que considero no deberían estar catalogadas como fácil, por lo que implicó resolverla, pero como todos los retos que se resuelven dejan gran aprendizaje. 


Comencemos con el escaneo de puertos de este equipo....



Dentro de los puertos relevantes están el 445, 80, 443, 53,21 y 22, así que como dicen por ahí vamos por el mas simple. 

Haciendo una enumeración del puerto 445 tenemos lo siguiente: 



Carpetas compartidas con el nombre de Files, general y Development,  la primer carpeta no nos deja ingresar, así que seguiremos con General y Development, esta última toma relevancia, en una parte mas adelante del reto, así que la retomaré mas adelante.

Mapeando la carpeta de General, logramos ver el siguiente archivo, con el nombre de creds.txt.




Por el nombre es evidente que almacena algunas credenciales que pudieran ser de utilidad.



Y así parece cuando hacemos un cat, vemos que la información que contiene es un usuario admin y su contraseña. Pero, ya ahora, donde los usamos? 

Lo mas sencillo es tratar en el FTP o SSH, y así fue, pero el resultado es que en ninguno de estos servicios nos fue de utilidad, así que no quedaba otra mas que intentarlo en los servicios publicados en el puerto 80 y 443. 

Revisando el puerto 80... 


No aparece una página con un logotipo y lo que parecerían datos de contacto, observen muy bien y en estos datos hay uno en particular que nos será de utilidad mas adelante.

No había como tal un login, así que vayamos al puerto 443....



Un momento.... no hay página?? Recordemos que en algunos equipos, el 443 responde a los sitios publicados con el nombre del servidor y no por medio de la IP, puesto que esta información debe coincidir con la publicada en el certificado digital.  Así que tenemos que buscar por otro lado...

Regresando a nuestro escaneo inicial, el equipo tenía el puerto 53 abierto, lo cual significa que este mismo equipo puede hacer resolución de nombres debido a que este puerto es propio de un servidor DNS.

Así que hagamos la enumeración de este servicio: 



Para este reto utilicé el comando FIERCE para obtener los subdominios registrados en el DNS. 



Como se puede observar en la imagen anterior, estoy consultando al DNS por sufijos de dominio friendzoneportal.red, pero y ese dato de donde salió? 

Recuerdan la página publicada en el puerto 80? 


Ya con esta información de la enumeración del puerto 53, vemos que hay varios subdominios, pero el que nos dará mayor valor es el que viene como admin.friendzoneportal.red.




Como previamente configuramos el DNS en nuestro equipo para poder hacer la enumeración del puerto 53, basta con poner en el navegador, https://admin.friendzoneportal.red y nos aparece una pantalla de login, finalmente.




Ya con esta pantalla, probamos las credenciales obtenidas casi al principio de nuestro ejercicio en el archivo creds.txt




A pesar de que pudimos ingresar, nos aparece una pantalla que nos indica que este sitio aún no ha sido desarrollado y que debemos buscar en otro lado... y ahora donde? 

Aquí entró un poco la intuición de buscar nuevamente en el DNS, pero ahora por las entradas de dominio del reto, es decir, *.friendzone.red.



Y efectivamente este dominio también es resuelto por nuestro servidor de DNS revelándonos otro equipo relevante.... 



Probamos con este nuevo sitio en el navegador



Tenemos otra pantalla de login, y nuevamente ingresamos las credenciales que ya teníamos.



Efectivamente nos permite ingresar al sitio, pero en esta ocasión nos muestra un mensaje que nos indica que debemos consultar el subdirectorio /dashboard.



Agregando este subdirectorio a la barra del navegador, nos indica otro mensaje más, mismo que si ponemos algo de atención, nos indica la url con un par de parámetros... 


Agregando esos parámetros en la barra de navegación nos muestra el siguiente resultado.



El mensaje troll que nos indica el buen Nelsom es que uno de los scripts que están como parámetro no se ejecuta correctamente... y ahora que hacemos, aún no tenemos acceso al equipo como para modificar algo ahi, pero esperen..... recuerdan la carpeta compartida con el nombre de Development?? Buenas noticias, tenemos permiso de escritura, así que subiremos un archivo PHP y probaremos invocando este archivo. 




El archivo PHP que subí en esta carpeta es un reverse shell que se conectará a mi equipo por medio del puerto 5555 y el nombre que le puse es timestamp2.php



Configurado y escrito el archivo en el servidor por medio de la carpeta compartida, sólo me queda preparar mi equipo para escuchar conexiones por ese puerto. 



Y ahora si, volviendo a la página donde nos aparece la imagen de Nelson, mandamos llamar a nuestro PHP. 



Houston, tenemos un reverse shell, repito, tenemos un reverse shell :) 



Como es común en este tipo de retos, con la primer conexión de shell que tenemos, ya es posible tener la bandera del usuario, así que simplemente la buscamos. 



Ahora vamos por la de root.... debo aceptar que esta es la parte que más tiempo me llevó y que inclusive me hizo conocer la herramienta PSPY que hasta ese momento desconocía. 

Esta herramienta permite ver todos los procesos que corren en el equipo en tiempo real, con todo y parámetros, lo que me hizo llegar a ella, es que básicamente no existía un exploit de kernel o aplicación vulnerable que me permitiera escalar privilegios de forma normal o común, sin embargo con la herramienta PSPY, vi que había un proceso de python que se ejecutaba frecuentemente.

De igual forma, no podía modificar nada de este proceso, puesto que solo tenía permisos de lectura, así que como escalar privilegios....? 😕

Gracias a la comunidad de HTB, me dieron a conocer una nueva técnica de privesc que es vulnerar una librearía de python (a la cual tenía permisos de escritura), misma que es empleada por varios scripts.. 



Cuando un programa en Python incluye una librería, esta ejecuta las instrucciones de código contenidas en la misma, por lo que, si teníamos un proceso que mandaba llamar un script hecho en Python, que invoca esta librería y que adicionalmente se ejecuta con permisos de root, era posible una escalación de privilegios.... 

Con lo cual, agregué al final del archivo os.py la siguiente instrucción  cat /root/root.txt > /home/friend/root.txt 



Finalmente pude obtener la bandera de root para este equipo 😎.   Es posible obtener un shell con altos privilegios en este equipo, solo es necesario cambiar la instrucción de CAT por un reverse shell en CLI y establecer un bind o reverse shell. 

No estaba tan familiarizado con estas técnicas lo cual me dejó bastante aprendizaje.  


PWNED!!




NOT BAD FOR A LAB RAT!!

Comentarios

Lo mas visto