Shiro550 反序列化漏洞(CVE-2016-4437)

2024-06-20 09:28

本文主要是介绍Shiro550 反序列化漏洞(CVE-2016-4437),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

Shiro介绍

漏洞原理

判断是否存在漏洞

利用ShiroExploit工具执行命令:

利用shiro-exploit工具+综合利用工具执行命令:


这一篇是参考别的师傅的好文章对Shiro550反序列化漏洞的学习和练习

Shiro介绍

Apache Shiro是一个强大易用的java安全框架,提供了认证、授权、加密和会话管理等功能。Shiro框架直观、易用,同时也能提供健壮的安全性。

漏洞原理

在Apache shiro的框架中,执行身份验证时提供了一个记住密码的功能(RememberMe),如果用户登录时勾选了这个选项,用户的请求数据包中将会在cookie字段多出一段数据,这一段数据包含了用户的身份信息,且是经过加密的。

加密的过程是:

用户信息=>序列化=>AES加密 (这一步需要用密钥key) =>base64编码=>添加到RememberMe Cookie字段。

勾选记住密码之后,下次登录时,服务端会根据客户端请求包中的cookie值进行身份验证,无需登录即可访问。

那么显然,服务端进行对cookie进行验证的步骤就是:

取出请求包中rememberMe的cookie值 => Base64解码=>AES解密 (用到密key) =>反序列化。

勾选rememberMe后,POST请求包中会有rememberMe字段,而服务端响应包的Set-Cookie中会有rememberMe=deleteMe字段,同时会生成对应的rememberMe字段。

简单来说:

知道密钥,因为Apache提供的密钥写死在代码里面,可以借此恶意构造cookie数据。

攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。

判断是否存在漏洞

1.未登录的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段

2.登录失败的话,不管有没有勾选RememberMe字段,返回包都会有 rememberMe= deleteMe 字段

3.不勾选RememberMe,登录成功的话,返回包set-Cookie里有rememberMe=deleteMe字段,但是之后的所有请求中Cookie都不会有RememberMe字段

4.勾选RememberMe,登录成功的话,返回包seLCookie里有rememberMe=deleteMe字段,还会有remember 字段,之后的所有请求中Cookie都会有rememberMe字段

5.或者可以在cookie后面自己加一个rememberMe=1.看返回包有没有rememberMe= deleteMe

移动到如下路径:

/root/vulhub-master/shiro/CVE-2016-4437

然后使用docker-compose up -d来拉取环境:

拉取完成后可以访问一下web页面:

可以看到是一个登录页面 

我们抓包查看一下

在返回包当中发现存在rememberMe=deleteMe字样,可以大概确定有配置shiro,下面我们就可以进行漏洞利用了


利用ShiroExploit工具执行命令:

Releases · feihong-cs/ShiroExploit-Deprecated · GitHub

进入工具后,输入漏洞的URL:

点击下一步会让我们选择漏洞的检测方式,我们可以直接选择下一步

然后成功的检测到了漏洞,我们可以执行命令

可以看到命令成功的执行了

利用shiro-exploit工具+综合利用工具执行命令:

GitHub - Ares-X/shiro-exploit: Shiro反序列化利用工具,支持新版本(AES-GCM)Shiro的key爆破,配合ysoserial,生成回显Payload

这个工具是一个命令行工具,需要有python环境,我们可以通过这个工具获取到key,然后在添加到其他shiro利用工具中来进行漏洞利

获取key

加入到漏洞利用工具中进行漏洞利用:

注:也可以只使用该工具,也可以进行密钥的破解

执行命令:

可以看到成功的执行命令了

 参考文章:

Shiro550与shiro721反序列化原理及复现解析 - FreeBuf网络安全行业门户

shiro反序列化漏洞原理分析以及漏洞复现 - FreeBuf网络安全行业门户

java经典漏洞复现(基于vulhub) - FreeBuf网络安全行业门户

这篇关于Shiro550 反序列化漏洞(CVE-2016-4437)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077741

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR