
Acerca de TwoMillion.
TwoMillion es una caja Linux de fácil dificultad que fue lanzada para celebrar el haber alcanzado los 2 millones de usuarios en HackTheBox. La caja presenta una versión antigua de la plataforma HackTheBox que incluye el antiguo código de invitación hackeable. Después de hackear el código de invitación se puede crear una cuenta en la plataforma. La cuenta puede utilizarse para enumerar varios puntos finales de la API, uno de los cuales puede utilizarse para elevar al usuario a la categoría de administrador. Con acceso administrativo, el usuario puede realizar una inyección de comandos en el punto final de generación de VPN admin, obteniendo así una shell del sistema. Un archivo .env contiene credenciales de base de datos y debido a la reutilización de contraseñas, los atacantes pueden iniciar sesión como usuario admin en el equipo. El kernel del sistema se encuentra desactualizado y CVE-2023-0386 puede ser utilizado para obtener un shell de root.
Matriz de la máquina.
*Características de explotación de la máquina.

*Tiene una sola actualización hasta la fecha .

Comienzo enumerando los puertos, servicios y versiones.
rustscan -a 10.10.11.221 -- -sCV -oN scan.txt

nota: diferencias a tener en cuenta sobre rustscan y nmap.
Nmap está desarrollado en C y utiliza Lua para su motor de scripts NSE, lo que le otorga gran flexibilidad y robustez, un lenguaje eficiente y de bajo nivel que permite un control detallado sobre la memoria y el hardware, mientras que Lua facilita la creación de scripts personalizados para análisis avanzados. Esto hace de Nmap una herramienta robusta, con una extensa biblioteca de scripts. Sin embargo, su diseño prioriza la funcionalidad y precisión sobre la velocidad inicial, lo que puede hacerlo más lento en tareas simples.
RustScan está escrito en Rust, un lenguaje moderno enfocado en rendimiento, seguridad. Rust evita problemas comunes de C, como fugas de memoria o condiciones de carrera, y aprovecha al máximo los sistemas multi-core, lo que lo convierte en una herramienta extremadamente rápida para escaneos iniciales de puertos. A pesar de su velocidad y seguridad, RustScan tiene funcionalidades más limitadas en comparación con Nmap.
Este escenario tiene una pequeña similitud conrespecto a las herramienta nc en C y rcat en Rust (de xct: https://github.com/xct/rcat) en algunas oportunidades con el team tuvimos inconveniente a la hora de usar netcat en entornos widnows por el AV y lo solucionamos usando rcat.

1) Superior a la version 6.9 que permite enumerar usuarios. apartir de la version 7.0 se implemento la opcion UsePAM, que permite utilizar el ‘Pluggable Authentication Module (PAM)’ para manejar la autenticación.
2) Nginx sin la version.
3) Los metodos que podriamos utilizar por medio de curl, burpsuite y automatizar por medio de bash y python.
4) Nombre de dominio.
Adjunto la dirección IP al nombre de dominio para facilitar un manejo más eficiente en la web. Esto nos permite acceder a recursos que podrían no estar disponibles al utilizar solo la dirección IP.
echo '10.10.11.221 2million.htb' | sudo tee -a /etc/hosts

Al ingresar al dominio percibo que tiene dos puntos de acceso que me interesa /login e /invite. En este punto, sabemos que es via web y debemos identificar el punto de apoyo inicial.

/login.

/invite.

Verifico servicios web que estén corriendo.
whatweb http://2million.htb

Enumero directorios y archivos, tanto presentes como ocultos en la web.
feroxbuster -u http://2million.htb/ -w /usr/share/dirbuster/directory-list-2.3-medium.txt -t 50 -s 200
Encontre una pista de lo que podría llegar hacer el punto de entrada por el nombre inviteapi.min.js .

Verifico que el código de JavaScript esta presente para /invite,
igual es muy obvio por el nombre, pero no está mal aclararlo.
*Opte de esta manera para que sea mas fácil evidenciarlo.

Se encuentra ofuscado.

Utilizo la herramienta de4js para visualizar y analizar el contenido.

Ambas funciones realizan solicitudes AJAX al servidor. Lo interesante en este codigo es la segunda parte que podemos realizar solicitudos POST al endpoint para generar el codigo de invitacion por medio de la funcion makeInviteCode() apuntando a /api/v1/invite/how/to/generate podemos entender como una pista del creador al nombrar los directorios en la api /how/to/generate.


Verifico la solicitud y por parte del creador nos brinda otra pista.

El mensaje nos indica, Para generar el código de invitación, haga una petición POST a /api/v1/invite/generate.

