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/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 { public Object getObject(final String command) throws Exception { @@ -56,4 +59,8 @@ public class CommonsCollections3 extends PayloadRunner implements ObjectPayload< public static void main(final String[] args) throws Exception { PayloadRunner.run(CommonsCollections3.class, args); } + + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAnnInvHUniversalMethodImpl(); + } } diff --git a/src/main/java/ysoserial/payloads/Jdk7u21.java b/src/main/java/ysoserial/payloads/Jdk7u21.java index 811c2e0..2c3af71 100755 --- a/src/main/java/ysoserial/payloads/Jdk7u21.java +++ b/src/main/java/ysoserial/payloads/Jdk7u21.java @@ -9,6 +9,7 @@ import javax.xml.transform.Templates; 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; @@ -81,18 +82,8 @@ public class Jdk7u21 implements ObjectPayload { } public static boolean isApplicableJavaVersion() { - String property = System.getProperties().getProperty("java.version"); - if ( property == null ) { - return false; - } - String parts[] = property.split("\\.|_|-");; - int major = Integer.parseInt(parts[1]); - int minor = Integer.parseInt(parts[2]); - int update = Integer.parseInt(parts[3]); - if ( major < 7 || (major == 7 && update <= 21) ) { - return true; - } - return false; + JavaVersion v = JavaVersion.getLocalVersion(); + return v != null && (v.major < 7 || (v.major == 7 && v.update <= 21)); } public static void main(final String[] args) throws Exception { diff --git a/src/main/java/ysoserial/payloads/Spring1.java b/src/main/java/ysoserial/payloads/Spring1.java index 9e0663e..e077f82 100644 --- a/src/main/java/ysoserial/payloads/Spring1.java +++ b/src/main/java/ysoserial/payloads/Spring1.java @@ -11,7 +11,9 @@ import javax.xml.transform.Templates; import org.springframework.beans.factory.ObjectFactory; 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; @@ -46,6 +48,7 @@ import ysoserial.payloads.util.Reflections; @SuppressWarnings({"rawtypes"}) @Dependencies({"org.springframework:spring-core:4.1.4.RELEASE","org.springframework:spring-beans:4.1.4.RELEASE"}) +@PayloadTest ( precondition = "isApplicableJavaVersion") public class Spring1 extends PayloadRunner implements ObjectPayload { public Object getObject(final String command) throws Exception { @@ -73,4 +76,7 @@ public class Spring1 extends PayloadRunner implements ObjectPayload { PayloadRunner.run(Spring1.class, args); } + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAnnInvHUniversalMethodImpl(); + } } diff --git a/src/main/java/ysoserial/payloads/Spring2.java b/src/main/java/ysoserial/payloads/Spring2.java index c3bd77a..7defe53 100644 --- a/src/main/java/ysoserial/payloads/Spring2.java +++ b/src/main/java/ysoserial/payloads/Spring2.java @@ -12,7 +12,9 @@ import org.springframework.aop.framework.AdvisedSupport; import org.springframework.aop.target.SingletonTargetSource; 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; @@ -38,6 +40,7 @@ import ysoserial.payloads.util.Reflections; // test deps "aopalliance:aopalliance:1.0", "commons-logging:commons-logging:1.2" } ) +@PayloadTest ( precondition = "isApplicableJavaVersion") public class Spring2 extends PayloadRunner implements ObjectPayload { public Object getObject ( final String command ) throws Exception { @@ -64,5 +67,9 @@ public class Spring2 extends PayloadRunner implements ObjectPayload { public static void main ( final String[] args ) throws Exception { PayloadRunner.run(Spring2.class, args); } + + public static boolean isApplicableJavaVersion() { + return JavaVersion.isAnnInvHUniversalMethodImpl(); + } } diff --git a/src/main/java/ysoserial/payloads/util/JavaVersion.java b/src/main/java/ysoserial/payloads/util/JavaVersion.java new file mode 100644 index 0000000..291247d --- /dev/null +++ b/src/main/java/ysoserial/payloads/util/JavaVersion.java @@ -0,0 +1,36 @@ +package ysoserial.payloads.util; + + +/** + * @author mbechler + * + */ +public class JavaVersion { + + + public int major; + public int minor; + public int update; + + + + public static JavaVersion getLocalVersion() { + String property = System.getProperties().getProperty("java.version"); + if ( property == null ) { + return null; + } + JavaVersion v = new JavaVersion(); + String parts[] = property.split("\\.|_|-"); + v.major = Integer.parseInt(parts[1]); + v.minor = Integer.parseInt(parts[2]); + v.update = Integer.parseInt(parts[3]); + return v; + } + + + public static boolean isAnnInvHUniversalMethodImpl() { + JavaVersion v = JavaVersion.getLocalVersion(); + return v != null && (v.major < 8 || (v.major == 8 && v.update <= 71)); + } +} +