Navega hasta jewel.uploadvulns.thm y encuentra la flag en /var/www.

  1. Vamos a la página dada. Challenge Si nos quedamos unos segundos parados, podemos ver que en realidad las imágenes se van moviendo, es decir, que es un carrusel que la página va cargando. Por desgracia, en el html de la página no pone desde dónde se están cargando estas imágenes.
  2. Vamos a lanzar un escaneo contra la página. Challenge
  3. Buscaremos filtros JavaScript del lado del cliente. Challenge Metiéndonos en el Debugger, podemos observar algunos scripts JavaScript. En concreto uno que se llama upload.js nos da una pista de que está siendo llamado al intentar subir un archivo. Si revisamos el script, tiene hasta comentarios por lo que no hace ni falta saber JS. Está utilizando:
    1. Un filtro de tamaño.
    2. Un filtro de Magic Numbers.
    3. Un filtro de extensión de archivo.
  4. Vamos a intentar subir nuestro archivo reverseshell.php.
    1. Primero vamos a modificar el archivo para que se ajuste a nuestra IP y puerto (/usr/share/webshells/php/php-reverse-shell.php). Y ahora vamos a cambiarle la extensión a .jpg. Challenge
    2. Ahora modificamos los magic numbers con hexeditor. Challenge
    3. Lo guardamos y lo subimos. Challenge Vaya, parece que hemos sobrepasado del tirón los filtros del lado del cliente y del lado del servidor. Porque no olvidemos que acabamos de subir una reverse shell.
  5. Si nos fijamos en el escaneo podemos ver unas cuantas páginas interesantes. La más interesante parece /admin. Challenge Parece una página que ejecuta código.
  6. También hay otra que se llama /content. Si combinamos esta información con lo que podíamos ver en el apartado de "Network" en la página del carrusel podemos ver el tipo de nombre que tienen las imágenes guardadas en este directorio. Challenge Ademas nos dan un diccionario en la actividad que va desde AAA → ZZZ.
  7. Vamos a lanzar un escaneo de archivos .jpg con dicho diccionario sobre jewel.uploadvulns.thm/content/. Challenge
  8. Basándonos en el tamaño de nuestra shell, podemos concretar que YBW.jpg es, de hecho, nuestra shell. Challenge
  9. Nos ponemos en escucha. Challenge
  10. Volvemos a la página de /admin e intentaremos ejecutar nuestra shell. Challenge
  11. Parece que no funciona. Challenge
  12. Hacemos más reconocimiento. Challenge Parece que no usa PHP, sino Node.js, hay que cambiar de reverse shell.
  13. Vamos a Reverse Shell Generator. Challenge
  14. Realizamos el proceso de modificación de extensión y magic numbers entero otra vez, subimos el archivo nuevo y realizamos otro escaneo con el diccionario proporcionado. Challenge Basándonos en el escaneo anterior podemos determinar que el archivo que acabamos de subir es CDB.jpg.
  15. Cargamos el archivo nuevo estando en escucha. Challenge Tampoco ha funcionado. Challenge
  16. Vamos a probar con una shell de Payloads All The Things. Repetimos los pasos. Challenge
  17. Tampoco ha funcionado por lo que debe ser un tema de los magic numbers. Para evitar tener que ponerlos tenemos que usar Burp Suite para quitar ese JS que bloquea del lado del cliente.
    1. Abrimos Burp Suite y le damos a Proxy → Proxy settings. Challenge
    2. Ahí le damos a la primera línea y a "Edit". Challenge
    3. Eliminamos ^js$|. Challenge
    4. Capturamos las peticiones de la página de subida. ES MUY IMPORTANTE RECARGAR LA CACHE (Ctrl+Shift+R). Challenge
    5. Le damos a forward hasta que nos aparezca upload.js y le damos a intercept this request. Challenge
    6. Le damos a forward y recibiremos la respuesta. Challenge
    7. Eliminamos los checks. Challenge
    8. Le seguimos dando a forward hasta que cargue la página. Challenge
    9. Ahora vamos a subir la shell de node.js sin los magic numbers. Challenge
    10. Escanearemos el contenido de nuevo. Challenge Sabemos que el archivo es PYL.jpg.
  18. Lo ejecutamos. Challenge
  19. Leemos la flag. Challenge