Blog/Server-side template injection using documentation
Server-side template injection using documentation
Portswigger › Portswigger Labs › 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
<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
<#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
