Les moteurs de template Java atteignent l'exécution de code via les propres classes de la plateforme plutôt que via une couche de scripting, de sorte que l'exploitation chemine vers java.lang.Runtime ou ProcessBuilder et appelle exec. Les deux moteurs ici utilisent ${ ... } pour l'interpolation, donc ${7*7} renvoyant 49 est la sonde partagée (Velocity répond aussi à #set($x=7*7)$x).
La différence entre eux est le gadget : FreeMarker fournit des built-ins utilitaires (Execute, ObjectConstructor, new) qui construisent et exécutent des objets directement, tandis que Velocity n'a pas de tel assistant et s'exploite en réfléchissant depuis une classe disponible vers Runtime.
Moteurs#
- FreeMarker : les built-ins
Execute,newetapi, et le verrounew_builtin_class_resolver. - Velocity : réflexion depuis
$class.inspect(...)versRuntime.getRuntime().exec.
Références#
- Documentation Apache FreeMarker et Apache Velocity
- PortSwigger Web Security Academy: Server-side template injection