想研究很久了,这次终于初步了解了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身份伪造的更多相关文章

  1. Flask中session实现原理

    前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...

  2. [HFCTF2020]EasyLogin-1|JWT身份伪造

    1.打开之后只有一个登陆界面和注册界面,右键检查发现app.js代码,结果如下: app.js代码如下: /** * 或许该用 koa-static 来处理静态文件 * 路径该怎么配置?不管了先填个根 ...

  3. 【转】asp.net中利用session对象传递、共享数据[session用法]

    来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...

  4. asp.net中利用session对象传递、共享数据[session用法]

    下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...

  5. Flask的session——关于写扩展所学习到的

    这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...

  6. python利用django实现简单的登录和注册,并利用session实现了链接数据库

    利用session实现与数据库链接,登录模块(在views.py) def login(request): # return HttpResponseRedirect('/') # 判断是否post方 ...

  7. Flask的session使用

    由于http是无状态保存的协议,session可以看作不同请求之间保存数据的一种机制.flask的session是基于cookie的会话保持. 流程 当客户端进行第一次请求的时候,客户端的HTTP r ...

  8. FLASK 的Session和MoudelForm插件

    falsk是小而精的框架,但是热度高, 所有很多爱好者提供了很多扩展插件 功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的 Flask-Session flask内置sessio ...

  9. 第六篇 flask中session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...

随机推荐

  1. 快算24点,POJ(3983)

    题目链接:http://poj.org/problem?id=3983 中文题,就不解释题意了. 类似之前的一篇博客,这里也不上解释了,直接上代码吧. #include <iostream> ...

  2. BZOJ 2824: [AHOI2012]铁盘整理

    BZOJ 2824: [AHOI2012]铁盘整理 标签(空格分隔): OI-BZOJ OI-搜索 Time Limit: 10 Sec Memory Limit: 128 MB Descriptio ...

  3. 2017.10.19 java中的关键词 及软件开发的一些重要单词

    1.java中的关键词 ·final 最后的 (1)可以修饰表示该类不能被继承 (2)可以修饰方法不能被重写 ·sattic 静态的 类的 (1)修饰属性 可以通过类直接调用 可以通过对象调用 (2) ...

  4. django ORM单表操作

    1.ORM介绍 ORM是“对象-关系-映射”的简称 映射关系: mysql---------Python 表名----------类名 字段----------属性 表记录--------实例化对象 ...

  5. element el-tooltip 内容换行的方法

    <el-tooltip class="item" effect="light" placement="top-start">  ...

  6. cordova-plugin-themeablebrowser 0.2.17 "ThemeableBrowser"ionic跳转外链插件在ios中heardBar会遮住内容的bug

    ionic+angular的app项目中需要在App打开一个外部的url链接,用了这个插件发现在iPhone手机中会出现toolbar挡住url页面内容 解决方法: 在原有基础上加上statusBar ...

  7. rsync+lsyncd实现实时同步

    1.接收端安装rsync,修改/etc/rsyncd.conf配置文件,然后启动服务. uid = rootgid = rootuse chroot = nomax connection = 4sec ...

  8. H5之audio标签放音兼容所有浏览器方法

    前端交流群,群文件提供大量文档.书籍和资料.期待你的加入!群号:127768464 由于项目需要,最近刚做了一个网页放音的功能,使用到了H5新标签<audio></audio> ...

  9. Android内购订单验证 --- nodejs实现

    主代码: function AndroidPlayVerify(inappPurchaseData, inappDataSignature) { let verify = crypto.createV ...

  10. hive_异常_01_(未解决)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V

    一.如果出现如下错误需要编译源码 需要重新编译Hbase-handler源码 步骤如下: 准备Jar包: 将Hbase 中lib下的jar包和Hive中lib下的jar包全部导入到一起. 记得删除里面 ...