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

14 篇文章 0 订阅

目录

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网络安全行业门户

  • 18
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未知百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值