Commons-beanutils

流程图

img

分析与复现

0x00 前置知识

1. Java Bean

具体可见:JavaBean

2. commons-beanutils

commons-beanutils 是 Apache 提供的一个用于操作 JAVA bean (普通 JAVA 类对象)的工具包。里面提供了各种各样的工具类,让我们可以很方便的对 bean 对象的属性进行各种操作。

commons-beanutils 中提供了一个静态方法 PropertyUtils.getProperty,让使用者可以直接调用任意JavaBean的getter方法,比如:

PropertyUtils.getProperty(new Cat(), "name");

此时,commons-beanutils 会自动找到 name 属性的 getter 方法,也就是 getName,然后调用,获得返回值。

除此之外,PropertyUtils.getProperty 还支持递归获取属性,比如a对象中有属性b,b对象中有属性c,我们可以通过PropertyUtils.getProperty(a, “b.c”);的方式进行递归获取。

除了 PropertyUtils 之外,commons-beanutils 还提供了很多别的类:

  1. MethodUtils :通过反射对对象的方法做各种各样的操作。

  2. ConstructorUtils :通过反射对对象的构造方法做各种操作。

  3. PropertyUtils :通过反射对对象的属性做各种操作。

  4. BeanUtils:通过反射提供了Bean对象的一些便捷操作方法。

  5. ConvertUtils :提供了数据类型相互转换的一些方法。

具体的使用可见:commons-beanutils使用手册

0x01 概述

1. 利用版本

commons-beanutils 1.9.2

2. 限制

0x02 调用链分析

在前面的 CC 链中我们知道,调用 TemplatesImpl.newTransformer 方法可以进一步调用到后面的 ClassLoader.loadClass

img

也就是说,哪里调用了 newTransformer,哪里就能够走完后面这一条链,在 CC3 中我们找到了 TrAXFilter 的构造函数。实际上我们在 IDEA 中进一步向上寻找时,还能够找到别的方法,就比如这个 getOutputProperties 方法。

img

CB 中的 BeanComparator 类提供了一个 compare 方法,该方法用于比较两个 JavaBean 是否相等,compare 方法中调用了 PropertyUtils.getProperty 方法。我们知道 PropertyUtils.getProperty 最终会调用某个对象的 getXXX 方法。

img

这样一来,使用 PropertyUtils.getProperty 来调用 TemplatesImpl.getOutputProperties 方法,就可以走完后面的 ClassLoader 了。

另外,在 CC4 那一条链中,我们知道 PriorityQueue.readObject 会调用 compare 方法,正好对应这里的 BeanComparator.compare。因此整条链就走完了

具体调用链如下:

img

0x03 exp 编写:

需要注意的是,需要调用的方法为 getOutputProperties ,如果使用 PropertyUtils.getProperty 来调用,传入的字符串需要为 “outputProperties”(第一个字母为小写)。

import com.sun.org.apache.xalan.internal.xsltc.trax
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值