Message For You
配布されたファイル
from flask import Flask, session
import os
import secrets
FLAG = os.environ.get("FLAG", "Alpaca{**REDACTED**}")
app = Flask(__name__)
app.secret_key = secrets.token_hex(32)
MESSAGE = f"""
Roses are red,
Violets are blue,
I've hidden a flag
In a session for you: {FLAG}
""".strip()
HTML = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Message for You!</title>
</head>
<body>
<p>I've got a message for you.</p>
<p>It's hidden somewhere around here...</p>
</body>
</html>
""".strip()
@app.get("/")
def index():
session["message"] = MESSAGE
return HTML
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000, debug=True)
writeup
この実装を見ると session に message が含まれていることが分かります。
session の中身を見ると、
.eJwlyzELwjAQhuG_cmRxcagUEbqJk6uDk3Cc5msNxlzJGaWU_ncjbi8PvLN7wkwGuM6d1GAkGZTh15d0Dhrx-ss1FlQ6rt6ge_AeiYT6KEO1X9bTgibqNdOkpaN9HOUm80GbxwbGklu2D9odS_K81QrgqSmLW77kUS59.adezLw.mzHVT-JgdcHgooCYZcJLwu2ucqA となっていました。
これを解読すると、{"message":"Roses are red,\nViolets are blue,\nI've hidden a flag\nIn a session for you: Alpaca{Co0k1es_ar3_swe37_and_5o_are_y0u}"} のようなメッセージが出てきて、FLAG が得られます。
FLAG : Alpaca{Co0k1es_ar3_swe37_and_5o_are_y0u}