shiro550漏洞分析

准备工作

启动该项目
在这里插入图片描述
可以看到没有登录时候,cookie中没有rememberme字段
在这里插入图片描述
登录时候
当账号密码输入正确时候
在这里插入图片描述
登录后存在该字段
在这里插入图片描述

shiro特征:

未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie⾥也没有deleteMe字段
登陆失败的话,不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteMe字段
不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有rememberMe字段
勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段,还会有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段

开始分析:

首先找到org/apache/shiro/web/mgt/CookieRememberMeManager.java
在这里插入图片描述
进入之后我们点击如下结构,然后来分析
在这里插入图片描述
我们点击结构中的类
在这里插入图片描述
发现这是一个记住cookie操作的类,包含private Cookie cookie;这里的cookie就是我们网站中的cookie,还有一些涉及cookie的方法
接下来我们看看getRememberedSerializedIdentity()类,这个类是判断我们的cookie值是否是base64,如果是就解码,然后返回解码的值
在这里插入图片描述
那么我们看看哪个调用了getRememberedSerializedIdentity
在这里插入图片描述
可以看到总共调用有三处,两处是注释,,那么调用处在393行
可以看到调用中参数为subjectContext,也就是我们的cookie,转换成字节数组bytes,然后进入if语句判断是否为空,然后进入principals = convertBytesToPrincipals(bytes, subjectContext);语句,convertBytesToPrincipals这个看字面意思是字节转换成主字节,那么我们跟进去看看
在这里插入图片描述
可以看到该函数convertBytesToPrincipals是判断是否为空,不为空就进入到decrypt函数,decrypt函数出来最终还是到了return deserialize(bytes);
一看名字就是反序列化函数
那么我们进入看看deserialize函数
在这里插入图片描述
可以看到要用到deserialize函数,那么我们进入再看看
在这里插入图片描述
可以发现它是个接口,那么我们需要看他怎么实现的在这里插入图片描述
在这里插入图片描述
可以很明显的看到这里有jdk反序列化的操作
这就在最里面了,然后我们回到之前的,开始往前推在这里插入图片描述
那么我们现在知道了这里返回的是一个反序列化的内容,然后我们看这里的
在这里插入图片描述
我们跳进去decrypt,
在这里插入图片描述
这是用cipherService获取他的类型,然后判断是否为空,不为空就进入里面执行
我们来看看下面这个是什么在这里插入图片描述
跳进去在这里插入图片描述
返回了decryptionCipherKey,那么我们看看他从哪拿到的
那么跳进去decryptionCipherKey在这里插入图片描述
可以看到他是一个private的字节数组,从AbstractRememberMeManager类中设置的
然后我们看看decryptionCipherKey值在哪里被调用在这里插入图片描述
可以看到是在这里设置值的,在setDecryptionCipherKey方法中
那么我们再看看setDecryptionCipherKey方法被谁调用
在这里插入图片描述
可以看到是在这里被调用的,在setCipherKey方法中
那么我们再看看setCipherKey方法被谁调用在这里插入图片描述
可以看到是在这里被调用的,在AbstractRememberMeManager方法中
这里好像是构造了,那么我们看看DEFAULT_CIPHER_KEY_BYTES是什么
跳进去在这里插入图片描述
发现了硬编码,默认key值进行base64解码

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

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

相关文章

微信小程序在线阅读系统微信小程序设计与实现

摘 要:信息技术永远是改变生活的第一种创新方式,各种行业的发展更是脱离不了科技化的支持。原本传统的行业正在被科技行业的切入悄悄的发生变化。就拿我们生活当中常见的事情举例而言,在外卖行业还没有发展的快速的时候,方便面等速…

美创科技一体化智能化公共数据平台数据安全建设实践

公共数据是当今政府数字化转型的关键要素和未来价值释放的核心锚点,也是“网络强国”、“数字中国”的战略性资源。 作为数字化改革先行省份,近年来,浙江省以一体化智能化公共数据平台作为数字化改革的支撑总平台,实现了全省公共数…

正则表达式(JAVA)

正则表达式(JAVA) 文章目录 正则表达式(JAVA)用法字符类(只匹配一个字符)预定义字符(只匹配一个字符)数量词贪婪爬取符号捕获分组规则捕获分组符号 非捕获分组案例忽略大小写 用法 正则表达式在用于校验信息是否满足某些规则的时候,非常的好用 在文本中查找满足要求的内容 字…

2022年12月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:区间合并 给定 n 个闭区间 [ai; bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],但是[1;2] 和 [3;4] 不可以合并。 我们的任务是…

数据结构(Java实现)-反射、枚举以及lambda表达式

Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分…

java对时间序列每x秒进行分组

问题&#xff1a;将一个时间序列每5秒分一组&#xff0c;返回嵌套的list&#xff1b; 原理&#xff1a;int除int会得到一个int&#xff08;也就是损失精度&#xff09; 输入&#xff1a;排序后的list&#xff0c;每几秒分组值 private static List<List<Long>> get…

C语言——指针基本语法

