Server-side template injection using documentation
Laboratorio de Portswigger sobre SSTI
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio es vulnerable a un Server Side Template Injection. Para resolver el laboratorio, hay que identificar el motor de plantillas, utilizar la documentación para averiguar cómo ejecutar comandos y luego eliminar el archivo morale.txt del directorio personal de Carlos. Para iniciar sesión en nuestra cuenta podemos usar las credenciales content-manager:C0nt3ntM4n4g3r
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
Hacemos click en My account y nos logueamos usando las credenciales content-manager:C0nt3ntM4n4g3r
Pinchamos sobre un artículo y vemos que podemos editar el texto pinchando en Edit template
Me llaman mucho la atención los objetos que están cargando en <p>Hurry! Only ${product.stock} left of ${product.name} at ${product.price}.</p>
Provocamos un error para identificar el nombre de la plantilla cargando un objeto inexistente, para ello debemos modificar el campo y pulsar el Preview
1
<p>Hurry! Only ${product.NoExiste} left of ${product.name} at ${product.price}.</p>
Si nos fijamos bien vemos que se está usando java y la plantilla se llama freemarker
Nos vamos a hacktricks https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#freemarker-java y probamos los payloads disponibles, los payloads básicos no han funcionado
Probamos más payloads y funcionan
1
2
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
${"freemarker.template.utility.Execute"?new()("id")}
Listamos los archivos de nuestro directorio
Borramos el archivo morale.txt y completamos el laboratorio









