首页 > 其他分享 >flasksession伪造和jwt伪造

flasksession伪造和jwt伪造

时间:2024-07-02 20:57:57浏览次数:16  
标签:flask jwt -- secret session cookie flasksession 伪造

flasksession伪造

基本理论

session是在服务端用来存储用户信息的,类似于来宾登记表,通过http报文中的cookie进行传递.由于flask轻量级的设计,因此session是存储在客户端的,因此也带来了flask session伪造的风险.
flask中的session通过app.secret_key = ...来设置.
flasksession通常是由三部分组成,中间通过.来进行分割.第一部分通常是是json形式的数据通过base64加密后的结果(使用-_替换了标准Base64编码中的+/,同时去除结尾的=),第二部分是使用的签名算法,第三部分则是session的签名.
所谓flask session伪造,其根本就是在已知或爆出secret_key的情况下,篡改第二部分,生成新的第三部分,从而做到任意修改数据.

kali下的小工具,使用方法如下:
安装:

git clone https://github.com/noraj/flask-session-cookie-manager

生成session:

python3 flask_session_cookie_manager3.py encode -s 'hello' -t '{"username":"lbz"}'

已知secret_key破解session:

python3 flask_session_cookie_manager3.py decode -s 'hello' -c 'eyJ1c2VybmFtZSI6ImxieiJ9.ZoO6sQ.1qmeqKQDnxZyPqeCWGtw_50wWss'

由于一些题目的secret是基于时间戳生成的,因此这里还需要一个生成时间戳的工具: https://uutool.cn/timestamp/

flask-unsign

这个工具比上一个多了自动爆破秘钥的功能,而且是添加到pip包管理器中的,可以直接使用(但是似乎没有在已知cookie情况下破解的功能).
安装到了windows下,通过powshell使用.
安装:

pip install flask-unsign[wordlist]

破解秘钥并解密:

flask-unsign --decode --cookie 'eyJ1c2VybmFtZSI6ImxieiJ9.ZoO6sQ.1qmeqKQDnxZyPqeCWGtw_50wWss'

破解秘钥并输出秘钥:

flask-unsign --unsign --cookie 'eyJ1c2VybmFtZSI6ImxieiJ9.ZoO6sQ.1qmeqKQDnxZyPqeCWGtw_50wWss'

生成session:

flask-unsign --sign --cookie '{"username":"lbz","passwd":"123"}' --secret 'hello'

jwt伪造攻击

基础理论

相比session,jwt token是一种升级的状态存储方式.具有更好的扩展性,同时每个用户只需要存储一个jwt.
jwt也是由三部分组成,第一个是jwt声明和签名算法声明,第二部分是json格式存储的数据进行base64后的结果,第三部分是签名.
注意:jwt在传递的使用需要通过Authorization进行传递,同时添加Content-Type

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InByb3BhbmUiLCJncm91cCI6ImFkbWluIiwiZXhwIjoxNzE5OTU4NDI0fQ.3GMW2L_Sm_8mfO5d5F7-ySB3q4n3ZNbVsEvDD2btrMQ
Content-Type: application/json
jwt.io

一个在线工具,能够用于生成和修改jwt.
由于是网页版,可视化,所以用起来非常直观.
需要时间戳的时候可以配合 https://uutool.cn/timestamp/ 进行使用

c-jwt-cracker

一个用于爆破jwt的secret_key的工具,用法如下

./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImxieiIsInBhc3N3b3JkIjoibGJ6MDQxMTMwIn0.Z1Hba5ZQ4VQ38EmG95JK7HKc0iIHSqK-EskWOBmFH34

由于是基于字典进行爆破,所以爆不出来确实也正常.

标签:flask,jwt,--,secret,session,cookie,flasksession,伪造
From: https://www.cnblogs.com/merak-lbz/p/18280537

相关文章

  • WebAPI项目框架JWT权限验证
    JWT是什么?校验逻辑?授权过程?这里就不过多的阐述了,直接上代码在appsettings.json中配置jwt参数的值SecretKey必须大于16个字符1{2"Logging":{3"LogLevel":{4"Default":"Information",5"Microsoft.AspNetCore":"Warni......
  • Java实现登录验证 -- JWT令牌实现
    目录1.实现登录验证的引出原因2.JWT令牌2.1使用JWT令牌时2.2令牌的组成三.JWT令牌(token)生成和校验3.1引入JWT令牌的依赖3.2使用Jar包中提供的API来实现JWT令牌的生成和校验3.3使用JWT令牌验证登录1.实现登录验证的引出传统思路下:登录页面把用户名和密码交......
  • springboot项目登陆校验————基于Jwt令牌和Fliter / Interceptor
    springboot项目登陆校验————基于Jwt令牌和Fliter/Interceptor文章目录springboot项目登陆校验————基于Jwt令牌和Fliter/Interceptor1.概述2.Jwt令牌2.1Jwt令牌的组成2.2Jwt登录认证流程2.3代码实现3.方法1:Fliter过滤器3.1简介3.1代码实现4.方法2:Interce......
  • 338 Authorization with JWT
    步骤1、客户端添加headerscities.service.tsimport{Injectable}from'@angular/core';import{City}from"../models/city";import{HttpClient,HttpHeaders}from"@angular/common/http";import{Observable}from"rxjs"......
  • 在IdentityServer4生成的JWT中添加一个自定义的Claim,用于ABP框架中要用到的token信息
    用过IdentityServer4或者熟悉ASP.NETCore认证的都应该知道有Claim,如何理解ids4中的Claim?这里可以理解为声明,我们每个用户都有多个Claim,每个Claim声明了用户的某个信息比如:Role=Admin,UserID=1000等等,这里Role,UserID每个都是用户的Claim,都是表示用户信息的单元 ,我们不妨把它称为......
  • 升级.Net8后Jwt密钥长度要求大于32的问题
    原因前段时间将项目升级到.net8后,提示jwt密钥长度太短了,这咋办,我解决1. 最简单的办法,把密钥长度加长2. 如果你的项目只需要验证token,而不需要生成,就:SymmetricSecurityKeyExtendKeyLengthIfNeeded(SymmetricSecurityKeykey,intminLenInBytes){......
  • JWT登录认证
    JWT登录认证导入jwt依赖<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency>写个jwt工具类publicclassJwtUtil{//有......
  • .NET 6 Swagger+JWT 配置
    1.1封装一个SwaggerExtend类(包含JWT配置)///<summary>///Swagger静态类///</summary>publicstaticclassSwaggerExtend{///<summary>///添加服务:swagger///</summary>///<paramname=&qu......
  • 闲鱼面试:说说JWT工作原理?
    JWT(JSONWebToken)一种开放的标准规范(RFC7519),用于在网络上安全的传输信息,通常被用于身份验证。简单来说,你可以把JWT想象成一张小巧的、自包含的电子通行证。这张通行证里面包含了用户的身份信息,就像你在某个俱乐部的会员卡,上面有你的名字、会员等级等信息,拿着这张卡,你就能证......
  • 通过获取的jwt认证token,实现自动登录django-admin后台
    视图层fromrest_framework_simplejwt.tokensimportAccessTokenfromdjango.middleware.csrfimportget_tokenfromdjango.contrib.authimportloginclassJwtToSessionView(GenericViewSet):@action(methods=['GET'],detail=False)defset(self,......