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

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

相关推荐
方也_arkling5 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮5 小时前
Spring Bean作用域与生命周期全解析
java·spring
Chengbei115 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1125 小时前
web-第一次课后作业
java·开发语言·idea
秋96 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
DIY源码阁6 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
basketball6167 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
JAVA面经实录9178 小时前
MyBatis面试题库
java·mybatis
小江的记录本8 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试