shiro反序列化漏洞

一、反序列化概念

1.什么是序列化?

序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中,保证对象的完整性
和可传递性;
反序列化即逆过程,由字节流还原成对象。根据字节流中保存的对象状态及描述信息,
通过反序列化重建对象。

2.序列化出现场景

●远程和进程间通信(RPC/IPC)
●连线协议、Web服务、消息代理
●缓存/持久性存储区
●数据库、缓存服务器、文件系统
●HTTP cookie、HTML表单参数、API身份验证令牌

二、Apache Shiro 1.2.4反序列化漏洞

1.定义

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管
理。使用Shiro的易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应
用程序到最大的网络和企业应用程序。
漏洞影响版本
Apache Shiro <=1.2.4

2.Shiro反序列化漏洞原理

AES加密的密钥Key被硬编码在代码里,Shiro是开源软件,意味着每个人通过源代码
都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化,
AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将
rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
在服务端接收cookie值时,按照如下步骤来解析处理:
检索RememberMe cookie 的值
Base 64解码
使用AES解密(加密密钥硬编码)
进行反序列化操作,生成用户登录信息对象(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

3.漏洞特征

shiro反序列化的特征:
返回包中存在 rememberMe=deleteMe 字段

三、CVE-2016-4437漏洞复现(实验)

1.搭建环境

使用vulhub进行环境搭建,cd shiro/CVE-2016-4437
执行docker-compose up -d启动漏洞环境
在这里插入图片描述

访问8080
在这里插入图片描述

2.漏洞特征验证

1)未登陆验证

使用BP抓包,未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段
在这里插入图片描述

2)登陆失败验证

登陆失败的话,不管勾不勾选RememberMe字段,返回包中都会有rememberMe=deleteMe字段
在这里插入图片描述

3)登陆成功验证

使用正确账号admin:vulhub进行登录

① 不勾选

不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有
rememberMe=deleteMe字段。
在这里插入图片描述

但是之后的所有请求中Cookie都不会有rememberMe
在这里插入图片描述

② 勾选

勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有
rememberMe=deleteMe字段,还会有rememberMe字段的所有请求
在这里插入图片描述
在这里插入图片描述

之后中Cookie都会有rememberMe字段
在这里插入图片描述

4)Shiro漏洞验证方法

如何判断网站是否使用shiro
找到网站登录的地方
随便输入账号密码抓包(一定要输入点击登录),看返回包是否有remembeMe字段,如我们直接访问登录的页面不进行登录,此时返回的数据包是没有remember字段的
如果没有remembeMe
还可以尝试在请求包中的cookie中加入 rememberMe=1 ,来查看返回包是否有rememberMe=deleteMe字段。如果cookie字段有值则先清空这时,我们手动加上一个cookie:rememberMe=1,注意cookie要放在Upgrade的上面,则返回了remember字段。说明使用了shiro框架,可能存在shiro反序列化漏洞
在这里插入图片描述

5)漏洞利用

手工检测出了使用了shiro框架后就开始验证是否存在漏洞了如果存在则进
行漏洞利用,这里漏洞检测和利用的方式有两种
第一种是使用jar工具进行验证。
第二种方式是使用python脚本进行验证。
使用jar工具检测是否存在shiro漏洞,执行命令
在这里插入图片描述

反弹shell
在这里插入图片描述在这里插入图片描述

四、CVE-2019-12422漏洞复现(实验)

1.搭建环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值