SSTI漏洞
简单介绍:
SSTI(Server-Side Template Injection,服务器端模板注入)是一种代码注入漏洞,攻击者通过操纵应用程序的模板引擎,注入恶意代码并在服务器端执行,从而获取敏感信息、执行命令或接管系统。
核心原理:
模板引擎:
现代 Web 应用常使用模板引擎(如 Python 的 Jinja2、Java 的 Velocity、PHP 的 Twig)动态生成 HTML 页面。模板通常包含变量和指令,例如:
1
2<!-- Jinja2 模板示例 -->
<h1>Hello, {{ name }}!</h1>漏洞触发:
当应用程序直接将用户输入作为模板的一部分渲染,且未进行严格过滤时,攻击者可注入恶意模板指令.
1
2
3
4
5<!-- 正常输入 -->
name = "Alice" → 渲染为 <h1>Hello, Alice!</h1>
<!-- 恶意输入(SSTI攻击) -->
name = "{{ 7*7 }}" → 渲染为 <h1>Hello, 49!</h1>
攻击方式
1. 信息泄露
攻击者通过注入表达式读取服务器文件或环境变量:
1 | |
2. 命令执行
利用模板引擎的漏洞执行系统命令:
1 | |
3. RCE(远程代码执行)
通过链式注入获取服务器控制权:
1 | |
自动化工具:Tplmap
手动测试:
使用不同语法测试常见引擎(如 Jinja2、Freemarker):
1 | |
漏洞危害
- 敏感信息泄露:读取配置文件、数据库凭证等
- 服务器权限提升:通过执行系统命令获取 root 权限
- 横向移动:利用服务器作为跳板攻击内网其他系统
- DDOS 攻击:消耗服务器资源导致服务不可用
结论:
SSTI 是一种严重的漏洞,攻击者可利用它直接控制服务器。修复的关键在于严格过滤用户输入、禁用模板引擎的危险功能,并定期更新组件。在开发过程中,应遵循 “不信任任何外部输入” 的原则,对所有用户提交的数据进行严格验证。
SSTI漏洞
http://example.com/2025/05/23/SSTI漏洞/