Java代码审计——Commons Collections5 BadAttributeValueExpException
2023-04-18 14:21:03 时间
0x00 前言
反序列化总纲
cc链无非就是不同的调用拼接在一起形成的,比如cc5就是在cc1的基础上进行调用调整的。
0x01 BadAttributeValueExpException
在LazyMap的基础上,发现了一个新的调用方式,就是通过 TiedMapEntry+BadAttributeValueExpException的方式进行调用的。
在之前,我们知道LazyMap需要调用get方法才可以触发,那么我们的主题就是如果去触发LazyMap的get方法。
1.TiedMapEntry
首先来看这个类的构造方法。
可以看到存储了一个Map对象
然后找此类中调用map.get的地方
然后继续找getValue的地方,可以看到三个方法equals,hashcode,toString
那么也就是说只要找到一个类的readObject中可以触发这四个方法就可以续上我们的LazyMap。
2.BadAttributeValueExpException
来看这个类的readObject方法,可以看到toString的方法
要想执行到toString方法,那么val就不能为空,所以我们需要对val进行一个赋值。
poc:
Field valfield = val.getClass().getDeclaredField("val");
Reflections.setAccessible(valfield);
valfield.set(val, entry);
当val有值了之后就会触发toString方法,就会走到TiedMapEntry,然后调用LazyMap的get方法,然后走迭代链或者其迭代链。
0x03 使用条件
- 除最新版本无限制
0x04 要点笔记
- 通过TiedMapEntry包裹LazyMap
- 通过BadAttributeValueExpException调用toString方法
有空可以关注一下公众号鸭
相关文章
- Jease 2.6发布 Java开源内容框架
- JVM调优总结:反思
- JVM调优总结:调优方法
- JVM调优总结:新一代的垃圾回收算法
- JVM调优总结:典型配置举例
- JVM调优总结:分代垃圾回收详述
- JVM调优总结:垃圾回收面临的问题
- JVM调优总结:基本垃圾回收算法
- JVM调优总结:一些概念
- 用Java GUI编写的画板程序
- Java的动态绑定机制
- jOOQ 2.0.2发布 Java的ORM框架
- Java中带复选框的树的实现和应用
- Java网络编程菜鸟进阶:TCP和套接字入门
- 甲骨文与谷歌专利权之争定于今年三月开审
- Java调用C/C++编写的第三方dll动态链接库
- 集成开发环境 NetBeans IDE 7.1正式版发布
- kangle 2.7.5紧急发布 防hash碰撞攻击
- 东方通技术引领模式为国产软件“争权”
- UML中关联,组合与聚合等关系的辨析