Shiro 550反序列化漏洞分析
Shiro 550反序列化漏洞分析
一、漏洞简介
影响版本:Apache Shiro < 1.2.4
特征判断:返回包中包含rememberMe=deleteMe字段。
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
那么,Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是十分的简单。
二、环境搭建
下载后用idea配置tomcat启动:https://github.com/Medicean/VulApps/tree/master/s/shiro/1
利用工具:https://github.com/wyzxxz/shiro_rce_tool
三、漏洞分析
shiro会提供rememberme功能,可以通过cookie记录登录用户,从而记录登录用户的身份认证信息,即下次无需登录即可访问。而其中对rememberme的cookie做了加密处理,漏洞主要原因是加密的AES密钥是硬编码在文件中的,那么对于AES加密算法我们已知密钥,并且IV为cookie进行base64解码后的前16个字节,因此我们可以构造任意的可控序列化payload。
通过在cookie的rememberMe字段中插入恶意payload,
触发shiro框架的rememberMe的反序列化功能,导致任意代码执行。
shiro 1.2.24中,提供了硬编码的AES密钥:kPH+bIxk5D2deZiIxcaaaA==
1)加密过程
处理rememberme的类为org.apache.shiro.web.mgt.CookieRememberMeManager
,它继承AbstractRememberMeManager
类,当登录成功并且勾选了rememberme选项,那么此时将进入onSuccessfulLogin
方法
把断点下到rememberIdentity
后,跟进rememberIdentity
方法
继续跟进rememberIdentity
方法后,可以看到调用了convertPrincipalsToBytes
方法后得到了个bytes,然后传入了rememberSerializedIdentity
中
其实在convertPrincipalsToBytes
中进行了加密操作,我们可以跟进查看
可以看到通过序列化拿到了个bytes,然后在362行进行了encrypt
操作,这里就是加密进行的地方了,跟进查看
看471行,拿到了个CipherService
类,这个类就是用来进行加密的,打开可以看到加密模式为CBC,Padding规则是PKCS5,加密方式为AES
然后473行进行了加密操作,查看在其参数中的getEncryptionCipherKey
方法,这个方法就是用来获取密钥的,此密钥硬编码在了类中,并进行了base64编码
回到之前的encrypt
方法中,等加密完成后,把值return给了前面说的的bytes,然后传进了rememberSerializedIdentity
方法
在rememberSerializedIdentity
方法中,把加密的字符串进行了Base64编码,然后设置到了cookie中
2)解密过程
在shiro中,解密过程就是和加密过程相反的了,解密过程在AbstractRememberMeManager#getRememberedPrincipals
方法中
首先调用getRememberedSerializedIdentity
方法,方法中获得了cookie中的rememberMe的值然后进行base64解码并返回给了bytes
第二步就是调用convertBytesToPrincipals
方法来进行解密
跟进convertBytesToPrincipals
方法
先进行了decrypt
解密,然后再进行的deserialize
反序列化。
查看decrypt
,这里和之前加密过程步骤差不多,用的密钥都是同一个
查看反序列化方法deserialize
getSerializer()
返回的是一个默认的序列化对象DefaultSerializer
跟进DefaultSerializer#deserialize
看到了熟悉的反序列化
四、漏洞修复
Apache Shiro 1.2.5版本的源码,修复方法就是shiro每次启动,都会随机生成一个新的key:https://github.com/apache/shiro/commit/4d5bb000a7f3c02d8960b32e694a565c95976848
Shiro 550反序列化漏洞分析的更多相关文章
- Java安全之Shiro 550反序列化漏洞分析
Java安全之Shiro 550反序列化漏洞分析 首发自安全客:Java安全之Shiro 550反序列化漏洞分析 0x00 前言 在近些时间基本都能在一些渗透或者是攻防演练中看到Shiro的身影,也是 ...
- Apache Shiro Java反序列化漏洞分析
1. 前言 最近工作上刚好碰到了这个漏洞,当时的漏洞环境是: shiro-core 1.2.4 commons-beanutils 1.9.1 最终利用ysoserial的CommonsBeanuti ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- 【JavaWeb】CVE-2016-4437 Shiro反序列化漏洞分析及代码审计
Shiro反序列化漏洞分析及代码审计 漏洞简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. Apache Shiro默认使用了CookieRe ...
- Java安全之Cas反序列化漏洞分析
Java安全之Cas反序列化漏洞分析 0x00 前言 某次项目中遇到Cas,以前没接触过,借此机会学习一波. 0x01 Cas 简介 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用 ...
- 25. Apache Shiro Java反序列化漏洞
前言: 最近在审核漏洞的时候,发现尽管Apache shiro这个反序列化漏洞爆出来好久了,但是由于漏洞特征不明显,并且shiro这个组件之前很少听说,导致大厂很多服务还存在shiro反序列化的漏洞, ...
- Fastjson 1.2.22-24 反序列化漏洞分析
目录 0x00 废话 0x01 简单介绍 FastJson的简单使用 0x02 原理分析 分析POC 调试分析 0x03 复现过程 0x04 参考文章 0x00 废话 balabala 开始 0x01 ...
- ref:Java安全之反序列化漏洞分析(简单-朴实)
ref:https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247484200&idx=1&sn=8f3201f44e ...
- Java安全之Fastjson反序列化漏洞分析
Java安全之Fastjson反序列化漏洞分析 首发:先知论坛 0x00 前言 在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础.利于后面的漏洞分析. 0x01 Fas ...
随机推荐
- uwp 中的音频开发
xml code --------------------------------------------------- <UserControl x:Class="WinTest.H ...
- Navicat查询出的数据有时候不能更改?
Navicate查出数据只读,一种情况是查询没带出主键(唯一索引),无法更新数据
- Quartz任务调度(1)概念例析快速
实例解析概念 在quartz中,有几个核心类和接口:Job.JobDetail.Trigger.Calendar.Scheduler.下面我们结合实例来分析这些类的角色定位.现在我们有一个新闻网站,它 ...
- SQLServer 判断文件是否存在
根据20190621工作写的逻辑,以后可根据实际情况再做修改.顺便记录一下游标的使用,加强记忆. DECLARE @Id NVARCHAR(MAX) DECLARE @UserName NVARCHA ...
- 刷题-力扣-168. Excel表列名称
168. Excel表列名称 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/excel-sheet-column-title 著作权 ...
- Linux centos7 pstree
2021-08-12 1.命令简介pstree (display a tree of processes) 命令用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以直观地看出是谁创建了谁. ...
- Powershell免杀从入门到实践
转载https://www.jianshu.com/p/fb078a99e0d8 前言 文章首发于Freebuf 在之前发布的一篇 渗透技巧之Powershell实战思路 中,学习了powershel ...
- springMVC学习总结(三) --springMVC重定向
根据springMVC学习总结(一) --springMVC搭建搭建项目 在com.myl.controller包下创建一个java类WebController. 在jsp子文件夹下创建一个视图文件i ...
- Django项目中的模板继承
1. 定义一个基础的页面HTML文件base.html <!DOCTYPE html> <html lang="en"> <head> < ...
- HTB Hack The Box -- Oopsiec
信息收集 开放了22ssh,80端口,其中ssh有弱口令爆破端口 先打开网页,然后进行目录爆破,在这期间先看一下网页的大概信息 没爆到什么有用的东西,但是有uploads文件夹说明是不是说明有文件上传 ...