Shiro下的CB链

slug
series-status
status
summary
date
series
type
password
icon
tags
category

title: 【Java反序列化NDAY-叁】Shiro 下的 CB 链 date: 2023-03-06 21:14:04.835 updated: 2023-09-11 20:17:35.153 url: https://blog.tql.ac/archives/shiro下的cb链 categories:
  • Java反序列化
  • 网络安全 tags:

前言

话接上文,我们的Shiro默认是没有CC依赖的,仅有CB依赖,因此我们本文就来讲一下如何利用原生的CB链进行反序列化漏洞利用。

CB是什么

大家可能知道,之前我们常用的Commons Collection是对Java集合类的一个增强,而CB则是对Java Bean的一种增强。
这里我们先来简单介绍一下Commons Beanutils的一个应用。
首先我们来写一个简单的Java类:
其次我们来简单尝试用Commons Beanutils去获取一下这个类的各种属性:
输出:
notion image
这样可以实现我们可以通过字符串获取对应的对象。
而这里的底层实现如下:
我们跟进Property方法:
notion image
可以看到它调用了另一个对象的getProperty方法。
继续跟进,可以看到它调用了一个getNestedProperty方法
notion image
根据调试信息,可以看到它继续调用了getSimpleProperty:
notion image
在这个方法里会生成一个描述符,在调试时,可以看到这里最终会根据我们的输入转换为对应的Bean的驼峰描述以及对应的get和set方法名:
notion image
这里可能有同学还记得,我们之前在CC中的类加载部分有提到TemplateImpl这个类是如何实现的类加载,在TemplateImpl中就有这么一个方法 getOutputProperties,就符合这个Bean的get方法名的格式同时它还调用了newTransformer方法:
notion image
因此,这里就有一个可以利用的点。
我们把之前的CC3的代码和这里结合一下看一下效果:
执行效果:
notion image
所以可以证明这个命令执行是可行的。

CB利用链

根据前文所说,我们要去找到如何调用 PropertyUtils.getProperty方法。
可以看到这里有一些调用:
notion image
像这里有我们很熟悉的 transform方法。
但是很可惜这个类并没有继承序列化接口。
notion image
另一个我们很熟悉的就是这个compare方法
notion image
在我们的CC2中就用到了 Comparator
因此结合起来整体流程如下:
notion image
整合起来代码如下:
利用exp转换后发包,发现shiro报错:
notion image
但是这里有一个问题就是我这里报的错误和参考视频中不一样,参考视频中的报错为ClassNotFound
notion image
原因则是BeanComparator的构造函数会调用一个CC中的类:
notion image
而这个类在原生Shiro中是没有的。
因此我们需要调用另一个构造方法,代码修改为:
效果:
notion image

YSO问题

yso如果直接对原生的Shiro攻击会存在CB版本问题,因为YSO里是1.9.2的版本的CB,而Shiro里是1.8.3,因此会报错。

总结

有一个小问题没有解决,不知道为什么我的报错不是类notfound。。
Loading...

尚未开始
更新中
近期核心
已完结
已弃更

© River 2021-2025