0
点赞
收藏
分享

微信扫一扫

Shiro反序列化漏洞(Shiro-550、Shiro-721)

萧萧雨潇潇 2022-04-07 阅读 64
java后端

0x01 Shiro介绍

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

Apache Shiro反序列化漏洞分为两种:Shiro-550Shiro-721

0x02 Shiro-550 反序列化漏洞

CVE-2016-4437

漏洞原理

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的Cookie,在服务端对rememberMe的Cookie值先base64解码然后AES解密在反序列化,就导致了反序列化RCE漏洞。

影响范围

Apache Shiro <= 1.2.4

原因分析

Apache Shiro默认使用了CookieRememberMeManager,其处理Cookie的流程:得到rememberMe的Cookie值 -> Base64解码 -> AES解密 ->反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

rememberMe生成过程:序列化->AES加密->Base64编码->生成rememberMe内容

服务端接收Cookie值时:检索Cookie中的rememberMe内容->Base64解密->AES解密(加密密钥硬编码) ->反序列化(未做处理)

AES的加密密钥在Shiro的1.2.4之前版本中使用的是硬编码,其默认密钥的base64编码后的值可在代码中找到,只要找到密钥后就可以通过构造恶意的序列化对象进行编码,加密,然后作为Cookie加密发送,服务端接收后会解密并触发反序列化漏洞。

漏洞特征

Shiro反序列化的特征:在返回包的Set-Cookie中存在rememberMe=deleteMe 字段

如可去发现

一种情况是多半发生在登录处,返回包中包含 rememberMe=deleteMe 这个字段

如下图:
在这里插入图片描述

另一种情况是直接发送源数据包,返回的数据包中不存在关键字,可以通过在发送数据包的Cookie中增加字段

rememberMe=deleteMe

然后查看返回包中是否存在关键字
在这里插入图片描述
工具自动检测

自动检测Shiro反序列化(burpsuite插件) ---- ShiroScanner
添加插件,自动发现

效果如下:
在这里插入图片描述
实战漏洞攻击

直接上工具
在这里插入图片描述
检测出存在漏洞,进行利用
在这里插入图片描述
注入内存马,连接WebShell
在这里插入图片描述
在尝试反弹Shell到VPS
在这里插入图片描述

0x03 Shiro-721 反序列化漏洞

Shiro Padding Oracle Attack

漏洞详情

Apache Shiro 存在高危代码执行漏洞。该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。

漏洞原理

由于Apache Shiro cookie中通过 AES-128-CBC模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。

影响版本

Apache Shiro < 1.4.2 版本
在这里插入图片描述

漏洞指纹

Set-Cookie:rememberMe=deleteMe
URL中有shiro字样
有一些时候服务器不会主动返回 rememberMe=deleteMe,直接发包即可。

利用技巧

1.该漏洞需要登录后获取到合法的Cookie: rememberMe=XXX后才可以进行利用, 看起来不是很好利用 但实际上有一些网站是开放注册的, 而且这个洞不需要知道服务端密钥 所以后续的利用还是可以同Shiro-550一样利用, 而且这里是AES加密的, 自带过WAF属性 ;
2.如果攻击没有生效, 可以试一下删除Cookie中的JSESSIONID 字段, 很多时候这个字段存在的话, 服务端不会去处理 rememberMe。

攻击流程

1.登录网站(勾选Remember),并从Cookie中获取合法的RememberMe。
2.使用RememberMe cookie作为Padding Oracle Attack的前缀。
3.加密 ysoserial 的序列化 payload,以通过Padding Oracle Attack制作恶意RememberMe。
4.重放恶意RememberMe cookie,以执行反序列化攻击。

工具推荐
在这里插入图片描述

参考链接

https://github.com/inspiringz/Shiro-721
https://www.cnblogs.com/xiaozi/p/13239046.html
https://www.cnblogs.com/backlion/p/14077791.html
https://github.com/longofo/PaddingOracleAttack-Shiro-721
举报

相关推荐

0 条评论