Python模板注入(SSTI)

  • 概念

        发生在使用模板引擎解析用户提供的输入时。模板注入漏洞可能导致攻击者能够执行恶意代码或访问未授权的数据。

        模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码分离。即也拓宽了攻击面,注入到模板中的代码可能会引发RCE或XSS

  • 常见模板与场景

        在python中,常见的模板引擎包括Jinja2、Django模板等。通常发生在未正确过滤或转义用户提供的输入时,使得攻击者能够在模板中插入恶意代码。

        攻击者可利用模板注入漏洞执行任意的python代码,包括读取敏感文件、执行系统命令、访问数据库等。通常会通过在用户输入中插入特定的模板语法来触发漏洞,eg.在Jinja2中使用{{...}}或{%...%}

  • flask模板

先了解flask模板,有助于理解原理

  from flask import flask@app.route('/index/')def hello_word():return 'hello world'

route装饰器的作用是将函数与url绑定起来。例子中的代码的作用就是当你访问http:127.0.0.1:5000/index的时候,flask会返回hello world

  • 渲染方法

flask的渲染方法有render_templaterender_template_string两种。

1.render_template()

用来渲染一个指定文件,使用方法如下:

 return render_template('indexhtml')
2.render_template_string

用来渲染一个字符串,SSTI与这个密不可分,使用方法如下:

html='<h1>This is index page</h1>'return render_template_string(html)
  • 模板

flask时使用Jinja2来作为渲染引擎的。

在网站的根目录下新建templates文件夹,这里是用来存放html文件。也就是模板文件

模板文件并不是单纯的html代码,而是夹杂着模板的语法,因为页面不可能都是一个样子的,有一些地方是会变化的。比如说显示用户名的地方,这个时候就需要使用模板支持的语法,来传参。

{{}}在Jinja2中作为变量包裹标识符。

  • 模板注入

不正确的使用flask中的render_template_string方法会引发SSTI。

(会用ctf题目解释,后续补充)

  • 几种常用于SSTI的魔术方法

__class__ 返回类型所属的对象
 
__mro__ 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
 
__base__ 返回该对象所继承的基类
 
// __base__和__mro__都是用来寻找基类的
 
__subclasses__ 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
 
__init__ 类的初始化方法
 
__globals__ 对包含函数全局变量的字典的引用
 
__builtins__  builtins即是引用,Python程序一旦启动,它就会在程序员所写的代码没有运行之前就已经被加载到内存中了,而对于builtins却不用导入,它在任何模块都直接可见,所以可以直接调用引用的模块

  • 获取基类的几种方法

    [].__class__.__base__''.__class__.__mro__[2]().__class__.__base__{}.__class__.__base__request.__class__.__mro__[8]   //针对jinjia2/flask为[9]适用或者[].__class__.__bases__[0]       //其他的类似
  • 获取基本类的子类

ssti的主要目的就是从这么多的子类中找出可以利用的类(一般是指读写文件的类)加以利用

  • 利用

参考学习文章链接:

Python-模板注入_render_template_string_jinqipiaopiao的博客-CSDN博客

Python模块注入_pythn的模板注入_Ting亭子的博客-CSDN博客

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

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

相关文章

数据库逻辑透明-架构真题(二十九)

&#xff08;2020年&#xff09;假设某计算机字长为32位&#xff0c;该计算机文件管理系统磁盘空间管理采用位示图&#xff08;bitmap&#xff09;记录磁盘的使用情况。若磁盘的容量为300GB&#xff0c;物理块大小为4MB&#xff0c;那么位示图的大小为&#xff08;&#xff09;…

海外媒体发稿:海外汽车媒体推广9个方式解析

根据下列9个国外汽车媒体推广方式&#xff0c;企业能够在国际范围内突破边界&#xff0c;获得领域关心。这将帮助企业完成国际化发展发展战略&#xff0c;扩展市场占有率和提升盈利空间。【华媒舍】国外全媒体发表文章将会成为企业完成这一目标的重要方式&#xff0c;为企业带来…

Java中的异常基础知识

