当前位置: 首页 > article >正文

类的动态加载与漏洞利用

类的动态加载文章目录类的动态加载[TOC](文章目录)前言一、双亲委派二、具体类加载的过程漏洞利用前言本文主要讲一下类的动态加载机制以及漏洞利用相关问题一、双亲委派双亲委派机制是 Java 类加载器的一个核心工作规则当一个类加载器需要加载某个类时它不会自己立刻去加载而是先把请求向上交给父类加载器逐级向上直到最顶层的启动类加载器Bootstrap ClassLoader只有当父加载器确认无法加载该类时子加载器才会尝试自己去加载。这样设计的好处是保证核心类库如 java.lang.*不会被重复加载或被用户自定义类“篡改”从而提升安全性和一致性同时也避免类的重复加载导致冲突。双亲委派机制是 JVM 的类加载规则类加载请求先交给父加载器处理保证核心类由 JVM 统一加载从而避免类重复定义和核心类被覆盖。publicstaticvoidmain(String[]args)throwsClassNotFoundException{Class?strClassString.class;System.out.println(String ClassLoader strClass.getClassLoader());PersondemonewPerson();System.out.println(Demo ClassLoader demo.getClass().getClassLoader());ClassLoadersystemLoaderClassLoader.getSystemClassLoader();Class?csystemLoader.loadClass(java.lang.String);System.out.println(manual load String ClassLoader c.getClassLoader());}其运行结果为String ClassLoader null表示类加载器是使用的Bootstrap ClassLoader加载的Demo ClassLoader sun.misc.Launcher$AppClassLoader14dad5dc表示使用的类加载器是AppClassLoader加载的而第三行我们使用了AppClassLoader来加载String类但是最终输出还是null说明其类的加载还是被Bootstrap ClassLoader加载类加载请求会优先交给父加载器处理导致核心类如 String始终由 Bootstrap ClassLoader 加载而用户类由 AppClassLoader 加载从而避免类冲突和核心类被覆盖二、具体类加载的过程接下来Debug一下具有类加载的过程在此处下断点有一些小伙伴点击Step Into程序直接结束我们需要强制步入按alt shift F7首先我们会进入ClassLoader类中其调用了两个参数的loadClass方法再次步入后我们会进入AppCLassLoader的loadClass方法继续跟踪前面是一些安全检查我们直接跟到super.loadClass(name, resolve)这里并步入注意这里又回到了ClassLoader的loadClass方法中且类加载器为AppClassLoader在这里就步入了双亲委派机制了该loadClass方法会首先判断其有没有父类这里其实父属性若有父类则调用其父类的类加载器而AppClassLoader的父类就是ExtClassLoader我们继续步入步入到ExtClassLoader的loadClass方法其父类为null但他的父类其实是Bootstrap ClassLoader但他是native的就显示null了继续跟跑到findClass方法我们跟进去发现跟到了URLClassLoader的findClass方法有小伙伴会好奇怎么突然出来一个URLClassLoader其实是ExtClassLoader和AppClassLoader的父类是URLClassLoader这俩没有findClass方法所以调用了父类的方法这里就开始进行类加载了首先在ExtClassLoader的类加载器中寻找Person方法但其实是找不到的继续跟代码我们会退回到AppClassLoader的loadClass方法和上面一样会调用URLCLassLoader的findClass方法这里就会成功找到Person的path最终在defineClass方法中完成类加载我们再跟一下这里需要强制步入会进入URLClassLoader的defineClass方法完成类的加载我们在跟入会先调用SecureClassLoader的defineClass再回到ClassLoader的defineClass完成类的加载这里可以画一个图总结一下类加载的过程漏洞利用作为攻击者我们就有两个点可以作为我们漏洞利用的地方首先就是URLClassLoader.loadClass我们可以注入URL使得攻击者访问我们的恶意代码从而实现攻击publicstaticvoidmain(String[]args)throwsClassNotFoundException,MalformedURLException,InstantiationException,IllegalAccessException{URLClassLoaderurlClassLoadernewURLClassLoader(newURL[]{newURL(file:D:\\evilCode\\)});Class?curlClassLoader.loadClass(org.src.Test);c.newInstance();}另一种就是使用defineClass的反射调用来实现任意类加载ClasscClassLoader.class;Methodmethodc.getDeclaredMethod(defineClass,String.class,byte[].class,int.class,int.class);method.setAccessible(true);byte[]codeFiles.readAllBytes(Paths.get(D:\\evilCode\\Test.class));ClassaClass(Class)method.invoke(ClassLoader.getSystemClassLoader(),org.src.Test,code,0,code.length);aClass.newInstance();但是这里的defineClass是protected的在真实漏洞利用的情况下使用反射并不是一种好手段关于后续动态类加载的漏洞利用再补充

