Java-CC

news/2024/10/31 0:16:26/

漏洞原理

TransformedMap这个类的decorate函数可以将一个普通的Map转换为一个TransformedMap,其第2、3参数分别对应当key改变和value改变时需要做的操作。所以此时如果修改其中的任意key或value,就会触发我们预先定义好的某些操作来对Map进行处理,具体的变换逻辑由Transformer类定义。
在这里插入图片描述
由于commons-collections内置了很多常见的transformer,我们可以利用InvokerTransformer通过反射的方式去调用任意的函数。通过getClass()、getMethod、invoke()进行反射,最终实现类似于:

((Runtime) Runtime.class.getMethod("getRuntime").invoke()).exec("calc")

而多个Transformer可以串起来,形成ChainedTransformer。当触发时,ChainedTransformer可以按顺序调用一系列的变换,只需要传入一个Transformer数组即可。

CC的利用链版本,maven依赖

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.0</version>
</dependency>

因为在3.1-3.2.1版本中TransformingComparator类没有实现Serializable接口,不能够被序列化,于是就不能在使用链上构造了。

CommonsCollections1

环境:JDK1.7、commons-collections-3.1-3.2.1
漏洞点

commons-collections-3.1-src.jar:
/org/apache/commons/collections/functors/InvokerTransformer.java

在 InvokerTransformer 类的transform方法中使用了反射,且反射参数均可控,所以我们可以利用这处代码调用任意类的任意方法

Transformer

Transformer是Commons Collections中提供的一个接口

在这里插入图片描述

ConstantTransformer

ConstantTransformer是Transformer的实现类
在这里插入图片描述

InvokerTransformer

InvokerTransformer也是Transformer的实现类,
在构造方法中有三个参数,第⼀个参数是待执⾏的⽅法名,第⼆个参数
是这个函数的参数列表的参数类型,第三个参数是传给这个函数的参数列表 。里面还提供了一个Transform的方法,该方法可以通过Java反射机制来进行执行任意代码。
在这里插入图片描述

ChainedTransformer

ChainedTransformer也是实现了Transformer接⼝的⼀个类,看到transform方法是通过传入Trasnformer[]数组来对传入的数值进行遍历并且调用数组对象的transform方法。
在这里插入图片描述

Map

Transform来执行命令需要绑定到Map上,抽象类AbstractMapDecorator是Apache Commons Collections提供的一个类,
实现类有很多,比如LazyMap、TransformedMap等,这些类都有一个decorate()方法,用于将上述的Transformer实现类绑定到Map上,当对Map进行一些操作时,会自动触发Transformer实现类的tranform()方法,不同的Map类型有不同的触发规则。

TransformedMap

Transformer实现类分别绑定到map的key和value上,当map的key或value被修改时,会调用对应Transformer实现类的transform()方法。我们可以把chainedtransformer绑定到一个TransformedMap上,当此map的key或value发生改变时,就会自动触发chainedtransformer。

Map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);

http://www.ppmy.cn/news/573870.html

相关文章

2019年双非计算机推免经验

本人基本情况 福建四非计科&#xff0c;绩点1/60&#xff0c;综排1/60&#xff0c;四级521&#xff0c;六级508&#xff0c;三年国家奖学金&#xff0c;美赛H奖&#xff0c;省级以上奖10项左右&#xff0c;到手的拟录取offer6个&#xff0c;最终选择浙江大学软件学院。 夏令营…

网易总监面

3、网易总监面 上来没有那么多的废话&#xff0c;连自我介绍都略过。直接照着简历问。 介绍一下PMS是干嘛的&#xff1f;跟现有的系统有什么区别&#xff1f; 我也说不出个所以然来接着就是怼数据库。数据库里一行一行的数据在磁盘里是怎么存的&#xff1f;我说按页存。这一行一…

cc、CC、gcc、g++区别

Unix系统cc&#xff1a;Unix系统的C Compiler Linux系统cc&#xff1a;一般是一个符号连接&#xff0c;指向gcc CC&#xff1a;makefile里面的一个名字&#xff0c;即宏定义 gcc&#xff1a;C编译器 g&#xff1a;C编译器 gcc是C编译器&#xff1b;g是C编译器&#xff1b;linux…

直播,一位大神带来的福利!

前言 今年三月份&#xff0c;斗鱼获腾讯领投的1亿美元融资的消息被各大平台报道转载&#xff0c;在电竞、泛娱乐已是热门投资的当下&#xff0c;网络直播平台自然也获得了各界的关注。盗用两张关于游戏直播的趋势图 这还仅仅是游戏直播这块的蛋糕.直播行业的竞争会越来越激烈, …

网易cc题1

题目1 : buycrystal 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 CC最近推出了一个新玩法&#xff0c;玩家可以通过金币来买卖水晶&#xff0c;水晶价格随着玩家的卖入卖出进行浮动&#xff0c;但水晶不能连续购买&#xff0c;并且每次只能买一个&#xff0c;第二…

应届大硕,上海找工作

工作找到了&#xff0c;项目结题了&#xff0c;终于有时间静下心来写点东西了。第一篇blog写一下我非常惨烈的找工作的经历吧。 开始的时候是很不顺利的&#xff0c;除了本人工作地点的限制&#xff08;上海、青岛、潍坊&#xff09;之外&#xff0c;还有两个原因&#xff1a;准…

网易

网易求职干货 目录 •1.公司介绍 1.1网易概况 1.2网易主营业务/品牌 1.3网易文化/价值观 1.5网易工作地点 2.校招介绍 2.1网易2014校园招聘介绍 2.2网易校园招聘流程 2.3网易校园招聘tips 3.HR答疑 3.1网易校园招聘FAQ 4.薪酬待遇 4.1网易职业发展 4.2网易薪酬待遇…

最新CCF目录推荐, 不容错过的评职好刊~

【本周推荐】我处近期新增多本计算机领域高质量SCI&#xff0c;且均在最新CCF期刊目录中&#xff0c;源于国际知名出版社&#xff0c;自引率低&#xff0c;检索稳定&#xff0c;平均录用周期3个月左右&#xff0c;实为计算机领域学者不容错过的评职好刊&#xff01; 一、期刊概…