shiro反序列化漏洞分析

news2024/10/5 4:47:53

分析源码

我们去源码里面去找找,搜索rememberMe:

发现有一个 CookieRememberMeManager 这个类,看名字就知道他多半就是处理 RememberMe 的逻辑,所以根据该类查看它干了什么

这里继承 AbstractRememberMeManager 类,AbstractRememberMeManager 提供了创建和验证这些令牌的方法,以及配置cookie属性的方法。

这是CookieRememberMeManager类的构造函数。首先创建一个名为“rememberMe”的SimpleCookie对象,并将其设置为HttpOnly。然后,将cookie的最大生存期设置为一年,以确保用户在一年内不需要重新登录。最后,将cookie对象赋值给类中的cookie属性。这个构造函数的作用是创建一个CookieRememberMeManager对象,并设置默认的“记住我”cookie配置。如果需要更改cookie的配置,可以使用其他构造函数或通过setter方法来更改属性。

继续往下看,感觉这里是重点有没有.......

看类名可以知道此类用于将序列化后的用户身份信息存储到cookie中。

在方法中,首先通过WebUtils.isHttp(subject)方法判断Subject对象是否为HTTP-aware实例。如果不是,则返回并忽略记住我操作。如果Subject对象是HTTP-aware实例,就可以获取到HttpServletRequest和HttpServletResponse对象,从而可以设置cookie。

接下来是对这些对象执行的操作:

  1. 通过WebUtils.getHttpRequest(subject)方法获取HttpServletRequest对象。
  2. 通过WebUtils.getHttpResponse(subject)方法获取HttpServletResponse对象。
  3. 将序列化后的用户身份信息进行Base64编码。
  4. 创建一个新的SimpleCookie对象,并将其值设置为Base64编码后的身份信息。
  5. 将新的cookie对象保存到HttpServletRequest和HttpServletResponse对象中。

所以这个方法的作用是将序列化后的用户身份信息存储到cookie中,并将其保存到HTTP响应中,以便在用户下一次访问网站时自动登录。

方法调用的跟踪

接下来去查看一下该方法在什么地方被调用(快捷键:Ctrl+Alt+Shift+F7)

左下角如果有弹框的话,将所以选项勾上,下拉范围选项框选择所有。

在这可以看到该类继承的 AbstractRememberMeManager 类调用了该方法。

发现这个方法被 rememberIdentity 方法给调用了。

在这里会发现 rememberIdentity 方法会被 onSuccessfulLogin 方法给调用,跟踪到这一步,就看到了 onSuccessfulLogin 登录成功的方法。

当登录成功后会调用 AbstractRememberMeManage.onSuccessfulLogin 方法,该方法主要实现了生成加密的RememberMe Cookie,然后将RememberMe Cookie设置为用户的Cookie值。在rememberSerializedIdentity 方法里面去实现了。

回到 onSuccessfulLogin 这个地方,这里看到调用了 isRememberMe 很显而易见得发现这个就是一个判断用户是否选择了Remember Me选项。

另一方面  rememberIdentity 方法会调用 rememberSerializedIdentity 方法,到这里为止,我们已经接触到序列化了。

继续跟踪,有一个叫 getRememberedPrincipals 的方法调用getRememberedSerializedIdentity。看名字就知道 getRememberedPrincipals 是一个取得Remember验证的方法。

这里我们再跟进getRememberedPrincipals 方法,(快捷键:Ctrl+Alt+h)

我们继续跟踪 convertBytesToPrincipals方法

因为 convertBytesToPrincipals方法就是处理getRememberedPrincipals 方法 的东西,看名字应该是进行字节转换的。 

该方法首先检查是否存在加密服务,如果存在,则使用密钥对字节数组进行解密。接着,该方法使用"deserialize"方法将字节数组序列化。

我们可以先看反序列化

发现有一个反序列化入口 readObject() 这里就是要利用的点

然后看解码那个地方他的逻辑是如何的

 

该方法名为"decrypt",有一个参数:"encrypted",代表需要解密的字节数组。