相关文章:

类的动态加载与漏洞利用

类的动态加载 文章目录类的动态加载[TOC](文章目录)前言一、双亲委派二、具体类加载的过程漏洞利用前言 本文主要讲一下类的动态加载机制以及漏洞利用相关问题 一、双亲委派 双亲委派机制是 Java 类加载器的一个核心工作规则:当一个类加载器需要加载某个类时&…...

从风筝到飞机机翼:复合材料‘可设计性’在无人机轻量化中的实战指南

从风筝到飞机机翼:复合材料‘可设计性’在无人机轻量化中的实战指南 复合材料正在重塑现代航空器的设计语言。想象一下,莱特兄弟1903年首次飞行时使用的云杉木和帆布结构,与今天碳纤维无人机机翼的对比——重量减轻了80%,强度却提…...

告别废片!用Python和PyTorch搭建一个能同时修复过曝与欠曝的AI修图工具(附完整代码)

实战指南:用PyTorch构建智能曝光修复工具 摄影爱好者们一定都遇到过这样的场景——在逆光环境下拍出的照片人脸漆黑一片,或是雪地拍摄时整个画面惨白过曝。传统修图软件往往需要手动调整曲线、色阶等参数,效果难以把控。今天我们将从零实现一…...

用 EasyBot 搭一个「一人内容工作台」,文图视频全搞定

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...

Python科研绘图实践【3】——差异检验与散点箱形图附代码

🚀 深耕学术数据可视化,聚焦 Python 科研绘图实战 🌈 搞定 SCI 顶刊标准图表、矢量图、高阶配色 🖥️ 极简代码 完整源码,告别丑陋配图,高效提升论文颜值 ❤️ 关注我,让Python帮你画出审稿人眼…...

保姆级教程:在RV1126上搞定TP2855双摄驱动配置(从DTS到V4L2全流程)

RV1126双摄驱动实战:TP2855从硬件连接到V4L2调试全解析 当你在RV1126开发板上接入TP2855双摄像头模组时,是否遇到过图像采集不稳定、数据流中断或者驱动加载失败的问题?作为嵌入式Linux开发者,摄像头驱动配置往往是项目中最棘手的…...

零成本实现单机分屏:Nucleus Co-Op让一台电脑变多人游戏主机

零成本实现单机分屏:Nucleus Co-Op让一台电脑变多人游戏主机 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为朋友聚会时电脑不够…...

3分钟快速安装TrollStore:TrollInstallerX终极指南

3分钟快速安装TrollStore:TrollInstallerX终极指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 想要在iOS设备上轻松安装TrollStore吗?TrollI…...

从MATLAB仿真到FPGA上板:一个8Mbps通信系统的成形滤波器全链路实现

从MATLAB仿真到FPGA上板:一个8Mbps通信系统的成形滤波器全链路实现 在数字通信系统的基带处理环节中,成形滤波器扮演着至关重要的角色。它负责将离散的数字信号转换为适合在信道中传输的连续波形,同时有效控制信号带宽。对于采用FPGA实现通信…...

告别命令行恐惧:用Portainer在Ubuntu 22.04上图形化管理Docker容器

