Twomillion - Hack The Box
Esta máquina es catalogada como fácil, me trajo algo de nostalgia, ya que cuando empecé con esto del Hacking y a jugar en Hack The Box, para poder registrarnos a la plataforma teniamos que realizar estos mismo pasos y obtener el código de invitación, es decir para hackiar tenias que hackiar :v ( Que Buenos Recuerdos !! ). Bueno como dije el código de invitación es para poder registrarnos a la plataforma, dentro vamos a encontrar un apartado donde podemos interactuar con una API, con ella cambiaremos nuestro rol al de admin para ver cierta ruta, con eso vamos a tener RCE, en local para migrar al usuario admin encontramos un archivo con credenciales, y escalaremos privilegios con un CVE adecuado.
Reconocimiento
Directorios de trabajo
1
2
3
mkdir twomillion
cd twomillion
mkdir nmap content exploit
nmap
1
sudo nmap -p- --open -sS --min-rate 5000 -Pn -n -sCV 10.10.11.221 -oN version-port
version-port
1
2
3
4
5
6
7
8
9
10
11
12
Nmap scan report for 10.10.11.221
Host is up (0.095s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3eea454bc5d16d6fe2d4d13b0a3da94f (ECDSA)
|_ 256 64cc75de4ae6a5b473eb3f1bcfb4e394 (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
- 22: ssh
- De momento no voy a tocar este puerto, no cuento con credenciales y la versión de OpenSSH no parece tener una vulnera bilidad conocida “De momento, claro”
- 80: http
- El servicio http está relacionado con la web.
80: http
http
Al parecer hace un redirect a http://2million.htb/ pero mi equipo no sabe resolver a esa dirección, para eso, tengo que retocar el archivo /etc/host
/etc/hosts
1
2
3
4
5
6
7
8
9
# Host addresses
127.0.0.1 localhost
127.0.1.1 parrot
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# Others
10.10.11.221 2million.htb
Ahora hagamos algo de reconocimiento web para identificar tecnologías, gestores de contenido y otras cosas con herramientas bás icas como ( whatweb , wappalyzer )
1
whatweb 10.10.11.221
whatweb
Listo ahora veamos cómo luce la página desde firefox
firefox
Con el plugin Wappalyzer podemos darnos idea de las cosas que funcionan tras el servidor web
wappalyzer
Bueno por ahora nada valioso, solo que usa PHP como lenguaje de programación, y que la página se ve como era hace un par de años. Después de un par de minutos viendo las pestaña en la web, hay una interesante que dice (join)
y esto no lleva a un apartado donde nos pide un código de invitación
Lo que hago en este punto es echar un vistazo al código fuente, y en las últimas líneas veo algo interesante, en javascript
Hay una ruta /js/inviteapi.min.js
que me lleva a un codigo ofuscado
Encontré esta página https://beautifier.io/ que me va ayudar a desofuscar el javascript
Como resultado tenemos esto, y ya puedo leer algo curioso
- Método “POST”
- path
/api/v1/invite/how/to/generate
- cómo generar código de invitación
Desde la terminal, podemos hacer eso
1
curl -s -X POST http://2million.htb/api/v1/invite/how/to/generate | jq
Hay un texto que nos habla de ROT13 , decodificando el mensaje llegamos a la conclusión de que no era /api/v1/invite/how/to/generate
si no /api/v1/invite/generate
Con esto si nos da algo en base 64, y con una linea puedo decodificarlo
1
echo QUcyUVctOFBaVUgtV1JSTEstT0tVQzY= | base64 -d ;echo
Listo con el código podemos ponerlo en la web, y eso nos lleva a un apartado para poder registrarnos, una vez nos logiemos vamos a ver lo siguiente
La mayoria de los botones me llevan al /home
hasta que veo Access
que me lleva a /access
y eso tiene que ver con la descarga de la VPN para poder conectarnos y tener visibilidad con las máquinas “claro en el entorno real de Hack The Box”, en este punto estuve tocando un rato este apartado pero solo se descargaba el archivo .ovpn, lo curioso es que este apartado estaba algo oculto, como dije los otros botones solo me llevan al /home
y este y el único que me lleva a otra cosa
Bueno es hora de ayudarnos con BurpSuite
, jugando un rato en el Repiter
de BurpSuite Capturo el trafico y como comentaba , solo se puede ver como se descarga el archivo .ovpn
BurpSuite
Toqueteando un poco las rutas, obtenia esto
probaba con
- /api/v1/user/vpn/regenerate
- /api/v1/user/vpn/
- /api/v1/user/vpn
- /api/v1/user/
- /api/v1/user
- /api/v1/
y con /api/v1
tengo algo llamativo
En resumen pordemos interactuar con la API
Método GET
- /api/v1
- lista las rutas
- /api/v1/invite/how/to/generate
- /api/v1/invite/generate
- estas dos rutas la tocamos cuando buscamos el código de invitación
- /api/v1/invite/verify
- verifica el código de invitación
- /api/v1/user/auth
- mira si el usuario está autenticado
- /api/v1/user/vpn/generate
- /api/v1/user/vpn/regenerate
- /api/v1/user/vpn/download
- estas están relacionadas con la vpn cosa que no tiene interes por ahora
Método POST
- /api/v1/user/register
- registra un nuevo usuario
- /api/v1/user/login
- logea a un usuario existente
Método GET Admin
- /api/v1/admin/auth
- valida si el usuario es admin
Método POST Admin
- /api/v1/admin/vpn/generate
- genera una vpn para cualquier usuario (solo admin puede ver)
Método PUT Admin
- /api/v1/admin/settings/update
- actualiza la configuraciones de usuario
Bueno despues de eso, me interesa cambiar mi rol a uno de admin, para poder entrar a donde solo el admin puede, desde /api/v1/ admin/settings/update
sin ser admin puedo manipular los atributos de un usario que exista, el API no va ir diciendo que paráme tros requiere para que la petición sea correcta llegando a lo siguiente
Ahora que ya somo admin, eso lo podemos validar con
/api/v1/admin/auth Ya puedo ver lo que me interesa, de todas las rutas a la única que no tenía permisos era
/api/v1/admin/vpn/generate
Parece que es igual a las otras rutas de generar un VPN pero en este caso puedo poner cualquier usuario y va descargar la VPN
Después de un rato pude notar un RCE, usando un |
para concatenar un comandos
RCE
Si me pengo en escucha con tcpdump obtengo
tcpdump
otra forma es con un mensaje y se lo paso a nc
en escucha con nc
Listo , ahora ganemos un Reverse shell ya basta de bobadas :v
intrusion
reverse shell
tratamiento de la tty
tenemos que convertir esto a una consola completamente interactiva
- script /dev/null -c bash
- ctrl + z
- stty raw -echo;fg
- reset xterm
- export TERM=xterm
- export SHELL=bash
- stty rows 27 columns 127
- esto solo aplica para las dimensiones de mi pantalla
ls
1
2
www-data@2million:~/html$ ls
Database.php Router.php VPN assets controllers css fonts images index.php js views
ls -la
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
www-data@2million:~/html$ ls -la
total 56
drwxr-xr-x 10 root root 4096 Nov 3 22:40 .
drwxr-xr-x 3 root root 4096 Jun 6 10:22 ..
-rw-r--r-- 1 root root 87 Jun 2 18:56 .env
-rw-r--r-- 1 root root 1237 Jun 2 16:15 Database.php
-rw-r--r-- 1 root root 2787 Jun 2 16:15 Router.php
drwxr-xr-x 5 root root 4096 Nov 3 22:40 VPN
drwxr-xr-x 2 root root 4096 Jun 6 10:22 assets
drwxr-xr-x 2 root root 4096 Jun 6 10:22 controllers
drwxr-xr-x 5 root root 4096 Jun 6 10:22 css
drwxr-xr-x 2 root root 4096 Jun 6 10:22 fonts
drwxr-xr-x 2 root root 4096 Jun 6 10:22 images
-rw-r--r-- 1 root root 2692 Jun 2 18:57 index.php
drwxr-xr-x 3 root root 4096 Jun 6 10:22 js
drwxr-xr-x 2 root root 4096 Jun 6 10:22 views
Tenemos una archivo interesante .env
este se usa para almacenar alguna variables de entorno
1
2
3
4
5
www-data@2million:~/html$ cat .env
DB_HOST=127.0.0.1
DB_DATABASE=htb_prod
DB_USERNAME=admin
DB_PASSWORD=SuperDuperPass123
Revisando el archivo de usuarios para saber con cual se pueden reutilizar estas credenciales
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
www-data@2million:~/html$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/bin/bash
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
pollinate:x:105:1::/var/cache/pollinate:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
syslog:x:107:113::/home/syslog:/usr/sbin/nologin
uuidd:x:108:114::/run/uuidd:/usr/sbin/nologin
tcpdump:x:109:115::/nonexistent:/usr/sbin/nologin
tss:x:110:116:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:111:117::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:112:118:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
usbmux:x:113:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false
mysql:x:114:120:MySQL Server,,,:/nonexistent:/bin/false
admin:x:1000:1000::/home/admin:/bin/bash
memcache:x:115:121:Memcached,,,:/nonexistent:/bin/false
_laurel:x:998:998::/var/log/laurel:/bin/false
vemos que existe admin:x:1000:1000::/home/admin:/bin/bash
y ademas tiene una ruta personal en /home/admin
para estár más cómodos, recuerden que tenemos el puero 22 con ssh, y justo eso voy a hacer
flag usuario admin
para escalar privilegios lo que hice fué buscar archivos que tengan la palabra admin y si eso no tiene éxito busco archivos que le pertenezcan a admin o estén en el gropo admin
1
find / -name admin 2>/dev/null
ahora voy de curioso a ver el archivo /var/main/admin
De todo lo que dice me llama la atención que hablan de una vulnerabilidad que tiene de nombre OverlayFS / FUSE
, después de bu scar en google, di con un CVE potencial
escalada de privilegios
Lo que voy a hacer es clonar el repositorio, compilarlo y comprimirlo y subirlo a la máquina victima, ya que nos dicen que ejec utemos un binario en una consola y el otro en una consola diferente. Luego de lidear con un par de errores al intentar compilar los binarion, por fin pude subir subir los binarios a la máquina victima
- clonar el repositoio
- compilar los binarios
- comprimir la carpeta
- pasar la carpeta a la máquina víctima
descargo la carpeta comprimida, para seguir los pasos de ejecucion que vimos en github
ejecutamos los vinarios en consolas diferentes