Smarty es un poderoso motor de plantillas para PHP que habilita a los desarrolladores a separar la presentación de la lógica de negocio, mejorando la escalabilidad y el mantenimiento de la aplicación. Sin embargo, su capacidad para ejecutar funciones PHP puede exponer las aplicaciones a ataques de inyección.

La flexibilidad de Smarty permite la ejecución dinámica de funciones PHP en sus plantillas, que pueden convertirse en un riesgo de seguridad significativo. La habilidad de ejecutar código PHP a través de variables o modificadores de plantilla debería ser controlada cuidadosamente.


Exploitation

Antes de construir el payload debemos confirmar si la aplicación realmente usa Smarty. Por ejemplo, vamos a http://ssti.thm:8000/smarty/.

Inyectamos un tag Smarty como {'Hello'|upper} para ver si es procesado. Si la aplicación devuelve "HELLO" significa que el motor de plantilla usado en la aplicación es Smarty.

PHP - Smarty

Una vez confirmado que el sitio es vulnerable a SSTI vía Smarty, podemos construir un payload que use funciones PHP para ejecutar comandos de sistema. Una de las más comunes es system(). Usando el payload {system("ls")} es una forma directa y efectiva de ver si las configuraciones de seguridad permiten la ejecución de PHP.

PHP - Smarty

Cuando el motor de plantillas Smarty procesa el input, ejecuta el comando ls.