告别命令行恐惧:用Portainer在Ubuntu 22.04上图形化管理Docker容器 对于刚接触Docker的新手来说,命令行界面往往是一道难以逾越的门槛。每次操作都需要记忆复杂的命令和参数,稍有不慎就会出错。而Portainer的出现,彻底改变了这一局…...

国内外主流CMS建站系统及其特点总结

在建站领域最重要的两种途径是使用saas建站平台和使用cms建站系统,对于个人或小企业这类要求不高的网站,推荐用saas建站平台,试错成本低,一年几百到几千块钱就可以搞定,而对于有个性化要求的站点,采用cms建…...

保姆级教程:在Ubuntu 20.04上搞定GAMIT/GLOBK 10.7安装(含gfortran版本避坑指南)

保姆级教程:在Ubuntu 20.04上搞定GAMIT/GLOBK 10.7安装(含gfortran版本避坑指南) 如果你正在Ubuntu 20.04上尝试安装GAMIT/GLOBK 10.7,却因为各种依赖问题和版本冲突而头疼不已,那么这篇教程就是为你准备的。作为一款强…...

Java项目Loom化安全加固全路径(JVM层/协程调度/Reactive Stream三重防护体系深度拆解)

第一章:Java项目Loom化安全加固全路径概览Java Loom 作为 JDK 21 的正式特性,通过虚拟线程(Virtual Threads)显著提升高并发场景下的资源利用率与吞吐能力。然而,Loom 的引入也重构了传统线程模型的安全边界——线程局…...

Spring Boot 4.0 Agent-Ready 架构深度解析(Agent启动机制×字节码增强×SPI动态加载三重解密)

第一章:Spring Boot 4.0 Agent-Ready 架构全景概览Spring Boot 4.0 标志着 JVM 应用可观测性与运行时增强能力的重大演进。其核心设计哲学是将 Java Agent 的能力深度融入框架生命周期,而非作为外部插件存在。Agent-Ready 并非仅指“支持加载 agent”&am…...

form-create-designer进阶玩法:结合CodeMirror实现表单JSON的版本管理与团队协作

form-create-designer团队协作实战:构建企业级表单配置中心 在大型前端项目中,表单往往是业务逻辑最密集、变更最频繁的部分。传统开发模式下,每次表单调整都需要前端工程师手动修改代码,既低效又容易出错。form-create-designer通…...

AVR智能充电器PID控制程序(基于ATmega16/ATmega328)

一、系统硬件架构 1. 硬件连接方案 AVR ATmega16 ├── ADC0 (PC0) → 电池电压采样(分压电阻) ├── ADC1 (PC1) → 充电电流采样(分流电阻运放) ├── OC1A (PB1) → PWM输出 → MOSFET驱动 → 充电控制 ├── INT0 (PD2) →…...

【Dify日志审计黄金标准】:20年SRE亲授企业级审计配置、合规留痕与实时告警闭环实践

第一章:Dify日志审计的核心价值与架构全景日志审计是保障 Dify 平台安全、可追溯与合规运行的关键能力。在 LLM 应用快速迭代与多租户共享的场景下,原始请求、提示词工程、模型调用链路、响应内容及用户操作行为均需完整记录与结构化归档,为异…...

3步解锁百度网盘SVIP:macOS用户提升下载速度终极指南

3步解锁百度网盘SVIP:macOS用户提升下载速度终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版的下载速度限制而…...

从.NET 8到.NET 9 Preview 5:C# 14 AOT编译Dify客户端的兼容性断层分析,3大Breaking Change已致17家客户生产环境回滚

第一章:从.NET 8到.NET 9 Preview 5的AOT演进全景图.NET 平台的 AOT(Ahead-of-Time)编译能力在 .NET 8 中首次成为生产就绪特性,而 .NET 9 Preview 5 则标志着其成熟度与工程化落地的重大跃迁。这一演进不仅体现在性能提升与二进制…...

告别CDD依赖:手把手教你用CANoe OSEK_TP.dll动态配置ISO 15765-2流控参数

