Enumeración
Para empezar, voy a realizar un escaneo de puertos con nmap:

Me encuentro con que el puerto 22 y 1337 se encuentran abiertos.
Voy a ingresar la dirección IP junto con el puerto 1337 en la url para ver de qué se trata:

Al revisar el código fuente de la página veo que hay un comentario, el cual indica que la convención de nombre de directorio comienza con hmr.

Lo que puedo hacer es realizar una búsqueda de directorios usando la herramienta ffuf:

Voy a ingresar en el directorio “logs” ya que fue el único que me llamo la atención y me encuentro con un archivo “error.logs”:

Al ingresar me encuentro con un registro de errores, el cual tiene información interesante:

Entre toda la información puedo leer el correo tester@hammer.thm.
Lo que se me ocurre hacer es ingresar en donde dice “Forgot your password?” y enviar este mail para ver que me devuelve.

Explotación
Bien, acá hay varios puntos a tener en cuenta, el primero es que tal como se indica el PIN tiene 4 dígitos, con lo cual va de (0000 a 9999), el segundo punto es que hay un limitante de tiempo, lo cual dificulta un posible ataque de fuerza bruta, el último punto a tener en cuenta es que si coloco más de 5 veces un PIN incorrecto me bloquea y por un tiempo no puedo volver a ingresar (esto lo sé porque haciendo pruebas me paso).
Lo que se me ocurre que puedo hacer es un ataque de fuerza bruta, el mismo generalmente lo suelo hacer con Burpsuite, pero al haber un limitante de tiempo no lo veo muy factible ya que burpsuite no se caracteriza por su velocidad (por lo menos la versión free).
Lo que voy a hacer es crear un código que itere entre todos los valores posibles de la forma más rápida que se pueda y para afrontar el problema de los bloqueos voy a pedirle que modifique la ip cada vez que realiza una solicitud.
Para explicar mejor el punto de las IP’s, cuando realizo varios intentos fallidos la página bloquea mi IP, ya que no estoy registrado con lo cual no hay una cuenta que bloquear, para zafar de esta lo que puedo hacer es enviar en el encabezado HTTP un parámetro llamado “X-Forwarded-For” el cual permite modificar la dirección IP del cliente.
Cree un nuevo archivo de nombre exploit.py con el siguiente código:

Lo ejecuté usando el comando python3 exploit.py y así logré obtener el PIN correcto.
Una vez ingresado el PIN me permite modificar la contraseña, podes elegir la contraseña que quieras, en mi caso elegí test123.
Una vez modificada la contraseña puedo ingresar con el mail y la nueva contraseña para así obtener la bandera:

Escalada de Privilegios

Ahora me enfrento a 2 cuestiones, la primera es que únicamente me permite listar, pero no puedo acceder ni navegar ya que no tengo los permisos necesarios, la otra cuestión es que la sesión dura solamente unos segundos y luego se cierra, con lo cual se hace muy tedioso navegar.
Para solucionar el inconveniente del tiempo de sesión se me ocurrió que tal vez pueda realizar la solicitud desde burpsuite y así evitar el cierre de sesión.
Para lograr esto ingrese un comando en el input e intercepte la comunicación con burpsuite para tomar los encabezados y usar esa información:

Ahora resta tratar de obtener mayores permisos para poder ejecutar más comandos.
Investigando un poco vi que la pagina usa jwt, el cual es un token de sesión que se utiliza entre otras cosas para otorgar permisos. Copie el token y lo pegue en jwt.io para ver qué información contiene:

Por lo que veo estoy usando el rol de usuario, es probable que si modifico ese rol por ‘admin’ logré obtener los permisos que necesito:

Al intentar de esta manera recibo el error:
“Invalid token: key file not found”
Por lo que entiendo del mensaje de error me dice algo de que la key no se encuentra, me acuerdo que al listar los archivos en la página había uno que se llamaba 188ade1.key. Al ingresar en la url {ip}:1337/188ade1.key se me descarga un archivo el cual contiene una clave: 56058354efb3daa97ebab00fabd7a7d7, esta clave es la que se utiliza para proteger el token.
Por otro lado, voy a modificar la ruta del parámetro kid para que apunte directamente al archivo 188ade1.key.
Al realizar esas modificaciones en jwt.io obtengo el siguiente token:

Ahora vuelvo a burpsuite para enviar este token y mostrar el contenido de /home/Ubuntu/flag.txt y así encontrar la bandera:

Espero que este tutorial te haya ayudado!