非常迷失:Flack 和 NYU Osiris 的挑战

Very Lost: Flack and NYU Osiris Challenges

我正在 https://recruit.osiris.cyber.nyu.edu/challenges 参加一些 CTF 挑战。

我得到了一个用于模板编程的任务是“从服务器读取/flag.txt。http://recruit.osiris.cyber.nyu.edu:2000"

我不是在寻求解决方案,但我想更好地了解下面发生的事情:

#!/usr/bin/env python3

from flask import Flask, request, abort, render_template_string
import os.path

app = Flask(__name__)

@app.route('/', methods=['GET'])
def index():
    name = request.args.get('name')
    if name is not None:
        return render_template_string(open('templates/hello.html').read().format(name=name))

    return render_template_string(open('templates/index.html').read())

if __name__ == "__main__":
    app.run(host="0.0.0.0")

我想我可以回答大部分问题。

  1. 您可能已经知道,Flask 是一个相当基础的 Web 框架。从外观上看,您拥有的是 CTF 站点上的代码 运行ning 的副本。它只显示两页;一个包含初始 Web 表单 (templates/index.html),另一个在提供名称时使用查询字符串变量来问候用户 (templates/hello.html)。

  2. 您实际上不必 运行 自己编写此代码。 0.0.0.0 主机地址是匹配 all IPv4 addresses on the local machine 的所有地址,其中包括 192.168.0.1127.0.0.1 等本地地址以及用于传入服务器连接的 IP 地址.

  3. 就像我说的,这个远程服务器上的代码运行ning。

  4. 我认为您需要做的是找到某种方式来制作对此 Web 服务的请求,以显示 /flag.txt 的内容而不是(或者可能在除了)只是打个招呼。快速搜索“flask 包含文件漏洞”之类的内容应该可以让您了解如何解决此问题。