首先我们来了解下flask session长啥样,长下面这样
那我们就可以把session理解为cookie中名称为session的一对键值,且是加密的。
session加密过程如下
(上图来自于P神博客)
也就是说,我们可以去查看session中分段的内容,却无法对其进行修改。
如我们有如下demo模拟用户登录
访问首页如下图
访问login模拟登录test用户
test其对应的session如下
eyJ1c2VybmFtZSI6InRlc3QifQ.XC7SPg.sV9_ueBW2e4kCoY0sxh14dxsQiY
对分段进行base64解码,如第一段为
如果我们尝试修改第一段,把test修改为admin试试
能够发现session失效了,说明直接修改是不行的,因为第三段有签名校验
那我们这次的安全问题实际上是基于secret_key泄漏的情况下,来进行如用户伪造
我们编写如下demo
其中secret_key是泄漏出来的密钥
运行
尝试替换第一次的登录页面,发现成功伪造admin用户
凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数