目录 什么是异常? 1.算术异常 2.数组越界异常 3.空指针异常 4.输入不匹配异常 Java异常体系 异常的处理 防御式编程: 事后认错 异常处理流程 自定义异常 什么是异常? 在Java中,将程序执行过程中发生的不正常行为称为异常 1.算术异常 public static void main(St…

GDB之保存已经设置的断点(十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

postgresql-窗口函数种类

postgresql-聚合窗口函数 聚合函数排名窗口函数案例1案例2 取值窗口函数环比增长率同比增长率 聚合函数 常用的聚合函数&#xff0c;例如 AVG、SUM、COUNT 等&#xff0c;也可以作为窗口函数使用 --计算移动平均值 select saledate, amount, avg(amount) over (order by sale…

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏

文章目录 前言开始项目网格生成Block方块脚本俄罗斯方块基类&#xff0c;绘制方块形状移动逻辑限制移动自由下落下落后设置对应风格为不可移动类型检查当前方块是否可以向指定方向移动旋转逻辑消除逻辑游戏结束逻辑怪物生成源码参考完结 前言 当今游戏产业中&#xff0c;经典游…

U8用友ERP本地部署异地远程访问:内网端口映射外网方案

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上&#xff0c;点击开始菜单栏&#xff0c;打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

python使用钉钉机器人给钉钉发送消息

import requestsdef dingmessage(msg):urlhttps://oapi.dingtalk.com/robot/send?access_token2c5e2b764129e936ba9c43713a588caa7eeb168c132223a91ba97d80a6fee337data{msgtype:text,text:{content: 通知:msg}}resrequests.post(url,jsondata)

界面组件DevExpress WinForms v23.1 - 增强的图表、甘特图功能

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

冠达管理:Arm上市首日大涨25%,成为年度美股规模最大IPO

9月15日清晨&#xff0c;软银旗下芯片规划公司ARM在纳斯达克交易所首日上市&#xff0c;收盘大涨近25%&#xff0c;市值达到679亿美元&#xff0c;成为本年度美股规模最大的IPO。Arm的美国存托股票开盘价为每股56.1美元&#xff0c;比51美元IPO定价高出10%&#xff0c;随后稳步…

Talk | ICCV‘23北京通用人工智能研究院黄江勇:ARNOLD-三维场景中基于语言的机器人任务学习

本期为TechBeat人工智能社区第531期线上Talk&#xff01; 北京时间9月14日(周四)20:00&#xff0c; 北京通用人工智能研究院实习研究员—黄江勇的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “ARNOLD-三维场景中基于语言的机器人任务学习”&…

机器学习实战-系列教程8:SVM分类实战3非线性SVM(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、代码解读

&#x1f308;&#x1f308;&#x1f308;机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 SVM分类实战1之简单SVM分类 SVM分类实战2线性SVM SVM分类实战3非线性SVM 4、非线性SVM 4.1 创建非线性数据 from sklearn.data…

奶牛个体识别 奶牛身份识别

融合YOLOv5s与通道剪枝算法的奶牛轻量化个体识别方法 Light-weight recognition network for dairy cows based on the fusion of YOLOv5s and channel pruning algorithm 论文链接 知网链接 DOI链接 该文章讨论了奶牛花斑、光照条件、不同剪枝方法、不同剪枝率对准确率的影响…

云原生Kubernetes:pod基础与配置

目录 一、理论 1.pod 2.pod容器分类 3.镜像拉取策略 4.pod 的重启策略 二、实验 1.Pod容器的分类 2.镜像拉取策略 三、问题 1.apiVersion 报错 2.pod v1版本资源未注册 3.格式错误 4.取行显示指定pod信息 四、总结 一、理论 1.pod (1) 概念 Pod是kubernetes中…

【Java IO流 - 中秋活动特供】流的分类,API使用,文件操作

博主&#xff1a;_LJaXi 专栏&#xff1a; Java | 从跨平台到跨行业 开发工具&#xff1a;IntelliJ IDEA Community Edition 2022.3.3 Java IO流 中秋特供啦 &#x1f96e;Java Io &#x1f354;什么是流流的分类文件字节输入流1. 条件循环解决1 (2) 读取特性 2. 数组存储解决 …

固定资产管理口号标语怎么写

在现代企业管理中&#xff0c;固定资产的管理是至关重要的一环。它不仅关系到企业的经济效益&#xff0c;也影响到企业的运营效率和稳定性。因此&#xff0c;我们需要一种既富有创意又实用有效的口号来引导我们的固定资产管理工作。 明确一个观点  我们要明确一个观点&#…

flink on yarn任务中文乱码问题解决记录

开发反馈预生产部分部分flink任务出现中文乱码的问题 找到乱码的flink任务所在的节点&#xff0c;登录服务器&#xff0c;执行locale命令&#xff1a; 发现是locale没有设置好&#xff0c;使用vim编辑文本&#xff0c;写入中文都直接乱码 对比其他几台机器&#xff0c;发现主…

MySQL优化第二篇

MySQL优化第二篇 性能分析小表驱动大表慢查询日志日志分析工具mysqldumpslow Show Profile进行SQL分析&#xff08;重中之重&#xff09; 七种JOIN 1、inner join &#xff1a;可以简写为join&#xff0c;表示的是交集&#xff0c;也就是两张表的共同数据 sql语句&#xff1a…

文心一言插件开发全流程,ERNIE-Bot-SDK可以调用文心一言的能力

文心一言插件开发 前言插件插件是什么工作原理申请开发权限 开始第一步&#xff1a;安装python第二步&#xff1a;搭建项目manifest 描述文件&#xff1a;ai-plugin.json插件服务描述文件&#xff1a;openapi.yaml开发自己的plugin-server 第三步&#xff1a;上传插件 SDK相关链…

Vue3高频面试题+八股文

Vue3.0中的Composition Api 开始之前 Compos:1 tion API可以说是ue3的最大特点&#xff0c;那么为什么要推出Compos1t1on Api,解决了什么问趣&#xff1f; 通常使用Vue2开发的项目&#xff0c;普遍会存在以下问题&#xff1a; 代码的可读性随着组件变大而变差每一种代码复用的…