动态配置ISO 15765-2流控参数的工程实践指南 在汽车电子开发领域,诊断协议栈的底层控制能力直接决定了测试效率和问题定位精度。传统依赖CDD文件的配置方式如同"黑箱操作",工程师面对通信异常时往往束手无策。本文将揭示如何通过CANoe的OSEK_T…...

“方向盘没松开就答错”?Dify注意力掩码机制深度解析:如何用3行配置实现驾驶专注度感知式应答降频(实测降低误唤醒率76%)

第一章:方向盘没松开就答错?Dify注意力掩码机制深度解析:如何用3行配置实现驾驶专注度感知式应答降频(实测降低误唤醒率76%)在车载语音交互场景中,驾驶员短暂分心(如换挡、打方向)常…...

告别手搓键盘监听:用Android EditText给Dear ImGui输入框‘打补丁’

当Dear ImGui遇上Android输入框:用EditText实现无缝键盘交互 在跨平台UI开发领域,Dear ImGui以其轻量级和即时渲染的特性赢得了众多开发者的青睐。但当我们将这套原本为桌面端设计的框架移植到移动平台时,输入系统的差异往往会成为第一个需要…...

别再瞎调PLL了!手把手教你用STM32CubeMX配置STM32F411的100MHz系统时钟(HSI/HSE对比实测)

STM32CubeMX实战:从HSI到HSE的100MHz时钟配置全解析 第一次接触STM32的时钟树配置时,我被那些密密麻麻的分频系数和PLL参数搞得晕头转向。直到发现STM32CubeMX这个神器,才真正体会到图形化配置工具的威力。本文将带你用CubeMX完成STM32F411的…...

基于 Redis 的分布式锁:原理剖析与 Spring Boot 实战(含看门狗续期)

一、什么是分布式锁?在单机应用中,我们常用synchronized、ReentrantLock解决多线程并发问题,但这些锁的作用域局限于单个 JVM 进程。当系统从单体架构演进为分布式集群时,多个服务实例、多个进程会并发操作共享资源(如…...

如何快速掌握HiveWE:魔兽地图编辑器的3大核心功能与完整使用指南

如何快速掌握HiveWE:魔兽地图编辑器的3大核心功能与完整使用指南 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为魔兽争霸III原版编辑器的卡顿和复杂操作而烦恼吗?HiveWE作为专…...

如何快速掌握DREAM3D:材料科学3D数据分析的完整开源解决方案

如何快速掌握DREAM3D:材料科学3D数据分析的完整开源解决方案 【免费下载链接】DREAM3D Data Analysis program and framework for materials science data analytics, based on the managing framework SIMPL framework. 项目地址: https://gitcode.com/gh_mirror…...

告别复制粘贴!程序员必备的Markdown表情符号速查表(附分类与使用场景)

程序员效率革命:Markdown表情符号分类与应用实战指南 在GitHub README中看到一个恰到好处的🚀能瞬间传达项目活跃度,技术博客里的💡比十行文字更能突出核心创意——这就是Emoji在现代技术文档中的魔力。作为数字时代的象形文字&am…...

7款加密压缩包密码测试工具:ArchivePasswordTestTool技术深度解析

7款加密压缩包密码测试工具:ArchivePasswordTestTool技术深度解析 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 在数字资产管…...

Qwen3-TTS-Tokenizer-12Hz音频编解码器:5分钟快速部署与一键使用教程

Qwen3-TTS-Tokenizer-12Hz音频编解码器:5分钟快速部署与一键使用教程 1. 为什么选择Qwen3-TTS-Tokenizer-12Hz 如果你正在寻找一个高效、高质量的音频编解码解决方案,Qwen3-TTS-Tokenizer-12Hz绝对值得考虑。这个由阿里巴巴Qwen团队开发的工具&#xf…...

【入门C++语法】第11章 函数和变量作用域

第11章 函数和变量作用域 一、 函数 函数是C++中"封装一段特定功能"的代码块,能让程序结构更清晰、代码可重复使用。比如计算两数之和、判断数字是否为质数等功能,都可封装成函数。 函数的基本结构 返回值类型 函数名(参数列表) {// 函数体:实现功能的代码功能逻…...