该方法首先将需要解密的字节数组赋值给一个名为"serialized"的新的字节数组。然后,该方法通过调用"getCipherService"方法获取加密服务,如果加密服务存在,则用"getDecryptionCipherKey"方法获取解密密钥,并使用加密服务对字节数组进行解密。解密后,将解密后的结果赋值给"serialized"字节数组。最后,该方法返回"serialized"字节数组,即解密后的结果。

在这里我们需要关注俩个点,接口的抽象方法,有两个参数

第一个是要解密的数据

第二个参数就是解密的key了,这个是我们十分关心的,所以我们跟进第二个参数

跟踪返回 decryptionCipherKey

跟踪 setDecryptionCipherKey 方法

 跟踪 setCipherKey 方法

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

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

相关文章

精益生产与MES生产管理系统相互融合

近年来,精益生产理念在企业管理中越来越受欢迎。它强调以最小的浪费,在最短的时间内,生产出高质量的产品。这一理念的实施手段包括准时制生产方式、适时生产方式等,消除浪费、看板、快换工装等都是精益提高的工具方针。 然而&…

【基础篇】四、本地部署Flink

文章目录 1、部署模式2、本地独立部署会话模式的Flink3、本地独立部署会话模式的Flink集群4、向Flink集群提交作业5、Standalone方式部署单作业模式6、Standalone方式部署应用模式的Flink 1、部署模式 会话模式(Session Mode) 先启动Flink集群&#xff0…

【BugBounty】记一次XSS绕过

前言 最近一直在看国外的赏金平台,绕waf是真的难受, 记录一下绕过的场景。 初步测试 一开始尝试XSS,发现用户的输入在title中展示,那么一般来说就是看能否闭合,我们从下面图中可以看到,输入尖括号后被转成了实体。 …

人大金仓数据库V8 windows下安装

此文为人大金仓数据库安装程序(windows下kingbase开发及测试用)。 1 人大金仓-成为世界卓越的数据库产品与服务提供商 官方下载安装包,同时需要下载授权文件,补丁文件可以不下。 2 点击安装 3 选择授权文件 4 默认安装即可&…

百万买手,小红书电商商业化之锚

继直播电商平台后,双11再次迎来新玩家——小红书。 在“2023小红书双十一电商伙伴动员会”上,小红书宣布将在双十一期间投入百亿流量扶持和亿级补贴,这也标志着小红书正式参与到这场电商盛宴中。 值得关注的是,小红书提到要投入…

【EI会议征稿】第三届大数据、人工智能与风险管理国际学术会议 (ICBAR 2023)

第三届大数据、人工智能与风险管理国际学术会议 (ICBAR 2023) 2023 3rd International Conference on Big Data, Artificial Intelligence and Risk Management 第三届大数据、人工智能与风险管理国际学术会议(ICBAR2023)将于2023年11月24-26日在中国成…

2023年,PMP的知识是否过时了?

