Java反序列化漏洞-Shiro721流程分析

环境搭建

漏洞影响版本是 1.2.5 <= Apache Shiro <= 1.4.1

环境下载

所以我们下载对应漏洞版本的源码即可

shrio1.4.1复现的对应源码:

plain 复制代码
https://archive.apache.org/dist/shiro/1.4.1/shiro-root-1.4.1-source-release.zip

下载shiro对应的war依赖包:

plain 复制代码
https://github.com/jas502n/SHIRO-721/blob/master/samples-web-1.4.1.war

tomcat 8.5.76 下载地址:

plain 复制代码
E:\JavaSecurity_Learn\java\code\Shiro721\apache-tomcat-8.5.76

过程

首先IDEA 点击Open 打开Shiro-root-1.4.1的源码的项目,如图路径

Ctrl+Shift+S如图进行配置JDK版本

Ctrl+Alt+S来到进行配置Tomcat服务器

不可以中文路径

最后来到这里进行配置运行

然后如图进行点击

首先来到这里配置war包

这里可以修改访问的路径

在来到服务器这里

然后点击Run就可以看见运行成功了

idea设置自动下载源码和文档

漏洞原理

密钥生成

Ctrl+Alt+B查看相关的实现类

这是Shiro550,可以看见 AbstractRememberMeManager 类 中的密钥不是动态生成的,而是硬编码

Shiro721对比Shiro550,密钥的生成位置变了

通过断点调试 ,可以看到这个方法的主要功能是:

plain 复制代码
根据指定的算法名称,使用JDKKeyGenerator生成一个适合此CipherService的新密钥(基于algorithmName)
参数:keyBitSize一用于创建密钥的位数大小
返回:创建的、适用于此CipherService的密钥。

可以看见 KeyGenerator 对象调用了init方法

这里调用了下面的双参数init方法,并且获取了一个随机数发生器 SecureRandom

然后步入到这里,可以看见这里生成了一串16字节的随机序列,然后返回了一个SecretKeySpec对象

然后在调用getEncoded()方法来获取16字节的序列。这也是所谓的密钥序列

漏洞利用

工具-ShiroAttack2

ShiroAttack2:https://github.com/SummerSec/ShiroAttack2

利用exp工具直接打即可,我们已经知道这个是Shiro框架网站了

直接输入目标地址

可以看到命令执行成功

参考链接&致谢:

https://goodapple.top/archives/217

https://zhuanlan.zhihu.com/p/73731154

https://goodapple.top/archives/261

难点是如何构造密码爆破,以及工具编写

相关推荐
极创信息4 小时前
信创系统认证服务怎么做?从适配到验收全流程指南
java·大数据·运维·tomcat·健康医疗
格鸰爱童话4 小时前
向AI学习项目技能(六)
java·人工智能·spring boot·python·学习
白宇横流学长4 小时前
停车场管理系统的设计与实现
java
Flittly4 小时前
【SpringAIAlibaba新手村系列】(18)Agent 智能体与今日菜单应用
java·spring boot·agent
木井巳5 小时前
【递归算法】目标和
java·算法·leetcode·决策树·深度优先
亦暖筑序5 小时前
手写 Spring AI Agent:让大模型自主规划任务,ReAct 模式全流程拆解
java·人工智能·spring
敖正炀5 小时前
ReentrantLock 与 synchronized对比
java
XiYang-DING5 小时前
【Java】二叉搜索树(BST)
java·开发语言·python
weixin_437957615 小时前
Mysql安装不成功
java