flask_session伪造
https://blog.csdn.net/weixin_44677409/article/details/100733581
https://github.com/noraj/flask-session-cookie-manager
flask session伪造
想要伪造session,需要先了解一下flask中session是怎么构造的。
flask中session是存储在客户端cookie中的,也就是存储在本地。flask仅仅对数据进行了签名。众所周知的是,签名的作用是防篡改,而无法防止被读取。而flask并没有提供加密操作,所以其session的全部内容都是可以在客户端读取的,这就可能造成一些安全问题。
具体可参考:
https://xz.aliyun.com/t/3569
https://www.leavesongs.com/PENETRATION/client-session-security.html#
我们可以通过脚本将session解密一下:
1 | #!/usr/bin/env python3 |
利用脚本将session解密如下
但是如果我们想要加密伪造生成自己想要的session还需要知道SECRET_KEY,然后我们在config.py里发现了SECRET_KEY
1 | SECRET_KEY = os.environ.get('SECRET_KEY') or 'ckj123' |
然后在index.html页面发现只要session[‘name’] == ‘admin’即可以得到flag
于是我们找了一个flask session加密的脚本 https://github.com/noraj/flask-session-cookie-manager
利用刚刚得到的SECRET_KEY,在将解密出来的name改为admin,最后用脚本生成我们想要的session即可
1 | {'_fresh': True, '_id': b'121de14bca66edf6cc98e254ab460d68f9122c75e64747a997410a84049d9295b53192aebf5c2b93641e5c58cc1596ed3850da7a17a5f3f6415ac0743afe3dc4', 'csrf_token': b'd2495789467d55d9e38c2ffd63e9c578ee1b267a', 'image': b'BUXE', 'name': 'admin', 'user_id': '10'} |
虽然python3和python2的flask session生成机制不同,可是利用上述脚本生成的session都可以得到flag