SECURED SESSION [EASY]
Description
If you can guess our random secret key, we will tell you the flag securely stored in your session.
Source Code

Click here for source code in text format
import os
from flask import Flask, request, session
from flag import flag
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
def secret_key_to_int(s):
try:
secret_key = int(s)
except ValueError:
secret_key = 0
return secret_key
@app.route("/flag")
def index():
secret_key = secret_key_to_int(request.args['secret_key']) if 'secret_key' in request.args else None
session['flag'] = flag
if secret_key == app.config['SECRET_KEY']:
return session['flag']
else:
return "Incorrect secret key!"
@app.route('/')
def source():
return "<pre>%s</pre>" % open(__file__).read()
if __name__ == "__main__":
app.run()
Short Solution Description / Tags
Information Leak by Flask Session Cookie
Solution
The flag is stored as session object.
We can leak this by decoding Flask Session Cookie.
$ curl -D- https://f16c6fb96cbcd107.247ctf.com/flag
...
Set-Cookie: session=ey[REDACTED]X0.ZY0M-w.c5Ba5P-GsrW3qvhUZiVWMDs_yPA; HttpOnly; Path=/
Incorrect secret key!
$ echo -n ey[REDACTED]X0 | base64 -d
{"flag":{" b":"Mj[REDACTED]fQ=="}}base64: invalid input
$ echo -n Mj[REDACTED]fQ== | base64 -d
247CTF{[REDACTED]}