From b0800f0a0baae5b80e692596e0cf33828a641431 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Sun, 24 May 2026 12:33:49 +0800 Subject: [PATCH] fix: rename struct2 -> struts2 --- .../workflows/memshell-integration-test.yml | 4 +- .github/workflows/probe-integration-test.yml | 4 +- .../java/com/reajason/javaweb/Server.java | 2 +- .../javaweb/memshell/ServerFactory.java | 16 +- .../Struts2ActionInjector.java} | 6 +- .../server/{Struct2.java => Struts2.java} | 6 +- ...Action.java => AntSwordStruts2Action.java} | 2 +- ...Action.java => BehinderStruts2Action.java} | 2 +- ...2Action.java => CommandStruts2Action.java} | 2 +- ...Action.java => GodzillaStruts2Action.java} | 2 +- ...tion.java => NeoreGeorgStruts2Action.java} | 2 +- ...uct2Action.java => Suo5Struts2Action.java} | 8 +- ...t2Action.java => Suo5v2Struts2Action.java} | 4 +- .../response/ResponseBodyGenerator.java | 4 +- .../javaweb/probe/payload/ServerProbe.java | 2 +- ...{Struct2Writer.java => Struts2Writer.java} | 4 +- .../javaweb/integration/ContainerTool.java | 2 +- .../Struts2ContainerTest.java} | 8 +- .../Struts2ContainerTest.java} | 12 +- .../infos/Struct2ContainerTestBasicInfo.txt | 475 ------------------ mise.toml | 2 + settings.gradle.kts | 2 +- .../build.gradle.kts | 0 .../main/java/Base64ClassLoaderAction.java | 0 .../java/BigIntegerClassLoaderAction.java | 0 .../src/main/java/JavaReadObjAction.java | 0 .../src/main/java/ScriptEngineAction.java | 0 .../src/main/java/TestAction.java | 0 .../src/main/java/UploadAction.java | 0 .../src/main/resources/struts.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../src/main/webapp/index.html | 0 web/content/docs/changelog.mdx | 2 +- web/content/docs/custom-memshell.mdx | 2 +- web/content/docs/memshell-core-config.mdx | 2 +- web/content/docs/meta.json | 2 +- web/content/docs/resbody/meta.json | 2 +- web/content/docs/resbody/struct2.mdx | 5 - web/content/docs/resbody/struts2.mdx | 5 + web/content/docs/struct2-shell.mdx | 5 - web/content/docs/struts2-shell.mdx | 5 + 41 files changed, 64 insertions(+), 537 deletions(-) rename generator/src/main/java/com/reajason/javaweb/memshell/injector/{struct2/Struct2ActionInjector.java => struts2/Struts2ActionInjector.java} (98%) rename generator/src/main/java/com/reajason/javaweb/memshell/server/{Struct2.java => Struts2.java} (64%) rename generator/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/{AntSwordStruct2Action.java => AntSwordStruts2Action.java} (98%) rename generator/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/{BehinderStruct2Action.java => BehinderStruts2Action.java} (99%) rename generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/{CommandStruct2Action.java => CommandStruts2Action.java} (97%) rename generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/{GodzillaStruct2Action.java => GodzillaStruts2Action.java} (99%) rename generator/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/{NeoreGeorgStruct2Action.java => NeoreGeorgStruts2Action.java} (99%) rename generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/{Suo5Struct2Action.java => Suo5Struts2Action.java} (98%) rename generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5v2/{Suo5v2Struct2Action.java => Suo5v2Struts2Action.java} (97%) rename generator/src/main/java/com/reajason/javaweb/probe/payload/response/{Struct2Writer.java => Struts2Writer.java} (98%) rename integration-test/src/test/java/com/reajason/javaweb/integration/memshell/{struct2/Struct2ContainerTest.java => struts2/Struts2ContainerTest.java} (87%) rename integration-test/src/test/java/com/reajason/javaweb/integration/probe/{struct2/Struct2ContainerTest.java => struts2/Struts2ContainerTest.java} (86%) delete mode 100644 integration-test/src/test/resources/infos/Struct2ContainerTestBasicInfo.txt create mode 100644 mise.toml rename vul/{vul-struct2 => vul-struts2}/build.gradle.kts (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/java/Base64ClassLoaderAction.java (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/java/BigIntegerClassLoaderAction.java (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/java/JavaReadObjAction.java (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/java/ScriptEngineAction.java (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/java/TestAction.java (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/java/UploadAction.java (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/resources/struts.xml (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/webapp/WEB-INF/web.xml (100%) rename vul/{vul-struct2 => vul-struts2}/src/main/webapp/index.html (100%) delete mode 100644 web/content/docs/resbody/struct2.mdx create mode 100644 web/content/docs/resbody/struts2.mdx delete mode 100644 web/content/docs/struct2-shell.mdx create mode 100644 web/content/docs/struts2-shell.mdx diff --git a/.github/workflows/memshell-integration-test.yml b/.github/workflows/memshell-integration-test.yml index e3bfdd6c..ba645153 100644 --- a/.github/workflows/memshell-integration-test.yml +++ b/.github/workflows/memshell-integration-test.yml @@ -48,8 +48,8 @@ jobs: depend_tasks: ":vul:vul-springboot2-webflux:bootJar :vul:vul-springboot3-webflux:bootJar" - middleware: "xxljob" depend_tasks: "" - - middleware: "struct2" - depend_tasks: ":vul:vul-struct2:war" + - middleware: "struts2" + depend_tasks: ":vul:vul-struts2:war" runs-on: ubuntu-22.04 name: ${{ matrix.cases.middleware }} steps: diff --git a/.github/workflows/probe-integration-test.yml b/.github/workflows/probe-integration-test.yml index 4b1c18a0..0efa4cf1 100644 --- a/.github/workflows/probe-integration-test.yml +++ b/.github/workflows/probe-integration-test.yml @@ -42,8 +42,8 @@ jobs: depend_tasks: ":vul:vul-webapp:war" - middleware: "springwebmvc" depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar" - - middleware: "struct2" - depend_tasks: ":vul:vul-struct2:war" + - middleware: "struts2" + depend_tasks: ":vul:vul-struts2:war" runs-on: ubuntu-22.04 name: ${{ matrix.cases.middleware }} steps: diff --git a/generator/src/main/java/com/reajason/javaweb/Server.java b/generator/src/main/java/com/reajason/javaweb/Server.java index b0ef32fe..804f91ce 100644 --- a/generator/src/main/java/com/reajason/javaweb/Server.java +++ b/generator/src/main/java/com/reajason/javaweb/Server.java @@ -20,6 +20,6 @@ public class Server { public static final String SpringWebMvc = "SpringWebMvc"; public static final String SpringWebFlux = "SpringWebFlux"; public static final String XXLJOB = "XXLJOB"; - public static final String Struct2 = "Struct2"; + public static final String Struts2 = "Struts2"; public static final String Dubbo = "Dubbo"; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/ServerFactory.java b/generator/src/main/java/com/reajason/javaweb/memshell/ServerFactory.java index 3ffa86a6..e5f6a5ec 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/ServerFactory.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/ServerFactory.java @@ -46,7 +46,7 @@ public class ServerFactory { register(Server.SpringWebMvc, SpringWebMvc::new); register(Server.SpringWebFlux, SpringWebFlux::new); register(Server.XXLJOB, XxlJob::new); - register(Server.Struct2, Struct2::new); + register(Server.Struts2, Struts2::new); register(Server.Dubbo, Dubbo::new); addToolMapping(ShellTool.Godzilla, ToolMapping.builder() @@ -82,7 +82,7 @@ public class ServerFactory { .addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, GodzillaUndertowServletHandler.class) .addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, Godzilla.class) .addShellClass(WAS_AGENT_FILTER_MANAGER, Godzilla.class) - .addShellClass(ACTION, GodzillaStruct2Action.class) + .addShellClass(ACTION, GodzillaStruts2Action.class) .build()); addToolMapping(ShellTool.Behinder, ToolMapping.builder() @@ -107,7 +107,7 @@ public class ServerFactory { .addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, BehinderUndertowServletHandler.class) .addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, Behinder.class) .addShellClass(WAS_AGENT_FILTER_MANAGER, Behinder.class) - .addShellClass(ACTION, BehinderStruct2Action.class) + .addShellClass(ACTION, BehinderStruts2Action.class) .build()); addToolMapping(ShellTool.AntSword, ToolMapping.builder() @@ -125,7 +125,7 @@ public class ServerFactory { .addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, AntSwordUndertowServletHandler.class) .addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, AntSword.class) .addShellClass(WAS_AGENT_FILTER_MANAGER, AntSword.class) - .addShellClass(ACTION, AntSwordStruct2Action.class) + .addShellClass(ACTION, AntSwordStruts2Action.class) .build()); addToolMapping(ShellTool.Command, ToolMapping.builder() @@ -162,7 +162,7 @@ public class ServerFactory { .addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, CommandUndertowServletHandler.class) .addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, Command.class) .addShellClass(WAS_AGENT_FILTER_MANAGER, Command.class) - .addShellClass(ACTION, CommandStruct2Action.class) + .addShellClass(ACTION, CommandStruts2Action.class) .addShellClass(ALIBABA_DUBBO_SERVICE, CommandDubboService.class) .addShellClass(APACHE_DUBBO_SERVICE, CommandDubboService.class) .build()); @@ -190,7 +190,7 @@ public class ServerFactory { .addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, Suo5UndertowServletHandler.class) .addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, Suo5.class) .addShellClass(WAS_AGENT_FILTER_MANAGER, Suo5.class) - .addShellClass(ACTION, Suo5Struct2Action.class) + .addShellClass(ACTION, Suo5Struts2Action.class) .build()); addToolMapping(ShellTool.Suo5v2, ToolMapping.builder() @@ -215,7 +215,7 @@ public class ServerFactory { .addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, Suo5v2UndertowServletHandler.class) .addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, Suo5v2.class) .addShellClass(WAS_AGENT_FILTER_MANAGER, Suo5v2.class) - .addShellClass(ACTION, Suo5v2Struct2Action.class) + .addShellClass(ACTION, Suo5v2Struts2Action.class) .addShellClass(CUSTOMIZER, Suo5v2JettyCustomizer.class) .build()); @@ -241,7 +241,7 @@ public class ServerFactory { .addShellClass(UNDERTOW_AGENT_SERVLET_HANDLER, NeoreGeorgUndertowServletHandler.class) .addShellClass(WEBLOGIC_AGENT_SERVLET_CONTEXT, NeoreGeorg.class) .addShellClass(WAS_AGENT_FILTER_MANAGER, NeoreGeorg.class) - .addShellClass(ACTION, NeoreGeorgStruct2Action.class) + .addShellClass(ACTION, NeoreGeorgStruts2Action.class) .build()); addToolMapping(ShellTool.Proxy, ToolMapping.builder() diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/struct2/Struct2ActionInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/struts2/Struts2ActionInjector.java similarity index 98% rename from generator/src/main/java/com/reajason/javaweb/memshell/injector/struct2/Struct2ActionInjector.java rename to generator/src/main/java/com/reajason/javaweb/memshell/injector/struts2/Struts2ActionInjector.java index 8ef54a34..6d2867ad 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/struct2/Struct2ActionInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/struts2/Struts2ActionInjector.java @@ -1,4 +1,4 @@ -package com.reajason.javaweb.memshell.injector.struct2; +package com.reajason.javaweb.memshell.injector.struts2; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -15,7 +15,7 @@ import java.util.zip.GZIPInputStream; * @author ReaJason * @since 2025/12/8 */ -public class Struct2ActionInjector { +public class Struts2ActionInjector { private static String msg = ""; private static boolean ok = false; @@ -32,7 +32,7 @@ public class Struct2ActionInjector { return "{{base64Str}}"; } - public Struct2ActionInjector() { + public Struts2ActionInjector() { if (ok) { return; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/Struct2.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/Struts2.java similarity index 64% rename from generator/src/main/java/com/reajason/javaweb/memshell/server/Struct2.java rename to generator/src/main/java/com/reajason/javaweb/memshell/server/Struts2.java index 4108637a..55ea2f05 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/server/Struct2.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/Struts2.java @@ -1,18 +1,18 @@ package com.reajason.javaweb.memshell.server; import com.reajason.javaweb.memshell.ShellType; -import com.reajason.javaweb.memshell.injector.struct2.Struct2ActionInjector; +import com.reajason.javaweb.memshell.injector.struts2.Struts2ActionInjector; /** * @author ReaJason * @since 2025/12/8 */ -public class Struct2 extends AbstractServer { +public class Struts2 extends AbstractServer { @Override public InjectorMapping getShellInjectorMapping() { return InjectorMapping.builder() - .addInjector(ShellType.ACTION, Struct2ActionInjector.class) + .addInjector(ShellType.ACTION, Struts2ActionInjector.class) .build(); } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordStruct2Action.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordStruts2Action.java similarity index 98% rename from generator/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordStruct2Action.java rename to generator/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordStruts2Action.java index a4e53470..40059777 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordStruct2Action.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordStruts2Action.java @@ -10,7 +10,7 @@ import java.net.URLClassLoader; * @author ReaJason * @since 2025/02/18 */ -public class AntSwordStruct2Action { +public class AntSwordStruts2Action { public static String pass; public static String headerName; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderStruct2Action.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderStruts2Action.java similarity index 99% rename from generator/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderStruct2Action.java rename to generator/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderStruts2Action.java index 1fc453ff..6badbcd2 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderStruct2Action.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderStruts2Action.java @@ -15,7 +15,7 @@ import java.util.Map; /** * @author ReaJason */ -public class BehinderStruct2Action { +public class BehinderStruts2Action { public static String pass; public static String headerName; public static String headerValue; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandStruct2Action.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandStruts2Action.java similarity index 97% rename from generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandStruct2Action.java rename to generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandStruts2Action.java index 9928c236..0fb36c59 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandStruct2Action.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandStruts2Action.java @@ -10,7 +10,7 @@ import java.util.Scanner; * @author ReaJason * @since 2025/12/8 */ -public class CommandStruct2Action { +public class CommandStruts2Action { private static String paramName; public String execute() throws Exception { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaStruct2Action.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaStruts2Action.java similarity index 99% rename from generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaStruct2Action.java rename to generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaStruts2Action.java index a68002b9..9959f4ba 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaStruct2Action.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaStruts2Action.java @@ -15,7 +15,7 @@ import java.net.URLClassLoader; * @author ReaJason * @since 2024/12/15 */ -public class GodzillaStruct2Action { +public class GodzillaStruts2Action { private static String key; private static String pass; private static String md5; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/NeoreGeorgStruct2Action.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/NeoreGeorgStruts2Action.java similarity index 99% rename from generator/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/NeoreGeorgStruct2Action.java rename to generator/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/NeoreGeorgStruts2Action.java index 3bb5e0dc..ca6f9a95 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/NeoreGeorgStruct2Action.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/NeoreGeorgStruts2Action.java @@ -18,7 +18,7 @@ import java.util.zip.GZIPInputStream; *

* key: key */ -public class NeoreGeorgStruct2Action { +public class NeoreGeorgStruts2Action { public static String headerName; public static String headerValue; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Struct2Action.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Struts2Action.java similarity index 98% rename from generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Struct2Action.java rename to generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Struts2Action.java index 56bfab0f..a2f2a7a1 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Struct2Action.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5Struts2Action.java @@ -16,7 +16,7 @@ import java.util.HashMap; * @author ReaJason * @since 2024/12/15 */ -public class Suo5Struct2Action implements Runnable, HostnameVerifier, X509TrustManager { +public class Suo5Struts2Action implements Runnable, HostnameVerifier, X509TrustManager { public static String headerName; public static String headerValue; public static HashMap addrs = collectAddr(); @@ -25,10 +25,10 @@ public class Suo5Struct2Action implements Runnable, HostnameVerifier, X509TrustM InputStream gInStream; OutputStream gOutStream; - public Suo5Struct2Action() { + public Suo5Struts2Action() { } - public Suo5Struct2Action(InputStream in, OutputStream out) { + public Suo5Struts2Action(InputStream in, OutputStream out) { this.gInStream = in; this.gOutStream = out; } @@ -268,7 +268,7 @@ public class Suo5Struct2Action implements Runnable, HostnameVerifier, X509TrustM Thread t = null; try { - Suo5Struct2Action p = new Suo5Struct2Action(scInStream, respOutStream); + Suo5Struts2Action p = new Suo5Struts2Action(scInStream, respOutStream); t = new Thread(p); t.start(); readReq(reqInputStream, scOutStream); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5v2/Suo5v2Struct2Action.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5v2/Suo5v2Struts2Action.java similarity index 97% rename from generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5v2/Suo5v2Struct2Action.java rename to generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5v2/Suo5v2Struts2Action.java index 621abb53..ff55ad72 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5v2/Suo5v2Struct2Action.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5v2/Suo5v2Struts2Action.java @@ -14,11 +14,11 @@ import java.util.zip.GZIPInputStream; * @author ReaJason * @since 2025/12/9 */ -public class Suo5v2Struct2Action { +public class Suo5v2Struts2Action { private static Class suo5V2Class; private static String suo5V2GZipBase64; - public Suo5v2Struct2Action() { + public Suo5v2Struts2Action() { } public void execute() throws Exception { diff --git a/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java b/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java index ced27afa..8515336e 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java @@ -106,8 +106,8 @@ public class ResponseBodyGenerator extends ByteBuddyShellGenerator