【需要重视的BUG】:偷权限的情况

!!如果您生产环境用到了Blog.Core系统(本文是我自己逻辑问题,和官方没关系哈),且没有做其他修改,且没有使用Ids4认证中心来授权认证,请看完本文,并即时做系统维护。


----------------------------------------------------

f09348f82ae8681c83964ba23eb82ca7.png

(平台的第一个安全BUG,已修改,请更新)

9ae7b42ee19f2aceda2a6a827ecc14dc.gif

BCVP框架,是基于:

ASP.NETCore5.0+VUE.js+IdentityServer4等核心技术,实现的前后端分离与动态认证鉴权一体化平台。

01

故事描述

通过修改令牌,可更新权限

Refresh Token.

故事源于文章开头的图片,今天QQ群中,偶然看到了大家在讨论问题,最后发现是一个小伙伴(@---)发现了系统的漏洞,这里感谢他哟,通过一系列操作会篡改自己的权限,具体的过程是这样的:

1、在Swagger中,用自己的测试账号登录,获取Token令牌;

2、在jwt.io等工具内,修改jti为超级管理员的id;

3、用更换后的令牌,去刷新令牌接口发起请求;

4、得到最终的新令牌,此刻,你已经拥有管理员权限;

相关的动图,可以参考:

08b4a072181ef996bce26d739d3d040e.gif

(公众号最多300帧,详细的可以自己操作)

到这里你应该能看懂了,核心的BUG就出在刷新令牌的时候,我直接硬解了TOKEN,然后获取到了数据,根据UID直接生成了新的令牌,这种思路没问题,可是技术就差了,没有做很好的集成和封装,才导致了这个问题,你可能会说,官方不是有签名校验么,当然有,只不过这个接口是匿名的

不过如果你用Ids4做认证平台是没有这个问题的,毕竟人家都考虑到了嘛,

顺着思路,大家也可以多看看,多测测,还有没有其他隐藏问题。

02

修改BUG问题

增加令牌校验

CreateEncodedSignature.

这个问题已经被解决了,具体的代码可以看我的提交记录,这里感谢@wuare老铁提供技术帮忙:

6fe9a3a0520b0fe14c92c2bfb62d45dc.png

(已经提交到Github了,欢迎查看)

思路其实很简单,就是在获取用户信息的时候,增加一次令牌校验,看看当前令牌是否被篡改了,不过解题过程可以分享下:
1、在登录的时候,我们调用

new JwtSecurityTokenHandler().WriteToken

来生成令牌;

2、去查看Write源码,发现用

JwtTokenUtilities.CreateEncodedSignature (string.Concat(rawHeader, ".", rawPayload), signingCredentials);

来生成具体的令牌;

937719a335aaaa8364e276ac63a59fef.png

3、那我们就仿照它的这种写法,我们也对token进行解析,将头部和载荷拿出来,加盐,看看和令牌的签名是否一直;

public static bool customSafeVerify(string token)
{var jwtHandler = new JwtSecurityTokenHandler();var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String;var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);var signingKey = new SymmetricSecurityKey(keyByteArray);var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);var jwt = jwtHandler.ReadJwtToken(token);return jwt.RawSignature == Microsoft.IdentityModel.JsonWebTokens.JwtTokenUtilities.CreateEncodedSignature(jwt.RawHeader + "." + jwt.RawPayload, signingCredentials);
}

注意下,可能会和别的类冲突,注意命名空间的引用即可。

这样就没有问题了,在刷新令牌的时候,做个判断,来看看是否被篡改了:

if (tokenModel != null && JwtHelper.customSafeVerify(token) && tokenModel.Uid > 0)

PS: 这种方案可能不是最优的,也欢迎大家多多提意见吧,集思广益哟。

好啦,本次就到这里了,还是很感谢提出这个问题的小伙伴的,不仅是让我学到了知识,更让框架更完善,加油加油!

希望本次更新没有让您对BCVP框架的质量受到影响。

ac2235924908c8c877478ee7aa7a1042.png

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

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

相关文章

Java实现文件过滤

