flask-session
flask-session
pyc文件
pyc文件是python源文件经过解释器编译为字节码后的文件
pyc文件的加载速度更快
可以通过反编译工具将pyc文件的字节码转换为py文件源码
生成的pyc文件放在__pycache__目录下面
flask-session
flask框架把session存储在客户端
flask生成session的过程如下:
1.先用json.dumps把对象转换为json数据 2.然后用zlib进行压缩 3.对数据进行bse64编码 4.使用hmac算法生成加密信息 最终格式为:base64编码后的数据.时间戳.hmac加密后的签名
什么是时间戳:
时间戳就是从1970年1月1日到现在的总秒数,用于认证数据的唯一性
关于hmac算法:
hmac算法是基于密钥的一种算法 想要获取经过hmac算法加密后的密文的明文需要密文以及密钥
flask-session伪造
从上面对flask-session的介绍我们知道session存储在客户端
并且json数据只是经过了base64编码,那么我们可以直接base64解码获取json数据
而如果我们拿到了hmac的密钥,那么我们就可以自己构造json数据,并进行加密生成签名信息,然后抓包发给服务端绕过一些认证
所以flask-session伪造的关键就是获取密钥
获取密钥的常见方式
flask有一个全局变量来存储密钥——secret_key
通过SSTI注入获取——{{config}} 通过SSRF读取有secret_key的flask配置文件——config.py 读取/proc/self/environ 爆破 一些网站泄露(ctf题目可能会在html页面源码中)
脚本使用: python2 脚本2.py decode -c "session值" -s "key值" python2 脚本2.py encode -s "key值" -t "我们需要伪造的值" python3 脚本3.py decode -c "session值" -s "key值" python3 脚本3.py encode -s "key值" -t "我们需要伪造的值"
自己电脑使用脚本: python 脚本3.py decode -c "session值" -s "key值" python 脚本3.py encode -s "key值" -t "我们需要伪造的值"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~