当前位置: 首页 > news >正文

WEB安全--Java安全--shiro550反序列化漏洞

一、前言

什么是shiro?

        shiro是一个Apache的Java安全框架

它的作用是什么?

        Apache Shiro 是一个强大且灵活的 Java 安全框架,用于处理身份验证、授权、密码管理以及会话管理等功能

二、shiro550反序列化原理

1、用户首次登录并勾选记住密码功能,第一个请求包会多一个remember-me的参数

2、然后第一个回包中就会将用户登录信息进行>>序列化>>AES加密>>base64编码,并将该值存到Cookie的rememberMe参数中,并返回给客户端

3、当客户端发起第二个请求包时,该数据包中的Cookie就会携带rememberMe和它的值(密文)

然后服务端取出Cookie中的密文进行>>base64解码>>AES解密>>反序列化,然后就能取出用户登录信息进行校验

三、漏洞原因

在AES加解密的过程中,使用的是相同的秘钥,而在shiro版本<=1.2.24的版本中使用了固定的密钥kPH+bIxk5D2deZiIxcaaaA==

所以攻击者就能通过相同的方式伪造Cookie中的密文,写入恶意代码,在服务端对Cookie中的数据进行反序列化时就会执行恶意代码

图示:

 

四、利用思路总结

在我们知道shiro550版本框架存在反序列化漏洞后,就可以通过下面方式实现命令执行:

1、客户端首次用账号密码登录,勾选记住密码

2、响应包中的set-Cookie中存放着加密的用户信息密文

3、客户端再次访问服务端,请求包中的Cookie中就会存在rememberMe: 加密的用户信息密文

4、拦截这个请求包

5、构造payload(如CC链),将payload>>序列化>>AES加密>>base64编码

6、用构造的payload密文替换请求包中的rememberMe中的加密的用户信息密文

7、放包(请求包),服务端接收到我们更改后的请求包

8、JVM取出Cookie中的rememberMe中的密文进行>>base64解码>>AES解密>>反序列化

9、反序列化的readObject()触发CC链,实现命令执行

http://www.xdnf.cn/news/483931.html

相关文章:

  • Linux——UDP/TCP协议理论
  • 利用Python高效整理猫狗数据集训练集与验证集(附源码讲解)
  • 技术书籍推荐(001)
  • 硬件中的OID是什么?SNMP如何通过OID获取信息?——用“图书馆”比喻彻底讲清底层原理-优雅草卓伊凡|小无
  • makefile细节说明
  • 在 VSCode 中运行 Vue.js 项目
  • 抛物线运动路径动画实现
  • Android framework 中间件开发(三)
  • 高效管理嵌套Git仓库:三合一脚本解决方案
  • 【AI】CUDA 是如何成功的?(AI 计算的民主化,第 3 部分)
  • MOS管、三极管与IGBT管的原理与应用全面对比
  • 如何解决Move to iOS 不起作用的问题?
  • Yocto Project 快速构建
  • 将单链表反转【数据结构练习题】
  • 机器学习入门之KNN算法和交叉验证与超参数搜索(三)
  • 如何在一台环境中同时安装ragflow和ragflow-plus
  • PCL 绘制二次曲面
  • Golang基于反射的ioctl实现
  • 鸿蒙5.0项目开发——鸿蒙天气项目的实现(主页2)
  • HarmonyOS 开发之 —— 合理使用动画与转场
  • userfaultfd内核线程D状态问题排查
  • 数学实验(Matlab编程基础)
  • Flutter - 集成三方库:日志(logger)
  • 【深度学习】#11 优化算法
  • 麒麟服务器操作系统安装 MySQL 8 实战指南
  • EC800X_DP-DTU-Q600R 系列开发板介绍
  • QML 动画控制、顺序动画与并行动画
  • 25考研经验贴(11408)
  • 智能呼叫系统中的NLP意图理解:核心技术解析与实战
  • 游戏引擎学习第286天:开始解耦实体行为