Java实现文件过滤的方法,比如我只想获得某个路径下.java文件 只需要实现FilenameFilter这个接口即可。 比如: private class FileFilter implements FilenameFilter { public boolean accept(File dir, String name) { return name.en…

Angular运行在java_在本地运行现有Angular项目

我是Angular的新手,我正在尝试在我的机器上运行Angular的现有项目 . 我做了很多测试并且跟着很多文章 . 但无法运行我的项目 .我有这样的项目文件:我在我的系统上安装了nodejs . 并根据文章按照以下说明操作:将目录更改为我们的仓库cd myproj…

python作业题目用户输入行数、输出倒的等腰三角形_智慧职教云课堂APPPython程序设计(常州工业职业技术学院)作业期末考试答案...

在FANUC15系统中所采用的高分辨率绝对脉冲编码器,若每转输出脉冲数为100万个,最高允许转速10000r/min。如果当前和今后相当长一段时期,个人住房贷款市场中()将是一种主要的模式。A.多种机构的参与菱形ABCD中,AB2&#…

自找麻烦

2019独角兽企业重金招聘Python工程师标准>>> 真是想狗想的要发疯了,所以想买条狗,但是阿拉斯加,哈士奇,金毛,拉布拉多,苏牧,喜乐蒂现在我都买不起,他们都是很听话的狗&am…

Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能

前言在使用PRISMWPF开发项目的过程中,需要使用AutoMapper实现对象-对象的映射功能。无奈PRISM没有相关对AutoMapper相关的类库,于是转换一下思想,在nuget 中存在有关使用Microsoft.Extensions.DependencyInjection来实现AutoMapper的依赖注入…

【机房真是】。。。各种蛋疼。。。

渣渣。。。呵呵。。。预流推进什么的。。。呵呵。。。。渣渣。。。渣渣。。。、、走了。。。 转载于:https://www.cnblogs.com/Aoi3x/archive/2011/09/07/2645360.html

webSocket原理及其案例

常见的消息推送方式 1:轮询方式 浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实现试试返回数据给浏览器 缺点:数据有延时、服务器压力较大。 2:长轮询 浏览器发出ajax(异步)请求,服…

这是啥?也太秀了吧?

1 请坐下2 这是什么愿望,感觉老天都看不下去了!3 像极了手机落在上铺的你!4 真正智慧家居,免通电。5 你以为它是土豆,其实。。6 葫芦不一定叫葫芦葫芦有各种奇奇怪怪的形状和名字7 我发光去了!你点的每个赞…

php七牛分片上传_利用七牛的php SDK分片上传时如何处理Notify?

我的代码如下,有填写相应的Rio_PutExtra,但是进度貌似没有输出来?请问是哪里写的不对么?…function upload($bucket, $key, $file, $type"file"){$qiniu_key "…AK…";$qiniu_sec "…SK…";Qiniu…

python课程思路_学习python课程第二十六天

一. 传输层在上述三层协议中我们,ip协议帮我们定位到子网络. mac地址帮我们定位到一台计算机,并与其通讯,但本质上,计算机的通讯是为了应用程序能够通讯,而一台计算机上不可能运行一个应用程序问题:就像我们同时运行QQ软件和微信软件, 当计算机收到一个数据包时, 需要知道这…

爱数应用容灾部署方案三

级联复制的异地容灾方案部署 爱数应用容灾部署方案可在异地部署远程容灾站点实现远程应用容灾方案,采用级联复制模型,在本地和远程分别部署容灾站点,克服实时复制对带宽延迟较高的缺点,获得最佳的容灾效果。并且可根据用户的网络和…

c# 按位与,按位或

最近在园子里看到了这篇文章,看完这篇会有意外收获:C#枚举高级战术https://mp.weixin.qq.com/s/yipaL6Acil-uxq_bDDgdyg想起了很久之前的自己的一篇总结,特地找出来------在工作中遇到按位或组合权限串。一直不是特别明白。今天终于花了半个下…

poj3160

http://poj.org/problem?id3160 题意读懂是关键,he chould choose to enter and give out a gift and hear the words from the recipient, or bypass the room in silence.通过这句话知道当收礼者给予的反应是负值时可以不加,flymouse decided to choo…

30张不明觉厉的照片,看几遍终于看懂了

全世界只有3.14 % 的人关注了爆炸吧知识网络上很多照片,虽然没经过PS,第一眼还是会觉得诡异。仔细看看才发现....哇噢!总觉得她的头上有一撮尖尖的毛?狗狗怎么做得出这个表情?震惊!发现没脖子的长颈鹿&…

域名服务器(DNS)工作原理

域名服务器工作原理 引言 只要您在互联网上发送电子邮件或浏览Web,您就会用到域名服务器,而您自己可能都不知道您在使用它们。域名服务器(即DNS)是互联网的相当重要且完全隐藏的部分,并且很神奇。域名服务器系统在全球…

排序集合的一个小坑

原来一直用SortList,SortedDictionary来作为键值对存储的排序集合来用,心中就默认是以key按ascall排序来存放的,在之前的案例中也没有出现问题,在最近一个demo中,打破了原来的自以为是的认识,因为在key中不…

python distplot 图_Python可视化23 |seaborn.distplot公司单变量分布图(直方图|核密度图),23seaborndistplot...

本文介绍seaborn.distplot绘制单变量分布图;之前文章介绍的核密度图(kernel density estimate (KDE))以及二者结合图。目录本文内容概要直方图核密度图直方图结合核密度图1、seaborn.distplotseaborn.distplot(a, binsNone,histTrue,kdeTrue,rugFalse, fitNone, his…

绘制矩形php,PHP_php绘制一个矩形的方法,本文实例讲述了php绘制一个矩 - phpStudy...

php绘制一个矩形的方法本文实例讲述了php绘制一个矩形的方法。分享给大家供大家参考。具体实现方法如下://1、创建画布$im imagecreatetruecolor(300,200);//新建一个真彩色图像,默认背景是黑色,返回图像标识符。另外还有一个函数 imagecrea…

爱是天时地利的迷信

1 别人撒娇你撒娇2 据说套着这个白袋子晒鞋鞋就不会发黄了。。3 蚂蚁:为什么要欺负我!4 这是天空的心电图吗5 有回应的喜欢真好 6 随主人这事儿原来是真的…7 被别人喜欢时的心理活动图自回忆专用小马甲你点的每个赞,我都认真当成了喜欢

如何做到 byte[] 和 十六进制 互转?

咨询区 alextansc:请问我如何实现将 byte[] 和 十六进制的string 进行互转?回答区 balrob:如果你的程序是基于 .NET5 的,可以使用 Convert 下新增的两个方法 ToHexString 和 FromHexString ,参考下面两个方法的定义。/…