沉铝汤的破站

IS LIFE ALWAYS THIS HARD, OR IS IT JUST WHEN YOU'RE A KID

Flask客户端session伪造

0x00 什么是客户端session


顾名思义,其实就是把session加密后存到cookie中。一般session会被保存到服务端中(服务端cookie),但是也有许多Web框架并不这样做,比如Flask就是采用客户端session的方式来储存,将session经过签名处理,来防止修改。

0x01 Flask的session格式


img

base64加密的Session数据(经过了json、zlib压缩处理的字符串) . 时间戳 . 签名

时间戳用来告诉服务端数据最后一次更新的时间,超过31天的会话,将会过期,变为无效会话;签名是利用Hmac算法,将session数据和时间戳加上secret_key加密而成的,用来保证数据没有被修改。

0x02 Flask的session伪造


由上文所述的session格式可知,要修改并伪造一个session的必要条件就是知道加密所采用的secret_key,一旦获取到secret_key, 我们就可以轻松的构造签名,从而实现客户端的session的伪造。

这里采用Github上的工具noraj/flask-session-cookie-manager来实现Flask中session的伪造。

安装可以参考: 语雀

如果里面的venv有问题,可以参考Flaskの初识

Usage:python3[2] flask_session_cookie_manager3[2].py encode -t "{'username': 'admin', 'id': '1'}" -s "mySec_key"

根据实际情况,要注意python2还是python3,而且最好用双引号。

0x03 Flask的session解密


上文说了,其实就是个base64而已,但是因为python有类似这种b‘xxxx’这种,且数据经过了json、zlib的处理,所以最好还是借助一下脚本

ps:不用脚本,也是可以的哦

脚本:见 客户端 session 导致的安全问题 | 离别歌 (leavesongs.com)

Usage:python3 decryption.py "xxxxxxx.xx.xxx"

0x04 参考


客户端 session 导致的安全问题 | 离别歌 (leavesongs.com)

noraj/flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder (github.com)

flask-session-cookie-manager · 语雀 (yuque.com)

浅谈Flask cookie与密钥的安全性 - 安全客,安全资讯平台 (anquanke.com)

flask的session伪造 (icode9.com)

flask基础之session原理详解(十) - 天宇之游 - 博客园 (cnblogs.com)