SSTI模版注入学习

模版引擎

模版引擎(这里特指用于Web开发的模版引擎)是为了使用户界面与业务数据(内容)分离而产生的,他可以生成特定格式的文档,利用模版引擎来生成前端的html代码,模版引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模版+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。

模版引擎也会提供沙箱机制来进行漏洞防范,但是可以用沙箱逃逸技术来进行绕过。

SSTI(模版注入)

SSTI就是服务器端模版注入(Server-Side Template Injection)

当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的MVC模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给Vier视图层,经过模版渲染展示给 用户。

漏洞成因就是服务端接收了用户的恶意输入以后,未进过任何处理就将其作为Web应用模版的一部分,模版引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模版的语句,因而可能导致了敏感信息泄露、代码执行、GetShell等问题。其影响范围主要取决于模版引擎的复杂性。

凡是使用模版的地方都可能会出现SSTI的问题,SSTI不属于任何一种语言,沙盒绕过也不是,沙盒绕过只是由于模版引擎发现了很大的安全漏洞,然后模版引擎设计出来的一种防护机制,不允许使用没有定义或者声明的模块,这适用于所有的模块引擎。

附表

image-20220120174838082