Kenobi - TryHackMe
Summary
En este caso debemos encontrar dos banderas que están ubicadas en la maquina Kenobi. Donde realizaremos un escaneo de puertos con Nmap
y sus scripts. Llegando a encontrar el programa RPC nfs
levantado en la maquina Kenobi. Luego, llegamos a saber que nfs esta compartiendo el directorio /var del sistema Kenobi. Además, otros de los servicios levantados en la maquina Kenobi es SMB
. Donde a partir de los scripts de Nmap podemos saber algunos usernames validos. Luego, llegamos a descargar el archivo compartido por el servidor SMB, que nos indica que se ha creado una clave privada y publica SSH
para el usuario Kenobi. Además, llegamos a encontrar que el programa servidor SSH presenta el modulo mod_copy
habilitado que nos permite mover las claves privadas y publicas al directorio /var. De esta manera llegamos obtener acceso a la maquina Kenobi mediante la clave privada SSH. Luego realizamos una escalada de privilegios para ser el usuario root aprovechando que el archivo binario menu
tiene el permiso SUID
.
Fase Reconocimiento
Para resolver este ejercicio empezaremos utilizando el comando openvpn
con el fin de establecer una conexión VPN con la red virtual dónde está la máquina Kenobi. Para ello utilizaremos el archivo de configuración, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir información como la dirección del servidor VPN, los certificados y claves de seguridad, la configuración de encriptación, etc.
Luego de que se establece la conexión VPN se crea una interfaz virtual de red en nuestra máquina. Donde se enruta todo el tráfico de red a través de esa interfaz.
Además, la plataforma de Tryhackme nos muestra la dirección de la máquina Kenobi.
Fase Escaneo y Enumeracion
Luego pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del nodo. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo de la máquina Kenobi.Para ello utilizaremos Nmap
.Donde le pasaremos los siguientes parametros:
- El parametro -sC o –script=”default” para utilizar todos los scripts de la categoría default con el fin de realizar un escaneo y detección de los puertos de manera avanzada.
- Los parametros -O y -sV con el fin de conocer el sistemas operativos del nodo y las versiones de los servicios levantados.
- El parametro -n para evitar la resolución DNS, y el parametro –min-rate para indicarle el número de paquetes por segundo que va utilizar Nmap para el escaneo con el fin de evitar sobrecargar la red con el tráfico generado por Nmap.
- El parametro -p- para realizar un escaneo de los 65535 puertos del nodo y el parametro –open con el fin de que nos muestre información solo de los puertos abiertos.
- El parametro -oN para guardar el resultado del escaneo en un archivo de texto plano
Del resultado del escaneo podemos concluir que el servicio Rpcbind
, que es utilizado para asignar puertos a los programas en el sistema que utilicen el protocolo RPC con el fin de que puedan comunicarse entre sí, está levantado en el puerto 111.
Además, se ha utilizado el comando rpcinfo para obtener información sobre los programas RPC
que se han registrado con el servicio Rpcbind.
Además, uno de los programas RPC que se observa viene a ser el nfs
, que viene a ser un protocolo que permite compartir y acceder a directorios entre sistemas operativos basados en Windows y Linux/Unix.
Además, el protocolo nfs viene a ser de arquitectura cliente-servidor. Por lo tanto,hay un servidor nfs que comparte sus directorios y un cliente nfs que pueda montar esos directorios compartidos en sus directorios locales.
En nuestro caso la máquina Kenobi viene a ser un servidor nfs, y mediante el comando showmount puedo observar los directorios que comparte.
Observamos que el directorio var viene a ser el directorio compartido.
Además, ese * viene a decir que cualquier nodo de la red local puede acceder a ese directorio compartido.
Además, otro servicio que encontramos en el escaneo anterior viene a ser SMB
, levantado en el puerto 139 y 445. Además, el script smb-secuirty-mode.nse de Nmap
nos indica que se pudo autenticar al servidor SMB con el usuario guest.
Ahora utilizaremos un script de Nmap para poder listar los recursos compartidos del servidor SMB.
Podemos observar los recursos compartidos que llegó acceder el script utilizando al usuario guest.
Además,el recurso compartido anonymous está alojado en el directorio del home del usuario kenobi. A partir de esto podemos deducir que hay un usuario local en la máquina Kenobi llamado kenobi.
Además, el recurso compartido anonymous es del tipo STYPE_DISKTREE. Esto me indica que es un directorio.Por lo tanto, haremos un listado de los archivos que contiene utilizando el comando smbclient.
Llegamos a observar un archivo llamado log.txt que lo descargamos con el comando get.
Además, observando el contenido del archivo log.txt podemos deducir que se ha generado una clave privada y pública para el usuario kenobi.
A partir de esto podemos pensar en obtener la clave privada con el fin de poder autenticarnos con la clave privada al servidor SSH siendo el usuario kenobi.
Además, de acuerdo a los resultados obtenidos en el escaneo anterior podemos saber que hay un programa servidor FTP
levantado en la máquina Kenobi.
Fase Ganar Acceso o Explotacion
Buscando en el navegador sobre el programa servidor ProFTPD 1.3.5. Llegamos a encontrar que hay un módulo llamado mod_copy
que viene a ser un extensión de un servidor FTP que permite copiar el contenido de un directorio o archivo del servidor FTP en otra ruta del sistema que tiene el programa servidor FTP.
Además, llegamos a obtener un script que nos permite saber si el programa servidor ProFTPD 1.3.5 tiene habilitado este módulo.
Llegamos a observar los parametros que necesitamos pasarle al script para que se ejecute correctamente:
- La ruta del directorio o archivo que esta compartiendo el servidor FTP.
- La ruta, dentro del sistema Kenobi,en donde se movera el directorio o archivo que esta compartiendo el servidor FTP.
- El puerto en donde esta levantado el servicio FTP.
- La dirrecion ip de la maquina donde esta levantado el programa servidor FTP.
Aprovecharemos este módulo para poder desplazar el contenido del directorio .ssh, que contiene las claves pública y privada generadas para el usuario kenobi, hacia el directorio tmp que pertenece al directorio var.
Se logró copiar el contenido del directorio .ssh al directorio tmp.Ademas, se comprobo que el servidor FTP tiene habilitado el módulo mod_copy.
Ahora montaremos el directorio var, compartido por el servidor nfs que tiene la máquina Kenobi, en un directorio local de nuestra máquina.
Luego accediendo a nuestro directorio local privado podemos observar todos los directorios que contiene el directorio var. Donde podemos localizar el directorio tmp que contiene las claves públicas y privadas generadas para el usuario kenobi.
Luego copiaremos el contenido de la clave privada en un archivo privada.txt de nuestra máquina.
Además, le asignaremos un permiso 600 al archivo privada.txt con el fin de utilizarlo para conectarnos de forma remota utilizando el protocolo FTP, y siendo el usuario kenobi.
De esta manera llegamos a obtener acceso a la máquina Kenobi. Luego llegamos a encontrar la primera bandera, cuyo nombre es user.txt.
Fase Escalada de Privilegios
Luego pasaremos a la fase de escalar privilegios.Para ello buscaremos archivos binarios ejecutables con permiso SUID, que nos permite tener los permisos del propietario del archivo cuando lo ejecutamos.
Para la búsqueda de estos archivos utilizaremos el comando find para buscar los archivos desde el directorio /.
Para este caso utilizaremos el archivo SUID menu
para escalar privilegios. Primero ejecutaremos el archivo binario para conocer su funcionalidad.
Donde podemos observar que presenta tres funcionalidades. Si escogemos la primera funcionalidad se nos presentan los encabezados de una respuesta HTTP.
Para saber qué comandos se corren por detrás cuando ejecutamos el archivo, utilizaremos el comando strings para observar las cadenas de caracteres que son legibles para el ser humano.
Vemos que se utiliza el comando curl con el fin realizar una solicitud GET HTTP hacia el servidor web que se está corriendo en la máquina Kenobi, y imprimir la respuesta HTTP del servidor web. Además, se utiliza el parámetro -I para obtener solo los encabezados de la respuesta HTTP.
Además, vemos que no se especifica la ruta completa del archivo binario curl. Por lo tanto, podemos aprovechar esto para crear un archivo que se llame curl y cuyo contenido venga a ser la ruta del archivo ejecutable bash, esto se hace con el fin de cuando ejecutamos el archivo SUID menu y escogemos la opción 1, se ejecuta un sesión bash siendo el usuario root.
Ahora antes de ejecutar el archivo SUID menu, debemos modificar el PATH de la máquina Kenobi para que cuando el archivo menu ejecute el comando curl, el sistema encuentre nuestro archivo binario curl
modificado .Por lo tanto,debemos colocar en la parte inicial, la ruta de donde creamos nuestro archivo cut modificado, de la lista de directorios del PATH.
Además, le doy permiso 777 al archivo curl modificado.
Por último ejecutare el archivo SUID menu y escogere la opción 1,para que se genera una sesión Bash siendo el usuario root.
De esta manera llegamos a ser el usuario root. Luego llegamos a encontrar la segunda bandera, cuyo nombre es root.txt.