博客
关于我
2021-02-08
阅读量:297 次
发布时间:2019-03-01

本文共 1609 字,大约阅读时间需要 5 分钟。

如何通过Flask模板注入绕过过滤并获取FLAG

在Flask应用中,模板注入是一种常见的安全问题,特别是在模板引擎支持代码执行的情况下。以下是如何通过Flask模板注入绕过过滤并获取FLAG的一种方法。

1. 代码分析

首先,我们来看提供的Flask代码:

import flaskimport osapp = 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))

2. 过滤机制

代码中定义了safe_jinja函数用于过滤输入。该函数执行以下操作:

  • 替换所有括号()为空。
  • 定义一个黑名单['config', 'self']
  • 将黑名单中的每个关键字替换为空,例如{% set config=None %}
  • 3. 绕过过滤

    尽管safe_jinja函数进行了过滤,但仍然存在多种方法绕过其保护措施。以下是一些常见的绕过方法:

    方法一:利用url_for获取全局变量

    Flask模板引擎支持url_for函数,该函数可以用来生成URL,并接受参数以获取全局变量。例如:

    {{ url_for.__globals__['current_app'].config.FLAG }}

    通过这种方式,可以直接访问Flask应用的current_app对象,并从中获取配置信息,包括FLAG

    方法二:利用get_flashed_messages获取闪现信息

    get_flashed_messages函数用于获取Flask中通过flash()方法传递的闪现信息。例如:

    {{ get_flashed_messages.__globals__['current_app'].config.FLAG }}

    闪现信息可以包含我们想要获取的内容,包括FLAG

    4. 示例

    假设我们想要获取FLAG,可以构造以下模板:

    /shrine/{{ url_for.__globals__['current_app'].config.FLAG }}

    或者

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

    5. 注意事项

    • 模板注入:这种方法依赖于模板引擎对变量解析的能力。如果模板引擎被禁用或限制,可能无法实现。
    • 过滤机制:即使进行了过滤,仍然可以通过url_forget_flashed_messages等函数绕过某些限制。
    • 安全性:Flask提供了一些安全功能,如模板过滤和X-Frame-Options,用于防止模板注入。建议结合这些功能进行全面安全性评估。

    6. 总结

    通过Flask模板注入,虽然safe_jinja函数进行了过滤,但仍然存在绕过保护措施的方法,例如利用url_forget_flashed_messages获取全局变量和闪现信息。因此,建议在Flask应用中谨慎使用模板注入,并结合其他安全措施来防止潜在的安全漏洞。

    转载地址:http://kelx.baihongyu.com/

    你可能感兴趣的文章
    OpenFeign 入门与实战
    查看>>
    OpenFeign源码学习
    查看>>
    OpenFeign的使用方式成功解锁
    查看>>
    OpenFeign组件声明式服务调用
    查看>>
    openfeign远程调用不起作用解决_使用Spring Boot的spring.factories进行注入---SpringCloud Alibaba_若依微服务框架改造---工作笔记007
    查看>>
    openfire开发(四)消息拦截器
    查看>>
    openfire源码解读之将cache和session对象移入redis以提升性能
    查看>>
    Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
    查看>>
    OpenForest 开源项目安装与使用指南
    查看>>
    OpenGL glBlendFunc() 设置颜色混合 透明度叠加计算
    查看>>
    OpenGL 中“立即模式”是什么意思?
    查看>>
    opengl 教程(15) 摄像机控制(2)
    查看>>
    opengl 深度详解,多重采样时,如何在OpenGL纹理中解析深度值?
    查看>>
    OpenGL 的内置矩阵种种
    查看>>
    OpenGL/OpenGL ES 入门:基础变换 - 初识向量/矩阵
    查看>>
    OpenGL中shader读取实现
    查看>>
    OpenGL中旋转平移缩放等变换的顺序对模型的影响
    查看>>
    Opengl中的gluProject函数认识
    查看>>
    OpenGl介绍
    查看>>
    OPENGL半透明图像产生黑色光环
    查看>>