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链,实现命令执行

相关推荐
惊讶的猫17 小时前
探究StringBuilder和StringBuffer的线程安全问题
java·开发语言
jmxwzy17 小时前
Spring全家桶
java·spring·rpc
Halo_tjn17 小时前
基于封装的专项 知识点
java·前端·python·算法
Fleshy数模18 小时前
从数据获取到突破限制:Python爬虫进阶实战全攻略
java·开发语言
像少年啦飞驰点、18 小时前
零基础入门 Spring Boot:从“Hello World”到可上线的 Web 应用全闭环指南
java·spring boot·web开发·编程入门·后端开发
苍煜18 小时前
万字详解Maven打包策略:从基础插件到多模块实战
java·maven
有来技术19 小时前
Spring Boot 4 + Vue3 企业级多租户 SaaS:从共享 Schema 架构到商业化套餐设计
java·vue.js·spring boot·后端
东东51619 小时前
xxx医患档案管理系统
java·spring boot·vue·毕业设计·智慧城市
一个响当当的名号20 小时前
lectrue9 索引并发控制
java·开发语言·数据库
进阶小白猿20 小时前
Java技术八股学习Day30
java·开发语言·学习