关于PMP现如今还是否实用,是否过时了这一问题我也考虑过。PMP的知识是否是只能在传统行业应用?它适合在互联网领域进行项目管理吗? 首先,要说清楚PMP是什么? PMP(Project Management Professional&#x…

Vue 关于组件封装时父子组件通讯的三种方式

主要是遵循vue的单向数据源规则,具体用什么方式取决于自己以及项目实际情况 如果是基本类型,可以使用比较简单直接的方法,这里三种方式主要是针对的对象,里面会包含多个参数 方式一:直接通过props直接修改子组件里的值…

从一部iPhone手机看芯片的分类

目录 问题 iPhone X 手机处理器:A11 iPhone X 的两大存储芯片 数字 IC CPU:计算设备的运算核心和控制核心 GPU:图形处理器 ASIC:为解决特定应用问题而定制设计的集成电路 存储芯片:DRAM 和 NAND Flash iPhone…

成集云 | 管家婆ERP集成金蝶云星辰 | 解决方案

源系统成集云目标系统 ​ 编辑 方案介绍 管家婆ERP系统是一个全面而灵活的企业资源计划平台,旨在帮助企业优化和自动化其业务流程,从而提高效率和生产力。该系统集成了从供应链管理、生产管理、财务管理到人力资源管理等所有企业运营方面的功能&#x…

时刻保护留守/独居老人,TSINGSEE青犀AI智能视频监控云监管方案

随着老龄化的发展,老弱群体逐年攀升,其中也不乏独居和留守老人,由于子女和监护人不能时刻陪伴左右,独居老人的日常生活安全,也是大家十分关注的一点,旭帆科技独居/留守老人智能监控方案,为了确保…

centos7.9部署nexus内网源服务器(yum,apt)

1、通过官网或其他方式下载安装包 2、安装Java,自行下载 [rootlocalhost ~]# ll total 189992 -rw-------. 1 root root 1663 Oct 8 09:06 anaconda-ks.cfg -rw-r--r--. 1 root root 194545143 Oct 8 17:43 jdk-8u241-linux-x64.tar.gz [rootlocalhost ~]# …

【C++】进阶模板

模板进阶 一、非类型模板参数二、模板的特化1. 函数模板的特化2. 类模板特化3. 模板特化的应用 三、模板的分离编译1. 分离编译2. 模板的分离编译3. 解决方法 四、模板总结 我们在 初识模板 中已经初步接触过模板了,下面我们开始更进一步学习模板。 一、非类型模板…

webservice接口自动化测试

1&#xff0c;用soupui进行测试 2&#xff0c;安装soupUI 3&#xff0c;测试的时候是给了一个wdsl 操作步诹&#xff1a;new &#xff08;name , 填写地址&#xff09;---导入wsdl文件---看到所有的接口 发送请求的格式<xml> canshu</xml> 应用场景&#xff0c…

模拟大数相加

字符串的大数相加&#xff0c;不可以直接使用stoi&#xff0c;或者stoll这种函数去相加&#xff0c;随时有可能越界。只需要模拟计算加法的过程就可以了。 1.定义两个尾指针&#xff0c;指向num1,nums2的最后一个数字&#xff0c;让这两个数字相加&#xff0c;并把相加的结果记…

使用frida来spawn Fork 的子进程

索引 需求测试程序父进程代码子进程代码 x64dbg插件功能开始调试 frida运行环境用到的文件和代码 需求 最近在学基础的Windows逆向知识&#xff0c;遇到个小问题。一个进程使用CreateProcessW创建的进程该如何在启动时附加&#xff0c;我想调试这个子进程启动时运行的函数。 …

你知道多号发圈的同时并延迟评论的方式吗?

你知道多号发圈的同时并延迟评论的方式吗&#xff1f; 其实很简单。 步骤1&#xff1a;编辑好朋友圈内容 步骤2&#xff1a;设置延迟评论 步骤3&#xff1a;选择多个号发圈 通过以上3个步骤&#xff0c;就可以实现多号发圈的同时并延迟评论。 在发布朋友圈前&#xff0c;只需要…

易点易动设备管理系统:打通采购管理的智能化设备管理解决方案

在现代企业的运营中&#xff0c;设备管理是一个关键的环节。传统的设备管理方法往往效率低下&#xff0c;导致设备故障频发、巡检和维修工作不协调&#xff0c;备件管理不规范。为了解决这些问题&#xff0c;我们引入了易点易动设备管理系统&#xff0c;它能够全面管理设备的生…

SAP内部转移价格(利润中心转移价格)的条件

SAP内部转移价格&#xff08;利润中心转移价格&#xff09; SAP内部转移价格&#xff08;利润中心转移价格&#xff09; SAP内部转移价格&#xff08;利润中心转移价格&#xff09;这个听了很多人说过&#xff0c;但是利润中心转移定价需要具备什么条件。没有找到具体的文档。…

取消加考!自考专业调整,2026年起执行新计划!

就在2023年10月7日&#xff0c;广东省教育考试院发布《关于广东省高等教育自学考试专业调整有关事项的通知》&#xff0c;自学考试迎来新变化&#xff0c;本次专业调整政策性强&#xff0c;涉及面广&#xff0c;持续时间长&#xff0c;一起来看看具体说明~ 关于广东省高等教育自…