From 7fdba6a8106d9a50010b178e8c54cea0948be4e7 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Wed, 10 Sep 2025 20:37:05 +0800 Subject: [PATCH] test: add WildFly 36.0.0-Final-jdk21 --- .../wildfly/docker-compose-36.yaml | 11 +++ .../wildfly/Wildfly36ContainerTest.java | 75 +++++++++++++++++++ .../probe/wildfly/Wildfly36ContainerTest.java | 72 ++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 integration-test/docker-compose/wildfly/docker-compose-36.yaml create mode 100644 integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly36ContainerTest.java create mode 100644 integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java diff --git a/integration-test/docker-compose/wildfly/docker-compose-36.yaml b/integration-test/docker-compose/wildfly/docker-compose-36.yaml new file mode 100644 index 00000000..ec3667ea --- /dev/null +++ b/integration-test/docker-compose/wildfly/docker-compose-36.yaml @@ -0,0 +1,11 @@ +services: + wildfly30: + image: quay.io/wildfly/wildfly:30.0.1.Final-jdk17 + container_name: wildfly30 + ports: + - 8080:8080 + - 5005:5005 + environment: + JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 + volumes: + - ../../../vul/vul-webapp-jakarta/build/libs/vul-webapp-jakarta.war:/opt/jboss/wildfly/standalone/deployments/app.war \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly36ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly36ContainerTest.java new file mode 100644 index 00000000..ad71873b --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly36ContainerTest.java @@ -0,0 +1,75 @@ +package com.reajason.javaweb.integration.memshell.wildfly; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.TestCasesProvider; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.List; +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author ReaJason + * @since 2024/12/10 + */ +@Slf4j +@Testcontainers +public class Wildfly36ContainerTest { + public static final String imageName = "quay.io/wildfly/wildfly:36.0.0.Final-jdk21"; + static Network network = Network.newNetwork(); + @Container + public final static GenericContainer python = new GenericContainer<>(new ImageFromDockerfile() + .withDockerfile(neoGeorgDockerfile)) + .withNetwork(network); + @Container + public static final GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warJakartaFile, "/opt/jboss/wildfly/standalone/deployments/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(jbossPid, "/fetch_pid.sh") + .withNetwork(network) + .withNetworkAliases("app") + .waitingFor(Wait.forHttp("/app")) + .withExposedPorts(8080); + + static Stream casesProvider() { + String server = Server.Undertow; + List supportedShellTypes = List.of( + ShellType.JAKARTA_SERVLET, ShellType.JAKARTA_FILTER, ShellType.JAKARTA_LISTENER + ); + List testPackers = List.of(Packers.JSP, Packers.JSPX); + return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers, + null, List.of(ShellTool.AntSword) // AntSword not support jakarta + ); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + log.info(logs); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + shellInjectIsOk(getUrl(container), Server.Undertow, shellType, shellTool, Opcodes.V21, packer, container, python); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java new file mode 100644 index 00000000..0e1639fe --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java @@ -0,0 +1,72 @@ +package com.reajason.javaweb.integration.probe.wildfly; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.VulTool; +import com.reajason.javaweb.integration.probe.DetectionTool; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.objectweb.asm.Opcodes; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.nio.file.Files; +import java.nio.file.Paths; + +import static com.reajason.javaweb.integration.ContainerTool.getUrl; +import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author ReaJason + * @since 2024/12/10 + */ +@Slf4j +@Testcontainers +public class Wildfly36ContainerTest { + public static final String imageName = "quay.io/wildfly/wildfly:36.0.0.Final-jdk21"; + @Container + public static final GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warJakartaFile, "/opt/jboss/wildfly/standalone/deployments/app.war") + .waitingFor(Wait.forHttp("/app")) + .withExposedPorts(8080); + + @Test + void testJDK() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", DetectionTool.getJdkDetection()); + assertEquals("JDK|21.0.6|65", data); + } + + @Test + @SneakyThrows + void testBasicInfo() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", DetectionTool.getBasicInfoPrinter()); + Files.writeString(Paths.get("src", "test", "resources", "infos", this.getClass().getSimpleName() + "BasicInfo.txt"), data); + } + + @Test + void testServerDetection() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", DetectionTool.getServerDetection()); + assertEquals(Server.Undertow, data); + } + + @Test + @SneakyThrows + void testCommandReqHeaderResponseBody() { + String url = getUrl(container); + ProbeAssertion.responseCommandIsOk(url, Server.Undertow, Opcodes.V17); + } + + @Test + @SneakyThrows + void testBytecodeReqParamResponseBody() { + String url = getUrl(container); + ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V17); + } +}