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

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

相关推荐
zhangx1234_14 小时前
javaEE 多线程4
java·开发语言
中电金信15 小时前
从业务调优到分层缓存:DeepSeek V4 Flash的PPU实践
java·开发语言
snow@li15 小时前
ruoyi-vue-pro/芋道源码:一键改包名/用项目自带的 ‌ProjectReactor‌ 程序/彻底、省事
java
熊出没15 小时前
CommitLoom 使用教程:在 IntelliJ IDEA 中自动生成 Git 提交信息
java·git·intellij-idea
步行cgn15 小时前
Spring MVC POST 请求乱码:原因与完整解决方案
java·spring·mvc
y1su15 小时前
Leetcode 链表,树,回溯 模板
java·leetcode·链表
qianyuqiye115 小时前
K8s 命名空间与 Pod 入门:从概念到实战
java·docker·kubernetes
牧瀬クリスだ16 小时前
观察者模式:一个对象变化,一群对象自动响应
java·观察者模式·设计模式
小张成长计划..16 小时前
【Linux】26:线程互斥和同步
java·开发语言
邪修king18 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维