🟢TwoMillion
Write-up de la máquina TwoMillion de HackTheBox #writeup #walkthrough
Last updated
Write-up de la máquina TwoMillion de HackTheBox #writeup #walkthrough
Last updated
Dos puertos abiertos, vamos con la enumeración detallada de estos servicios.
VERSIONES
Puerto 22 -> SSH -> OpenSSH 8.9
Puerto 80 -> HTTP -> nginx
El equipo objetivo está ejecutando un servidor Web en el puerto 80. Vamos a enumerar su contenido.
Parece el sitio Web de una plataforma de CTF. Continuamos enumerando directorios y archivos interesantes en el sistema.
Solo vemos algo interesante en /register.
Se solicita un "Invite code". Seguimos enumerando de forma manual el sitio Web.
Vamos a analizar el código fuente de este sitio Web para buscar vectores de entrada.
Abrimos el archivo señalado y copiamos el contenido en beautifier.io para hacer el código leíble.
Observamos la función "makeInviteCode" para comprobar como se genera el "Invite code".
Encontramos un mensaje cifrado en ROT13. Vamos a descifrarlo utilizando el sitio Web rot13.com.
Obtenemos el mensaje "In order to generate the invite code, make a POST request to /api/v1/invite/generate" Volvemos a realizar una solicitud POST a /api/v1/invite/generate usando curl.
Obtenemos un valor cifrado en base64. Vamos a tratar de generar la misma petición pero descifrando este serial.
Finalmente, obtenemos el código de invitación. Ahora vamos a tratar de registrarnos en la plataforma.
Accedemos al sitio Web original de la plataforma Hack The Box. El sitio informa que está realizando migraciones de base de datos y que algunas funciones no están disponibles. En realidad, esto significa que la mayoría de las funciones no están disponibles. Los enlaces del "Panel de control", "Reglas" y "Registro de cambios" bajo la sección "Principal" funcionan y redirigen a páginas que recuerdan la apariencia original de HTB. Bajo la sección "Laboratorios", el único enlace que realmente funciona es la página de "Acceso", que lleva a /home/access. Después haremos clic en "Connection Pack" o en "Regenerate" para envia una petición enviar una GET a a la API /api/v1/user/vpn/regenerate.
Vamos a jugar con la API. Si lanzamos una petición a /api/v1, devuelve una descripción de la petición a la API.
Donde encontramos la dirección de la API donde se realizan las consultar para comprobar si un usuario es admin: /api/v1/admin/auth. Vamos a enumerar la API de administrator.
Ya sabemos que no somos usuario administrador. Vamos a jugar con las diferentes peticiones que se indican en la descripción de la API.
Para representar datos estructurados, debemos indicar Content-Type: json
Le debemos indicar un email como parámetro. Le indicaremos el que hemos utilizado para registrarnos.
Nos pide indicar si el usuario "id_admin". Se indica con un 0 o 1.
Tras hacer esto, vamos a confirmar que somos admin.
Ahora el siguiente paso será generar una VPN con usuario admin.
Nos pide un nombre de usuario para generar la VPN.
Hemos generado un archivo de configuración de VPN. Dado que se utilizan las funciones PHP del sistema o exec para crear esta VPN, es posible que no existan todas las protecciones necesarias para evitar que se inyecte código malicioso en el campo de username. Insertando el comando ;id; después del nombre de usuario, comprobamos que es correcta nuestra suposición.
Parece que podemos inyectar comandos, vamos a utilizar este vector para tratar de ejecutar una reverse shell de la siguiente forma:
Configuramos por otro lado un oyente nc en el puerto 1234.
Y obtenemos acceso al sistema.
Enumerando el directorio al que hemos obtenido acceso vía shell, vemos un archivo .env que puede ser interesante. Este archivo suele contener credenciales, hashes... Veamos su contenido.
Encontramos unas credenciales para el usuario admin. admin:SuperDuperPass123. Vamos a tratar de acceder al sistema con estas credenciales.
Obtenemos acceso como usuario admin. Vamos a buscar la flag de usuario user.txt. Aunque antes de seguir avanzando, vamos a hacer la terminal interactiva.
Una vez hemos accedido al sistema con bajos privilegios y hemos obtenido la flag user.txt, vamos a tratar de elevar privilegios dentro del sistema. Al acceder al sistema a través de SSH con las credenciales que obtuvimos anteriormente, encontramos el siguiente mensaje.
Parece una notificación de email. La carpeta de email suele esta en el directorio /var/mail. Veamos su contenido.
"I'm know you're working as fast as you can to do the DB migration. While we're partially down, can you also upgrade the OS on our web host? There have been a few serious Linux kernel CVEs already this year. That one in OverlayFS / FUSE looks nasty. We can't get popped by that. " Parece que existe una vulnerabilidad crítica en el kernel de Linux. Vamos a buscar información sobre ella.
Si buscamos en Google información sobre esta vulnerabilidad, encontramos en CVE-2023-0386
Encontramos el siguiente exploit en GitHub. Vamos a tratar de utilizarlo para la elevación de privilegios. Descargamos el POC en un archivo ZIP. Lo enviamos a la máquina objetivo haciendo uso de scp.
Ya tenemos el archivo en el equipo objetivo.
Descomprimimos el archivo y accedemos al directorio creado.
Como indica el archivo README.md, ejecutamos make all
para compilar todos los archivos necesarios.
Vamos a explotar la vulnerabilidad. En la misma terminal de comandos donde nos encontramos, ejecutamos lo siguiente:
Y por otro lado, abrimos otra terminal dentro de la máquina víctima, volvemos a acceder al directorio creado cuando hemos descomprimido el ZIP del exploit y ejecutamos ./exp
Ya tendremos acceso al sistema como usuario con privilegios elevados. Vamos ahora a buscar la flag root.txt.
Y ya tendríamos acabada la maquina TwoMillion de HTB.