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 是 ...
随机推荐
- 基于ASP.NET WPF技术及MVP模式实战太平人寿客户管理项目开发(Repository模式)
亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的.能够加我的QQ2059055336和我联系. 课程背景 本课程是教授使用WPF.ADO.NET.MVVM技术来实现太平人寿保险有限公司 ...
- 网格中的BFS,逆向(POJ2049)
题目链接:http://poj.org/problem?id=2049 解题报告: 网格中的BFS,最主要的是边界问题. 1.这里在左右,上下两个方向上,分别判断墙,和门,细节是,向上有t个墙,for ...
- P1424 小鱼的航程(改进版)
题目背景 原来的题目太简单,现改进让小鱼周末也休息,请已经做过重做该题. 题目描述 有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x&l ...
- java、javac -version不一致(java编译及运行环境不一致)的环境变量设置问题解决
问题描述: 电脑上同时安装了JDK1.6与1.7 设置了环境变量JAVA_HOME为jdk1.6.0_21的安装目录,并且在PATH变量中加入了%JAVA_HOME%\bin,但在Windows命令 ...
- 【PE】手动给PE文件添加一段代码MessageBoxA
源程序是这个样子: 思路: 1.通过LordPE工具拿到所需数据 2.OllyDebug通过BP MessageBoxA拿到MessageBoxA地址 3.UE十六进制编辑器定位代码节基址 4.在代码 ...
- BZOJ1061: [Noi2008]志愿者招募(线性规划)
Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 5725 Solved: 3437[Submit][Status][Discuss] Descript ...
- 实现BX的内容加上123 并把和送到寄存器AX
① 一条指令 ] ②两条指令 MOV AX,BX Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据 传送指令-------传送数据 LEA指令是 有效地址 传送指令 ...
- 精读《setState 做了什么》
1 引言 setState 是 React 框架最常用的命令,它是用来更新状态的,这也是 React 框架划时代的功能. 但是 setState 函数是 react 包导出的,他们又是如何与 reac ...
- JAVAOOP异常
排序: Try-catch-finally:try正常执行,如果有异常执行catch后执行finally,如果没有直接执行finally 执行顺序:try-catch:try中的语句正常执行,如果遇到 ...
- webstorm报错Unescaped xml character解决方案1
当idea认为你的书写格式不适合的时候便会报出Unescaped xml character提示,但不影响运行. 若想禁掉这个提示,可以尝试修改文档类型为:<!DOCTYPE html>