SSTI 模板注入漏洞

admin 2025年4月28日22:51:57评论2 views字数 1190阅读3分58秒阅读模式

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。

请大家关注公众号支持,不定期有宠粉福利

Part-01

    基础知识

SSTI 是服务器端模板注入(Server-Side Template Injection)的英文首字母编写。模板引擎支持使用静态模板文件,在运行时用 HTML 页面中的实际值替换变量/占位符,从而让 HTML 页面的设计变得更容易。当前广泛应用的模板引擎有 Smarty、Twig、Jinja2、FreeMarker 及 Velocity 等。若攻击者可以完全控制输入模板的指令,并且模板能够在服务器端被成功地进行解析,则会造成模板注入漏洞。

SSTI 漏洞在 Python 和 PHP 中非常常见,以至于一提起 SSTI 漏洞人们第一个想到的往往是 Python 中的 Flask。其实 SSTI 漏洞在其他语言中同样存在,如本章我们提到的Java 中的 SSTI 漏洞。下图介绍了常见模板及编程语言中,模板注入的常见的检测标签及可进行检测的工具如下红色框,渗透测试时,看见此特征,可尝试SSTI注入尝试

一般而言,SSTI 漏洞的危害有:任意代码执行,获取 SHELL,破坏服务器完整性等

SSTI 模板注入漏洞
SSTI 模板注入漏洞

Part-02

SSTI漏洞发现方法

SSTI 漏洞与模板引擎有关,那么在对 SSTI 漏洞进行代码审计时只需搜索模板引擎的关键字即可。

SSTI 模板注入漏洞

通过搜索关键字,我们可以快速地找到关键代码片段。

privatestaticvoidvelocity(String template){Velocity.init();VelocityContext context = new VelocityContext();context.put("name""QCCP");context.put("level""code safe");StringWriter swOut = new StringWriter();Velocity.evaluate(context, swOut, "test"template);}

Demo 较为简单,通读代码很容易发现其主要功能是:将从 URL 中获取 template 参数传入模板引擎进行渲染,在此过程中未对 template 做任何过滤。也就是说,这里的输入完全可控,那么我们便可以构造恶意语句使其渲染恶意代码,以达到任意代码执行的目的。

template=%23set($e=%22e%22);$e.getClass().forName(%22java.lang.Runtime%22).getMethod(%22getRuntime%22,null).invoke(null,null).exec(%22open%20-a%20Calculator%22)
代码执行情况。
SSTI 模板注入漏洞

原文始发于微信公众号(锐鉴安全):SSTI 模板注入漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月28日22:51:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SSTI 模板注入漏洞https://cn-sec.com/archives/4012613.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息