Python flask渲染模板注入

2018-TokyoWesterns-Web-shrine

参考链接:

https://blog.csdn.net/Onlyone_1314/article/details/121875761

import flask
import os
app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')

@app.route('/')
def index():
    return open(__file__).read()

@app.route('/shrine/')
def shrine(shrine):
    def safe_jinja(s):
        s = s.replace('(', '').replace(')', '')
        blacklist = ['config', 'self']
        return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s
    return flask.render_template_string(safe_jinja(shrine))

if __name__ == '__main__':
    app.run(debug=True, port=80)

存在模板注入

Python flask渲染模板注入
过滤了括号和关键字,所以带括号的魔法函数都不能使用
Python flask渲染模板注入
config和self都为空
Python flask渲染模板注入
Python flask渲染模板注入

我们在这道题中的目的是读取配置文件中变量名为’FLAG’的值,也就是环境变量中的键名为’FLAG’的值,但是config、self参数的值设为None,无法直接查看

url_for()函数查看flag
我们可以使用flask框架的url_for函数:from flask import url_for。
url_for()作用:
(1)给指定的函数构造 URL。
(2)访问静态文件(CSS、JavaScript等)。只要在你的包中或是模块的所在目录中创建一个名为static的文件夹,在应用中使用 /static即可访问。
所以我们可以用url_for函数来查看当前包中所有的静态文件,其中肯定就包括了配置文件。
先查看url_for函数的全局变量的字典的引用:

Python flask渲染模板注入
其中’current_app’:

get_flashed_messages()函数查看flag

返回之前在Flask中通过flash()函数传入的闪现信息列表。把字符串对象表示的消息加入到一个消息队列中,然后通过调用 get_flashed_messages()方法取出(闪现信息只能取出一次,取出后闪现信息会被清空)。
flask闪现是基于flask内置的session的,利用浏览器的session缓存闪现信息。之前的每次flash()函数都会缓存一个信息,之后再通过get_flashed_messages()函数访问缓存的信息。
flash()函数有三种形式缓存数据:
(1)缓存字符串内容。
设置闪现内容:flash(‘恭喜您登录成功’)
模板取出闪现内容:{% with messages = get_flashed_messages() %}
(2)缓存默认键值对。当闪现一个消息时,是可以提供一个分类的。未指定分类时默认的分类为 ‘message’ 。
设置闪现内容:flash(‘恭喜您登录成功’,”status”)
模板取出闪现内容:{% with messages = get_flashed_messages(with_categories=true) %}
(3)缓存自定义键值对。
设置闪现内容:flash(‘您的账户名为admin’,”username”)
模板取出闪现内容:{% with messages = get_flashed_messages(category_filter=[“username”])
所以我们可以通过get_flashed_messages()来获取所有缓存的闪现内容:

Python flask渲染模板注入

Python flask渲染模板注入

Original: https://blog.csdn.net/weixin_40872714/article/details/124026667
Author: swpu_jx_1998
Title: Python flask渲染模板注入

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/745410/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • pandas rolling方法_如何使用多列参数调用pandas.rolling.apply?

    定义自己的roll 我们可以创建一个接受窗口大小参数w和任何其他关键字参数的函数。我们使用它来构建一个新的DataFrame,在其中,我们将调用groupby,同时通过kwargs…

    Python 2023年8月7日
    055
  • RCNN原文理解与代码分析

    RCNN是比较老的行人检测算法,用到的各项技术也都是很古老的方法,对于算法急速更新的现状来看,它的作用不大,但是却可以帮助我们入门行人检测算法。充分理解它的每个过程可以帮助我们对行…

    Python 2023年9月30日
    039
  • python的数据类型

    python数据类型主要分为以下六大类: Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)Set(集合)Python的六个…

    Python 2023年8月1日
    058
  • 老游戏新写之Lunar Lander月球登陆

    对航空知识有兴趣的朋友都知道,飞行器在月球软着陆不是一件容易的事情。 即使在刚刚过去的2019年,印度也没能成功实现该技术,承载着希望的”月船2号”着陆器在…

    Python 2023年9月23日
    071
  • 26个数据分析案例——第三站:基于python的药店销售数据分析

    目录 26个数据分析案例——第三站:基于python的药店销售数据分析 * 实验环境 数据说明 资料包 实验步骤 – 第一步:加载数据并查看数据详情 + 1、导入数据:…

    Python 2023年8月1日
    085
  • mysql建立用户知乎_scrapy框架爬取知乎110w用户信息,并存入mysql数据库和mongoDB数…

    scrapy框架爬取知乎110w用户信息,并存入mysql数据库和mongoDB数 scrapy框架爬取知乎110w用户信息,并存入mysql数据库和mongoDB数据库 知乎作为…

    Python 2023年10月6日
    027
  • 【Spring(八)】带你打通Spring的注解开发

    文章目录 注解开发 * 注解开发定义bean 纯注解开发 注解开发bean作用范围与生命周期管理 注解开发依赖注入 注解开发管理第三方bean 注解开发实现为第三方bean注入资源…

    Python 2023年11月5日
    027
  • Python:jieba库的介绍与使用

    前言: jieba是优秀的中文分词第三方库,由于中文文本之间每个汉字都是连续书写的,我们需要通过特定的手段来获得其中的每个词组,这种手段叫做分词,我们可以通过jieba库来完成这个…

    Python 2023年8月1日
    067
  • pytest框架

    视频链接:2022全网最新精通Pytest自动化测试框架之Pytest数据驱动装饰器接口测试_哔哩哔哩_bilibili 一、 1、了解pytest测试框架的特点 2.2 启动py…

    Python 2023年9月14日
    045
  • Linux基础 – Web服务基础

    一、Web定义 1、超文本(hypertext) 2、超媒体(hypermedia) 3、超文本传输协议(HTTP) 二、通信基本概念 三、部署Web服务 1、配置 2、快速部署思…

    Python 2023年9月26日
    041
  • 什么是 SSL、TLS 和 HTTPS?

    什么是 SSL、TLS 和 HTTPS? 概念 SSL : 安全套接字层(Secure Sockets Layer,SSL) 是一种加密安全协议;(SSL是 TLS的前身) TLS…

    Python 2023年6月6日
    097
  • 《剑指offer》题解——week2(持续更新)

    ❤ 作者主页:Java技术一点通的博客❀ 个人介绍:大家好,我是Java技术一点通!( ̄▽ ̄)~*❀ 微信公众号:Java技术一点通🍊 记得点赞、收藏、评论⭐️⭐️⭐️📣 认真学习…

    Python 2023年10月27日
    040
  • Spring Boot 项目自定义 banner

    前言 我们在启动 Spring Boot 项目时,控制台会打印出 Spring Boot 专属的标语,也称 banner(横幅标语/广告),效果如下: 实际上,上面这个 banne…

    Python 2023年10月16日
    045
  • 《动手学数据分析》第一章1.6

    第一章:数据载入及初步观察 1 第一章:探索性数据分析 * 1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序 1.6.2 任务二:对泰坦尼克号数据(trian.cs…

    Python 2023年8月17日
    085
  • 这款国产API工具也太强了吧!让我放弃了postman

    ; 为什么弃用postman转用Eolink? 程序员在接口开发完成后都通常需要自测,当返回结果根据符合预期时,则表示代表接口可用。自己以前用的是postman来进行接口测试,但p…

    Python 2023年10月10日
    054
  • Numpy——np.diag()一文看懂

    1.np.diag(v, k): 官方文档如下 @array_function_dispatch(_diag_dispatcher)def diag(v: Union[ndarra…

    Python 2023年8月2日
    047
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球