概述 内存地址 在计算机内存中&#xff0c;每个存储单元都有一个唯一的地址(内存编号)。 通俗理解&#xff0c;内存就是房间&#xff0c;地址就是门牌号 指针和指针变量 指针&#xff08;Pointer&#xff09;是一种特殊的变量类型&#xff0c;它用于存储内存地址。 指针的实…

Flutter 项目结构文件

1、Flutter项目的文件结构 先helloworld项目&#xff0c;看看它都包含哪些组成部分。首先&#xff0c;来看一下项目的文件结构&#xff0c;如下图所示。 2、介绍上图的内容。 -litb/main.dart文件&#xff1a;整个应用的入口文件&#xff0c;其中的main函数是整个Flutter应…

【Qt】QML-04:自定义变量(属性)property

1、property 1.1 介绍 property用来自定义属性。 什么是属性&#xff1f;面向对象中&#xff0c;类由方法和属性构成。对于从C语言的过来人&#xff0c;更喜欢称之为变量。 之所以说“自定义”&#xff0c;是因为QML语言本身已有默认定义好的属性&#xff0c;这些属性不可以…

关于C# halcon内存泄漏的研究

开发环境&#xff1a;Win7 VS2002 halcon12&#xff0c; 直接运行Debug的exe 不释放 private void butTemp_Click(object sender, EventArgs e) { HOperatorSet.SetSystem("clip_region", "false"); HObject region; …

Redis与Mysql区别

一、关系型数据库 mysql&#xff0c;pgsql,oracle ,sqlserver 支持连表关联查询&#xff08;会有一些特定的语法特特性&#xff09; 二、非关系型数据库 redis,mongodb,memcache &#xff08;key-value&#xff09; 三、关系型数据库与非关系型数据库的区别&#xff1a; 1&am…

[笔记] 阿里云域名知识

文章目录 前言一、域名二、域名常见分类2.1 泛域名2.2 为什么要设置子域名 三、记录类型3.1 A- 将域名指向一个PV4地址3.2 CNAME- 将域名指向另外一个域名3.3 AAAA- 将域名指向一个PV6地址3.4 MX- 将域名指向邮件服务器地址3.5 SRV- 记录提供特定的服务的服务器使用场景 3.6 TX…

一个集成的BurpSuite漏洞探测插件1.2

4、DNSLog查询漏报 注&#xff1a;扫描结束后才会在BurpSuite的Target、Dashboard模块显示高危漏洞&#xff0c;进程扫描中无法进行同步&#xff0c;但可以在插件中查看&#xff08;涉及到DoPassive方法问题&#xff09;。

说说Flink on yarn的启动流程

分析&回答 核心流程 FlinkYarnSessionCli 启动的过程中首先会检查Yarn上有没有足够的资源去启动所需要的container&#xff0c;如果有&#xff0c;则上传一些flink的jar和配置文件到HDFS&#xff0c;这里主要是启动AM进程和TaskManager进程的相关依赖jar包和配置文件。接着…

sqlmap中文文档

这是 sqlmap -hh的翻译&#xff0c;后续可能会对参数进行详细的示例 sqlmap 普通选项 -h, --help # 显示基本帮助信息并退出 -hh # 详细帮助信息 --versino # 版本 -v # 日志详细级别 0-60&#xff1a;只显示python错误以及严重的信息。1&#xff1a;同时显示基本信…

胆囊结石3mm严重吗(解析胆囊结石的危害和处理方法)

胆囊结石是指胆囊内形成的固体结晶&#xff0c;大小不一&#xff0c;主要由胆固醇、胆汁色素和钙盐等物质组成。胆囊结石是一种比较常见的疾病&#xff0c;据统计&#xff0c;我国胆囊结石的患病率约为5%~10%左右。那么&#xff0c;胆囊结石3mm严重吗?下面就来一起了解一下。 …

Linux

LINUX http://www.kernel.org/(Linux内核源代码官方网站) 驱动 裸机驱动 系统驱动 设备驱动在Linux操作系统中的层次 Linux系统驱动类型 字符设备 块设备 网络设备 Linux内核模块的三要素 入口 出口 许可证 #include <linux/init.h> #include <linux/module.h…

如何快速找出占用空间最大的文件?

分析&回答 使用 find 命令找到大于指定大小的文件&#xff1a; 当前目录大于500M文件 find ./ -size 500M用户目录大于500M文件 find ~ -type f -size 500M根目录大于500M文件 find / -type f -size 500M 复制代码 让文件按大小排序 du -h * | sort -n 喵呜面试助手&am…

vue3:使用:图片生成二维码并复制

实现在 vue3 中根据 url 生成一个二维码码&#xff0c;且可以复制。 注&#xff09;复制功能 navigator.clipboard.write 只能在安全的localhost 这种安全网络下使用。https中需要添加安全证书&#xff0c;且在域名&#xff08;例&#xff1a;https://www.baidu.com&#xff0…

微服务通信[HTTP|RPC同步通信、MQ异步通信]

概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范&#xff0c;将服务对外暴露的HTTP调用方式为REST API(如GET…