flask利用session身份伪造
想研究很久了,这次终于初步了解了flask session伪造(得知道密钥)。
python2和python3 session解密不一样,而且不都是base64,脚本https://github.com/ZhangAiQiang/Flask/tree/master/%E8%A7%A3%E5%AF%86session%E8%84%9A%E6%9C%AC
参考文章:https://www.cnblogs.com/apossin/p/10083937.html
①首先需要知道的信息
flask是把session存在客户端的,而且只经过base64编码和用密钥签名,虽然没有有签名不可以伪造session,但是有很多信息我们可以直接从session解码找出来。
②session伪造源码(https://github.com/ZhangAiQiang/Flask/tree/master/flask-session身份伪造简单源码)
from flask import Flask,session,render_template,request,render_template_string
app=Flask(__name__)
app.config['SECRET_KEY']="HELLO WORD!"#session必须用到的密钥,伪造身份的关键。
@app.route('/')
def index():
try:
username=session['username']
return "hello,"+username #判断session里面是否有username的值,有的话就直接登陆状态。
except KeyError: #捕获异常,如果没有session的值,会出现KeyError错误
return render_template('login.html') #如果没有session就跳转登录界面
@app.route('/login',methods=['POST','GET'])
def login():
if request.method=='POST':
username=request.form['username']
if username=='admin' and not password =="8sudehd7eageaade54": #用户是不知道admin密码的,这里考虑session伪造。
return "密码不对"
session['username']=username
return "hello,"+username
return render_template("login.html")
#ssti注入点
@app.errorhandler(404)
def page_not_found(e):
template='''
{%% block body %%}
<div class="center-content error">
<h1>Oops! That page doesn't exist.</h1>
<h3>%s</h3>
</div>
{%% endblock %%}
'''%(request.url)
return render_template_string(template),404
app.run(debug=True,port=8091)
③简单的说一下代码的功能:
- 除了admin需要密码,其他用户爱咋地咋地。
- 直接输入ip一开始没有session所以跳转登录界面,有了session就可以直接访问ip看到欢迎信息
- 想尽办法伪造admin用户
④先随便用个qaq账户登陆下试试,登陆成功后##
打开控制台:

session的值为eyJ1c2VybmFtZSI6InFhcSJ9.Dxclgg.FMNAqa5Zk2wqg6S6WPyOQm-nU68
其中eyJ1c2VybmFtZSI6InFhcSJ9为base64编码后session的内容。
解码:

⑤如果我直接把qaq改成admin然后base64编码一下不就可以直接登陆上去了?
不是的,后边的内容是签名,一开始说了,没有密钥没法伪造身份就是因为这个签名防篡改的作用。
⑥获取密钥的办法:
ssti注入,信息泄露。
这里ssti怎么获取就不说了,获取密钥要紧,以后再讨论ssti,输入ip/{{config}}

可以看到密钥是HELLO WORLD!
⑦伪造session脚本
https://github.com/noraj/flask-session-cookie-manager

⑧burp抓包,替换session

可以看到成功的以admin身份登陆

flask利用session身份伪造的更多相关文章
- Flask中session实现原理
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- [HFCTF2020]EasyLogin-1|JWT身份伪造
1.打开之后只有一个登陆界面和注册界面,右键检查发现app.js代码,结果如下: app.js代码如下: /** * 或许该用 koa-static 来处理静态文件 * 路径该怎么配置?不管了先填个根 ...
- 【转】asp.net中利用session对象传递、共享数据[session用法]
来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...
- asp.net中利用session对象传递、共享数据[session用法]
下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...
- Flask的session——关于写扩展所学习到的
这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...
- python利用django实现简单的登录和注册,并利用session实现了链接数据库
利用session实现与数据库链接,登录模块(在views.py) def login(request): # return HttpResponseRedirect('/') # 判断是否post方 ...
- Flask的session使用
由于http是无状态保存的协议,session可以看作不同请求之间保存数据的一种机制.flask的session是基于cookie的会话保持. 流程 当客户端进行第一次请求的时候,客户端的HTTP r ...
- FLASK 的Session和MoudelForm插件
falsk是小而精的框架,但是热度高, 所有很多爱好者提供了很多扩展插件 功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的 Flask-Session flask内置sessio ...
- 第六篇 flask中session
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...
随机推荐
- windows 右健添加cmd快捷通道
windows 右健添加cmd快捷 - Windows - geektown极客堂 - Powered by Discuz!. 把横线下面的文本copy保存到一个注册表文件中,比如cmd.reg,然后 ...
- Uva 11997 多路归并
题目链接:https://uva.onlinejudge.org/external/119/11997.pdf 题意: k*k的矩阵,从每一行中选一个元素加起来,可以得到 kk个和,求前 k 个最小值 ...
- 模拟停车POJ(3505)
题目链接:http://poj.org/problem?id=3505 解题报告: #include <stdio.h> #include <iostream> #includ ...
- 【动态规划】cf1034C. Region Separation
质因数分解套路的复杂度分析的动态规划 题目大意 有一颗$n$个节点有点权的树,初始整棵树为$1$号区域,要求满足下列规则: 除非$i$是最后一个等级,否则每一个$i$级区域都要被分成至少两个$i+1$ ...
- docker简介以及优缺点
1.docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制, ...
- dts--framework(三)
tester.py class Tester(Crb) 00. __init__(self, crb, serializer) 01.init_ext_gen(self) 02.set_re_run( ...
- 用PHP关于Jquery表单插件ajaxForm里success不返回问题
简单说一下吧,在用ajaxForm的时候,sucess突然之间不返回了,直接转到error里面去, 网页代码 ................. $('#add-type').ajaxForm({ d ...
- linuxC编程介绍
第一步:写完程序 /first.c/ #include <stdio.h> int main() { printf("hello,welcome to the LinuxC!\n ...
- 01 mysql 基础一 (进阶)
mysql基础一 1.认识mysql与创建用户 01 Mysql简介 Mysql是最流行的关系型数据库管理系统之一,由瑞典MySQLAB公司开发,目前属于Oracle公司. MySQL是一种关联数据库 ...
- QToolBox学习笔记
抽屉控件效果类似于QQ界面 最外面一层叫工具盒QToolBox QToolBox中装的是QGroupBox,分组的盒子 在分组的盒子QGroupBox中装的是QToolButton.