deviltrigger@home:~$

Previous WriteUp Hack The Box

Introducción

Previous es una máquina de HackTheBox de dificultad media. Para resolverla, tendremos que enumerar todos los puertos y servicios expuestos. En la aplicación web, veremos un inicio de sesión y una versión vulnerable del framework Next.js. Al realizar fuzzing, explotaremos esta vulnerabilidad y encontraremos credenciales incrustadas en el código.

Una vez accedamos a SSH con la cuenta del usuario y realicemos otra enumeración del sistema, descubriremos que el usuario puede ejecutar el programa Terraform como administrador del sistema. Modificaremos archivos de configuración y un archivo que nos permitirá escalar privilegios, de modo que al ejecutarlo obtendremos privilegios de administrador y capturaremos la flag final.

Previous

Reconocimiento

Comenzando con nmap, descubriremos que están abiertos el puerto 22 (SSH) y el puerto 80 (HTTP con nginx 1.18.0).

1

No podremos acceder al puerto 22 porque no conocemos ninguna de las credenciales. Al acceder al puerto 80, encontraremos dos botones (“Get Started”) que nos redirigen al mismo sitio.

2

A simple vista, no encontraremos nada útil, pero al fijarnos en la URL, vemos que está buscando en la máquina el archivo “Docs”.

3

Enumerando con la extensión de navegador Wappalyzer, encontraremos la versión de Next.js que utiliza la aplicación.

4

Explotación

Una vez finalizada toda la enumeración, buscaremos y encontraremos una prueba de concepto como esta del usuario alihussainzada:

Prueba de concepto

Esta prueba de concepto demuestra que el framework Next.js es vulnerable a la cabecera x-middleware-subrequest. Sabiendo esto, utilizaremos herramientas para hacer fuzzing, como dirsearch, añadiendo el parámetro -H para incluir la cabecera.

Con un poco de paciencia, encontraremos el directorio api y dentro de él, download.

5

Download puede ser el directorio que lista los contenidos de la web. Nos falta encontrar el parámetro que utiliza para listar archivos. Utilizando la herramienta ffuf, podremos realizar fuzzing nuevamente para encontrar el parámetro.

6

Sabiendo el directorio y el parámetro, hacemos una prueba de concepto para demostrar que es vulnerable a Local File Inclusion.

7

Ahora toca enumerar los archivos hasta encontrar bases de datos o credenciales para acceder a la máquina. Lo primero y más importante es conocer cómo se estructura un proyecto de Next.js. En esta web podremos ver qué archivos y carpetas se crean al generar un proyecto nuevo:

Documentación de Next.js

Conociendo un poco más la aplicación, encontraremos este archivo, que nos indica las variables de entorno.

9

Al seguir enumerando la máquina, encontramos este archivo que puede sugerir dónde están las credenciales.

10

El archivo tiene caracteres especiales en el nombre, así que tendremos que codificarlo a URL para poder listar el archivo sin problemas. Cuando veamos su contenido, nos costará mucho leerlo, así que debemos utilizar páginas web como “js-beautify” para facilitar la lectura.

11

Pegando el contenido del archivo y pulsando en el botón de “Beautify Code”, se nos facilitará la lectura.

12

En el contenido del archivo, podremos ver credenciales. Probaremos a iniciar sesión con ellas.

13

Hemos podido acceder al SSH; ahora podremos obtener la primera flag.

14

Escalada de privilegios

Una vez accedido al usuario jeremy, tendremos que buscar algo que nos permita escalar privilegios. En este caso, el programa Terraform puede ser ejecutado por jeremy con privilegios de administrador.

15

Investigamos cómo funciona la aplicación Terraform. Para ejecutar esta aplicación, es necesario utilizar un directorio para aplicar una configuración. Si visualizamos el código, aprenderemos que necesita un archivo “examples”.

16

Mirando otros archivos, podemos encontrar uno que nos enseña cómo la aplicación gestiona la infraestructura de la máquina.

17

Dentro del directorio de jeremy, hay un archivo oculto llamado .terraformrc.

18

Podemos editarlo para añadir un archivo que nos permita escalar privilegios.

19

Creamos un archivo en C simple que mejorará nuestra shell con permisos de administrador.

20

Lo compilamos con gcc.

21

Finalmente, lo ejecutaremos. Puede dar un fallo indicando que no ha podido cargar algunas estructuras, pero lo importante es que nuestro payload sí se ha cargado.

22

Ejecutando el comando bash -p, mejoraremos la shell y obtendremos la segunda flag.

23

Conclusión

En la máquina Previous, realizamos una enumeración de puertos y servicios, lo que nos permitió identificar la vulnerabilidad en el framework Next.js. A través de fuzzing, descubrimos el directorio api y el parámetro necesario para realizar Local File Inclusion, lo que nos llevó a obtener credenciales incrustadas en el código. Con estas credenciales, accedimos a SSH como jeremy y obtuvimos la primera flag.

El reconocimiento de después reveló que jeremy podía ejecutar Terraform con privilegios de administrador. Modificamos el archivo de configuración .terraformrc para incluir un script que nos permitiera escalar privilegios. Al ejecutar este script, logramos obtener una shell con permisos de administrador, lo que nos permitió capturar la flag final.

ken