TwoMillion HackTheBox (Easy)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>nmap -sCV -p<PORTS> <IP>Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-30 04:53 EDT
Nmap scan report for 10.10.11.221
Host is up (0.27s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_ 256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open http nginx
|_http-title: Did not follow redirect to http://2million.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.07 secondsVeremos que hay varios puertos entre ellos el 80 el cual nos esta redirigiendo a un dominio llamado 2million.htb, vamos añadirlo en nuestro archivo hosts.
Lo guardamos y entramos a dicho dominio, entrando dentro del mismo veremos una pagina web la cual se dedica a pentesting de forma ética de tipo laboratorios, etc...
Veremos que hay un login en el panel de arriba, si entramos dentro de dicha opcion, veremos lo siguiente:

Pero no tenemos ninguna cuenta para acceder y tampoco vemos que haya un registro de cuentas en algun boton, por lo que vamos a realizar un poco de fuzzing para ver que vemos.
Gobuster
Info:
Veremos muchas cosas interesantes, pero entre ello veremos un register por lo que vamos a entrar ahi, a ver si podemos crear una cuenta.
Info:

Dentro efectivamente nos podremos registrar, por lo que vamos a rellenar todos los datos y a registrarnos con un usuario.
Pero si le damos a registrar, nos pedira un codigo de invitacion primero el cual no tenemos, recordemos que encontramos otro recurso llamado /invite en el cual si entramos pone que pongamos un codigo de invitacion valido pero lo seguimos sin tener, si inspeccionamos el codigo veremos un .js llamado inviteapi.min.js dentro veremos lo siguiente:
Si lo analizamos vemos que esta ofuscado en Dean Edwards' Packer si lo deofuscamos con IA veremos lo siguiente:
Veremos que podemos generar un codigo de invitacion, tambien vemos que nos da instrucciones de como generarlo, por lo que vamos a obtener dichas instrucciones de esta forma:
Info:
Vemos que esta encriptado en ROT13 si lo decodificamos veremos lo siguiente:
Vamos a montarnos un pequeño script para que lo automatice todo esto:
generateCode.py
Ahora lo ejecutamos de esta forma:
Info:
Veremos que ha funcionado, pero nos lo codifica en base64 por lo que lo tenemos que decodificar:
Info:
Ahora si ese codigo lo metemos en el campo de /invite veremos que nos redirige al register con el codigo de invitacion ya:

Una vez metiendo todos los datos, vamos a registrarnos, echo esto nos redirige al login y veremos que funciona, una vez logueados veremos lo siguiente:

Estamos en un panel de control con nuestro usuario, si nos vamos a access veremos un panel en el que nos podemos descargar una vpn para conectarnos desde nuestra maquina a la red de la pagina, pero vemos en el siguiente link como esta descargando la vpn:
Vemos que atraves de esa URL esta generando la vpn con nuestro usuario, pero si probamos a cambiar user por admin veremos una pantalla en blanco como que algo esta funcionando, pero no nos descarga nada, si nos vamos a la configuracion de la API.
Info:

Veremos varias cosas interesantes, vamos aprovechar esto para probar a ver que nos devuelve el update:
Info:
Ya sabemos como rellenar el contenido para que funcione, por lo que haremos lo siguiente, al registrar el email de nuestro usuario tendremos que ponerlo en ese parametro email:
Info:
Veremos que ahora nos falta el parametro is_admin, por lo que haremos esto:
Info:
Nos pone que tiene que ser 1 o 0, por lo que elegiremos 1 para que sea admin nuestro usuario.
Info:
Vemos que ha funcionado, por lo que ya seremos admin con dicho usuario, ahora si entramos al panel con dicho usuario de nuevo veremos lo de siempre, vamos a probar a generar la vpn desde nuestra terminal.
Info:
Vemos que requiere de un nombre de usuario, si se lo pasamos:
Info:
Nos lo genera bien, pero no nos interesa esto, vamos a probar a realizar un comman injection a ver si funciona, ya que por detras se esta ejecutando un comando y posiblemente comentando lo siguiente y concatenando un comando podremos ejecutar comandos en el sistema de esta forma:
Info:
Vamos a realizar una reverse shell de esta forma, antes nos pondremos a la escucha:
Ahora vamos a ejecutar lo siguiente:
Si volvemos a donde tenemos la escucha, veremos lo siguiente:
Vemos que ha funcionado, por lo que sanitizaremos la shell.
Sanitización de shell (TTY)
Escalate user admin
Si leemos el archivo Database.php veremos esto:
Vemos que se estan guardando en variables las cosas y si listamos la misma carpeta, veremos este archivo:
Info:
Vemos que hay un archivo que contiene las variables, si lo leemos veremos lo siguiente:
Vamos a conectarnos a la DDBB gracias a estos datos:
Info:
Pero no veremos nada interesante, vamos a probar si esta contraseña es reutilizable por SSH para dicho usuario.
Metemos como contraseña SuperDuperPass123...
Veremos que ha funcionado, por lo que leeremos la flag del usuario.
user.txt
Escalate Privileges
Si investigamos bastante veremos que en el siguiente directorio hay una nota:
Info:
Vemos que nos dice que hay un CVE asociado al kernel de la maquina victima, si vemos que version es:
Info:
Investigando sobre dicha version de kernel veremos que si es vulnerable a lo que pone en la nota, en la siguiente pagina nos muestra los pasos a seguir par explotarla (CVE-2023-0386).
URL = Exploit PoC CVE-2023-0386
Vamos hacer lo siguiente, primero nos vamos a la carpeta /tmp.
Despues en nuestra maquina atacante:
Una vez comprimido nos lo pasamos por un servidor de python3 de esta forma:
En la maquina victima haremos esto:
Una vez descomrpimido nos metemos dentro de la carpeta y lo compilamos de esta forma:
Una vez compilado, lo ejecutaremos de esta forma:
Info:
En la segunda terminal ejecutamos este otro binario:
Info:
Con esto veremos que ya seremos root, por lo que leeremos la flag de root.
root.txt
Last updated