Envio la solicitud POST que devuelve un código en formato Base64. Decodifico este código y obtengo la invitación necesaria para /invite.

Por medio de la invitacion accedo a la ruta /register, para registrarme.

Accedo al /home. El siguiente objetivo es obtener acceso al dashboard como administrador o encontrar vulnerabilidades como LFI + RCE o RCE. Dado que la máquina está categorizada como easy, es probable encontrar estas vulnerabilidades.

De esta manera, puedo visualizar rápidamente los directorios presentes en el HTML de /home.

Dentro de /access puedo descargar la VPN.

Descargo la VPN.

Logro acceder al punto de entrada de la /api respondiendo la version en la que funciona /v1.

Obtengo todas las funciones en /api/v1 disponibles.

Por medio de las funciones de la /api puedo deducir que la intencion para elevar nuestro privilegio en admin es por medio de los endpoint /api/v1/admin/vpn/generate (podriamos generar la vpn de admin, que no tiene mucho sentido) y ‘api/v1/admin/settings/update (para modificar elevar nuestro privilegio en admin.)
Utilizando el motodo PUT (resaltado en el escaneo de nmap inicial (para subir archivos)) en el endpoint /api/v1/admin/settings/update, envie en el cuerpo de la solicitud el emeil de registro(usuario) y lo mas importante el atributo is_admin y descubriendo que el valor 1 = true permitiendo actualizar a cualquier usuario en admin.

Logre obtener RCE por medio de sleep, al lograr dormir el response por 5 y 15 segundos.
Interrumpi el response por 5 segundos.

Interrumpi el response por 15 segundos.

Logro ver el /etc/passwd.

Logrando escalar desde la web al servidor mediante un payload, ganando una revshell (acceso a una terminal) con el usuario www-data.

A continuacion, sanitice el entorno estableciento el tipo de terminal, usuario actual, grupos que pertenece, usuarios conectados al sistema e informacion del sistema y liste directorios presentes y ocultos.

Encontre las credenciales en texto plano en el directorio .env.

Pruebo las credenciales del usuarioa admin por ssh.

Gano flag user

Utilizo la herramienta linPEAS y visualizo un correo.

Me encuentro con una conversacion informando de vulnerabilidades criticas existentes en el kernel.

Verifique anteriormente el kernel y la version.
Linux 2million 5.15.70-051570-generic #202209231339 SMP Fri Sep 23 13:45:37 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
La vulnerabilidad de la que hablan es CVE-2023-0386.
https://github.com/xkaneiki/CVE-2023-0386

Compilo el exploit y ejecuto el comando para interactuar con el sistema de archivos de OverlayFS, utilizando la biblioteca FUSE.

Ejecuto el exploit exp escalando a root.

Gano flag de root.

La vulnerabilidad se produce cuando el kernel copia un archivo desde el sistema de archivos OverlayFS a la “capa superior” sin verificar si el usuario o grupo que posee el archivo esta mapeado en el espacio de nombres de usuario actual. Esto permite que un usuario no privilegiado “introduzca” un binario SUID (Set User ID) desde una carpeta inferior a una carpeta superior.

Se observa el error que produce en el kernel al intentar ver los permisos del directorio.

Se nota la diferencia al verificar los permisos desde el usuario admin.

Mensaje del creador!
Estimada comunidad de HackTheBox,
Estamos encantados de anunciar un hito trascendental en nuestro viaje juntos. Con inmensa alegría y gratitud, celebramos el logro de haber alcanzado los 2 millones de usuarios notables. Esta increíble hazaña no habría sido posible sin todos y cada uno de vosotros.
Desde el principio, HackTheBox se ha basado en la creencia de que el conocimiento y la experiencia práctica son fundamentales para el crecimiento personal y profesional. Juntos, hemos fomentado un entorno en el que prospera la innovación y se perfeccionan las habilidades. Cada reto superado, cada máquina conquistada y cada habilidad ha contribuido a la inteligencia colectiva que alimenta esta vibrante comunidad.
A todos y cada uno de los miembros de la comunidad HackTheBox, gracias por formar parte de este increíble viaje. Vuestras contribuciones han dado forma al tejido mismo de nuestra plataforma y nos han inspirado para innovar y evolucionar continuamente. Estamos inmensamente orgullosos de lo que hemos logrado juntos, y esperamos con impaciencia los innumerables hitos que están por por venir.
Por el próximo capítulo, en el que seguiremos superando los límites de la ciberseguridad, inspirar a la próxima generación de hackers éticos y crear un mundo en el que el conocimiento sea accesible para todos.
Con profunda gratitud,
El equipo de HackTheBox
You must be logged in to post a comment.