Shiro721 反序列化漏洞(CVE-2019-12422)

news/2024/10/18 14:18:18/

目录

Shiro550和Shiro721的区别

判断是否存在漏洞

漏洞环境搭建

漏洞利用

利用Shiro检测工具

利用Shiro综综合利用工具


这一篇还是参考别的师傅的好文章学习Shiro的反序列化漏洞

上一篇也是Shiro的反序列化漏洞,不同的是一个是550一个是721,那么这两个有什么区别的?

Shiro550和Shiro721的区别

这两个漏洞主要区别在于Shiro550使用已知密钥碰撞,只要有足够密钥库(条件较低),不需要Remember Cookie然而Shiro721的ase加密的key基本猜不到,系统随机生成,可使用登录后rememberMe去爆破正确的key值,即利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造 RememberMe Cookie 值来实现反序列化漏洞攻击,难度高

判断是否存在漏洞

漏洞指纹:

  • URL中含有Shiro字段
  • cookie中含有rememberMe字段
  • 返回包中含有rememberMe

漏洞环境搭建

这里的漏洞环境还是使用docker,分别执行下列命令来进行环境搭建:

git clone https://github.com/3ndz/Shiro-721.git
cd Shiro-721/Docker
docker build -t shiro-721 .
docker run -p 8080:8080 -d shiro-721

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

然后我们可以在浏览器中访问一下

可以看到到这里环境就已经搭建完成了

漏洞利用

登录网站,并从cookie中获取cookie:

使用RememberMe cookie作为Padding Oracle Attack的前缀。加密syserial的序列化有效负载,以通过Padding Oracle Attack制作精心制作的RememberMe。请求带有新的RememberMe cookie的网站,以执行反序列化攻击。攻击者无需知道RememberMe加密的密码密钥。

加密方式:AES-128-CBC 属于AES加密算法的CBC模式,使用128位数据块为一组进行加密解密,即16字节明文,对应16字节密文,,明文加密时,如果数据不够16字节,则会将数据补全剩余字节

若最后剩余的明文不够16字节,需要进行填充,通常采用PKCS7进行填充。比如最后缺3个字节,则填充3个字节的0x03;若最后缺10个字节,则填充10个字节的0x0a;

若明文正好是16个字节的整数倍,最后要再加入一个16字节0x10的组再进行加密

Padding Oracle Attack原理 Padding Oracle攻击可以在没有密钥的情况下加密或解密密文

Shiro Padding Oracle Attack(Shiro填充Oracle攻击)是一种针对Apache Shiro身份验证框架的安全漏洞攻击。Apache Shiro是Java应用程序中广泛使用的身份验证和授权框架,用于管理用户会话、权限验证等功能。

Padding Oracle Attack(填充Oracle攻击)是一种针对加密算法使用填充的安全漏洞攻击。在加密通信中,填充用于将明文数据扩展到加密算法块大小的倍数。在此攻击中,攻击者利用填充的响应信息来推断出加密算法中的秘密信息。

Shiro Padding Oracle Attack利用了Shiro框架中的身份验证过程中的一个漏洞,该漏洞允许攻击者通过填充信息的不同响应时间来确定身份验证过程中的错误。通过不断尝试不同的填充方式,攻击者可以逐步推断出加密秘钥,并最终获取访问权限。

这种攻击利用了填充错误的身份验证响应来获取关于秘密信息的信息泄漏,然后根据这些信息进行进一步的攻击。为了防止Shiro Padding Oracle Attack,建议及时更新Apache Shiro版本,确保已修复该漏洞,并采取其他安全措施,如使用安全的加密算法和密钥管理策略。

上面描述的过程我们可以利用shiro利用工具来辅助实现:

利用Shiro检测工具

将登录后获取的set-cookie值当中的rememberMe值,将值复制下来,放到工具当中

选择shiro721,输入目标url,设置rememberMe值,点击下一步,等待即可

点击下一步后,下面的一个页面还是点击下一步,就可以进行漏洞利用页面了

等待爆破出正确的密钥后我们可以进行命令执行了

利用Shiro综综合利用工具

先输入url,点击爆破密钥

然后点击爆破利用链及回显,然后到命令执行页面尝试执行命令:

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

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

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

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


http://www.ppmy.cn/news/1470473.html

相关文章

C#开发-集合使用和技巧(五)集合中的转换方法

在C#中&#xff0c;Select, ToList, 和 ToArray 都是用于集合转换的方法&#xff0c;它们各自有不同的用途和适用场景。 测试数据 /// <summary>/// 设备类/// </summary>class Device{/// <summary>/// Id/// </summary>public int Id { get; set; }…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么&#xff1f;核心组件有什么&#xff1f;有什么特性和优势&#xff1f;适用于什么场景&#xff1f; 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…

学习新语言方法总结(一)

随着工作时间越长&#xff0c;单一语言越来越难找工作了&#xff0c;需要不停地学习新语言来适应&#xff0c;总结一下自己学习新语言的方法&#xff0c;这次以GO为例&#xff0c;原来主语言是PHP &#xff0c;自学GO 了解语言特性&#xff0c;知道他是干嘛的 go语言&#xff0…

Linux部署FTP服务

什么是FTP服务 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是TCP/IP协议组中的协议之一。该协议是Internet文件传输的基础&#xff0c;它由一系列规格说明文档所定义&#xff0c;目的是让用户能把一个主机上的文件复制到另一个主机上&#xff…

vue嵌套H5到APP,安卓键盘顶起页面内容错乱解决方案

1.h5嵌套到APP&#xff0c;input输入框页面被键盘顶起错乱 2.解决方案&#xff1a;不能使用定位&#xff0c;使用margin-top 3.如果想满屏兼容比如登陆页面 按钮在下面 不允许出现滚动则则需要手动计算margin-top的高度 4.需求 &#xff1a;登陆页面内嵌H5&#xff0c;兼容各个…

服务器数据恢复—raid5热备盘同步失败导致阵列崩溃如何恢复数据?

服务器存储数据恢复环境&故障&#xff1a; 某品牌DS5300存储&#xff0c;包含一个存储机头和多个磁盘柜&#xff0c;组建了多组RAID5磁盘阵列。 某个磁盘柜中的一组RAID5阵列由15块数据盘和1块热备硬盘组建。该磁盘柜中的某块硬盘离线&#xff0c;热备盘自动替换并开始同步…

后端不提供文件流接口,前台js使用a标签实现当前表格数据(数组非blob数据)下载成Excel

前言&#xff1a;开发过程中遇到的一些业务场景&#xff0c;如果第三方不让使用&#xff0c;后端不提供接口&#xff0c;就只能拿到table数据(Array)&#xff0c;实现excel文件下载。 废话不多说&#xff0c;直接上代码&#xff0c;方法后续自行封装即可&#xff1a; functio…

CPN Tools学习——时间和队列【重要】

-Timed Color Sets 时间颜色集 -Token Stamps 令牌时间戳 -Event Clock 全局/事件/模拟时钟 -Time Delays on Transitions过渡的时间延迟 - List Color Set列表颜色集 - Queue排队 1.时间颜色集 在定时CPN模型令牌中有&#xff1a; &#xff08;1&#xff09;象征性的颜…