1.1.5 Template注入攻击

Template(模板)引擎用于创建动态网站、电子邮件等的代码。其基本思想是使用动态占位符为内容创建模板。呈现模板时,引擎会将这些占位符替换为其实际内容,以便将应用程序逻辑与表示逻辑分开。

服务器端模板注入(Server Side Template Injections,SSTI),在服务器端逻辑中发生注入时发生。由于模板引擎通常与特定的编程语言相关联,因此当发生注入时,可以从该语言执行任意代码。执行代码的能力取决于引擎提供的安全保护以及站点可能采取的预防措施。

测试SSTI的语法取决于所使用的引擎,但通常涉及使用特定语法提交模板表达式。例如,P HP模板引擎Smarty使用四个大括号({{}})来表示表达式,而JSP使用百分号和等号(<%=%>)的组合进行注入测试。

Smarty可能涉及在页面上反映输入的任何地方(表单、URL参数等),提交{{7*7}}并确认,看从表达式中执行的代码7*7是否返回呈现49。如果是这样,渲染的49将意味着表达式被模板成功注入。

由于所有模板引擎的语法不一致,因此确定使用哪种软件开发正在测试的站点非常重要。

Template注入攻击,利用网站应用使用的模板语言进行攻击。和常见Web注入(SQL注入等)的成因一样,也是服务器端接收了用户的输入,将其作为Web应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致敏感信息泄露、代码执行、GetShell等问题。其影响范围主要取决于模版引擎的复杂性。