[NSSRound#13 Basic]flask?jwt?解题思路过程

过程

打开题目链接,是一个登录框,不加验证码,且在注册用户名admin时提示该用户名已被注册,因此爆破也是一种思路。不过根据题目名字中的提示,jwt,且拥有注册入口,注册一个用户先。

注册完用户,通过getFlag按钮,得到提示不是admin用户,在忘记密码的页面,找到flask的secretKey,因此考虑flask的session伪造。
getFlag

jwt

简要介绍一下jwt。JSON Web Token, JWT。jwt是一种协议,用来解决用户认证的问题。我们熟知的认证方式是session-cookie的形式,客户端向服务端发送用户名和密码,服务端验证后会在当前的会话(session)中保存用户的相关信息(例如:当前用户的权限),并向客户端返回一个session_id,也即客户端的cookie。下次请求时,客户端将通过Cookie传送该session_id,服务端接收到之后,通过session_id来查询对应session,从而获取与用户相关的信息。

这种机制的问题时需要服务端保存session,且session查询需要消耗资源。

因而引入jwt,jwt的设计比较简明,一个三段式的字符串,如下:
引自jwt.io使用base64编码,以.分隔为了三个部分:Header、Payload、Signature。

  • Header
    header部分用于标识生成Signature的算法。例如图中的,也是默认的HS256:HMAC-SHA256。
  • Payload
    payload部分存放需要传递的数据,有7个官方字段,当然也可以添加自己的字段,但是因为该部分内容是base64编码的,与明文传输并无二致,避免传输私密信息:
iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号
  • Signature
    使用一个客户端与服务端都知道的密钥对前两部分进行加密,作为一个签名附加在jwt的第三部分。

故而当服务端签发jwt返回给客户端时,客户端可以使用相同的密钥和指定算法,验证前两部分的有效性;反过来,服务端也可以通过此种方法来验证客户端的jwt是否有效*。

flask session伪造

有了密钥,使用https://github.com/noraj/flask-session-cookie-manager/tree/master对session进行伪造。

首先解密可以得到:{'_fresh': True, '_id': '0212d692b0824b514d6eab354c932359356d94eff6bd2dbabe3236c8f95e3081a881f9f142deb7505132b14c04ab8a813bfc3d319348345395132f1947daf8cc', '_user_id': '2'},改_user_id为1,重新加密后,替换原有session获得flag。

acquisition

  1. 学习了flask的session伪造的解法
  2. 重温了一遍jwt

reference

https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
https://github.com/noraj/flask-session-cookie-manager/tree/master
https://blog.csdn.net/Leaf_initial/article/details/131560501

后记
* 这里想到一个问题:对称加密下,客户端也保存有相同的密钥,那么客户端自己也是可以伪造签名的,例如一个非admin的用户,将自己的权限改为了admin,即payload部分内容发生改变,同时他将新的签名进行更新,不就可以伪造jwt了?当然这个过程也有许多细节问题可以用来规避,例如1)如果使用非对称的加密算法,既然客户端只是验证,客户端保存一个公钥即可,jwt的签发由服务端保存的私钥进行2)payload中避免使用如“admin=0”,“admin=1”此类的身份验证策略,也可以避免此种伪造。3)还是把用户的权限控制放在服务端,验证完jwt后通过查询ACL再来决定用户的真正权限。可能对于具体的使用场景、使用流程的认识还不到位,因而有诸如此类的疑惑,后续搞明白了再写一写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14734.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8、动手学深度学习——现代卷积神经网络:AlexNet

1、学习表征 在2012年前,图像特征都是机械地计算出来的。事实上,设计一套新的特征函数、改进结果,并撰写论文是盛极一时的潮流 另一组研究人员,包括Yann LeCun、Geoff Hinton、Yoshua Bengio、Andrew Ng、Shun ichi Amari和Juer…

测试编排必要性

目录 前言: 测试编排定义 测试编排和自动化 测试编排的好处 自动化的测试编排策略 自动化/编排工具 测试编排和CI/CD 学点啥 前言: 编排是一种组织和安排信息的过程,它在各种情境中都是非常重要的。在撰写文章、演讲或其他形式的表达…

【真题解析】系统集成项目管理工程师 2022 年上半年真题卷(综合知识)

本文为系统集成项目管理工程师考试(软考) 2022 年上半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析&#x…

【Elasticsearch】索引库操作

目录 2.索引库操作 2.1.mapping映射属性 2.2.索引库的CRUD 2.2.1.创建索引库和映射 基本语法: 示例: 2.2.2.查询索引库 2.2.3.修改索引库 2.2.4.删除索引库 2.2.5.总结 2.索引库操作 索引库就类似数据库表,mapping映射就类似表的…

软件设计模式与体系结构-软件体系-层次软件体系结构

目录 四、层次软件体系结构简介代码两种方式的区别双向分层分层风格 VS 主程序-子过程风格:二者的不同层次软件体系结构的优点层次软件体系结构的缺点 课程作业 四、层次软件体系结构 层次之间存在接口,通过接口形成call/return的关系,上层是…

深度神经网络量化算法基础理论

关于量化,之前的博客中首先从第一个将量化思想应用在神经网络模型上的工作开始介绍,随后阐述了量化领域的极端情况,即二值化与三值化,并指出尽管目前已经存在多种对二值网络的优化方法,但是显然因极端量化带来的严重精…

优化软件测试成本,7个步骤简单执行~

软件测试可以防止那些修复起来成本很高的错误,从而避免将来因为它们所导致的高昂费用。以下是优化前期成本的7个步骤。 为什么软件测试很重要? 平均一款手机应用程序包含大约5万行代码,微软Windows操作系统有大约5000万行代码,而…

【技能实训】DMS数据挖掘项目-Day02

文章目录 任务3【任务3.1】实现日志实体类【任务3.2】创建日志业务类,实现日志信息的采集及打印输出【任务3.3】创建日志测试类,测试任务3.2中的程序,演示日志信息的采集及打印输出 任务4【任务4.1】物流实体信息类【任务4.2】创建物流业务类…

Python一行命令搭建HTTP服务器并外网访问+-+内网穿透

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转载自远程内网穿透的文章:【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透…

SQL高级教程

SQL TOP 子句 TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 注释:并非所有的数据库系统都支持 TOP 子句。 SQL Server 的语法: SELECT TOP number|percent column_name(s) F…

JMeter元件

【测试计划–线程组/Threads(Users)】 模拟大量用户负载的情况,线程组可以设置运行的线程数(多少线程就代表多少用户); 【测试计划–线程组–取样器/sampler】 用来模拟用户操作,向服务器发出http请求、Webservice请求、java请求等&#xf…

node搭建本地https和wss服务(SSL证书安全)

node 后台 app.js配置 const express require(express) //加载express资源 const bodyParserrequire("body-parser")//一个Express中间件,用于解析HTTP请求体,获得请求的数据const app express() //返回一个express服务器对象 const https require(https) const …