{"id":37572297,"url":"https://github.com/ruoji6/memory-shell-mcp","last_synced_at":"2026-01-20T14:00:45.956Z","repository":{"id":332476806,"uuid":"1133889396","full_name":"RuoJi6/memory-shell-mcp","owner":"RuoJi6","description":"This repository is designed to automate the detection and cleanup of in-memory web shells using MCP in combination with the memory-shell-detector tool.        /        本仓库旨在结合 MCP 与 memory-shell-detector 工具，实现对内存 WebShell（内存马）的自动化检测与清除。","archived":false,"fork":false,"pushed_at":"2026-01-14T05:42:29.000Z","size":133,"stargazers_count":16,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T14:43:26.670Z","etag":null,"topics":["ai","filter","mcp","memory-shell","servlet","shell","shiro","spring","spring-boot","webshell"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RuoJi6.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-14T00:40:09.000Z","updated_at":"2026-01-16T04:36:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/RuoJi6/memory-shell-mcp","commit_stats":null,"previous_names":["ruoji6/memory-shell-mcp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/RuoJi6/memory-shell-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuoJi6%2Fmemory-shell-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuoJi6%2Fmemory-shell-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuoJi6%2Fmemory-shell-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuoJi6%2Fmemory-shell-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RuoJi6","download_url":"https://codeload.github.com/RuoJi6/memory-shell-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RuoJi6%2Fmemory-shell-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28568833,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T12:50:50.164Z","status":"ssl_error","status_checked_at":"2026-01-19T12:50:42.704Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","filter","mcp","memory-shell","servlet","shell","shiro","spring","spring-boot","webshell"],"created_at":"2026-01-16T09:25:42.370Z","updated_at":"2026-01-19T13:00:33.732Z","avatar_url":"https://github.com/RuoJi6.png","language":"Python","readme":"# Memory Shell Detector MCP\n\n基于 FastMCP 构建的 Java 内存马检测和清理工具 MCP 服务器，支持本地执行和 SSH 远程执行。\n\n项目地址：https://github.com/RuoJi6/memory-shell-mcp\n\n## 功能\n\n| 功能 | 工具名称 | 对应命令 |\n|------|----------|----------|\n| 执行命令（本地/SSH） | `execute_command` | - |\n| 下载检测工具 | `download_detector_tools` | - |\n| 列出Java进程 | `list_java_processes` | `-l` |\n| 扫描指定进程 | `scan_process` | `-s \u003cPID\u003e` |\n| 查看可疑类代码 | `view_class_code` | `-v \u003c类名\u003e -p \u003cPID\u003e` |\n| 移除内存马 | `remove_memory_shell` | `-r \u003c类名\u003e -p \u003cPID\u003e` |\n| 导出检测报告 | `export_report` | `--report` |\n| 获取系统信息 | `get_system_info_tool` | - |\n| 检测网络状态 | `check_network` | - |\n\n## 安全特性\n\n- 移除内存马前会先获取源代码供 AI 分析确认\n- 需要 AI 确认后（`ai_confirmed=True`）才会执行移除操作\n- 自动处理移除确认提示\n\n## 环境要求\n\n- Python 3.10+\n- JDK 1.8+（目标机器）\n- uv（Python 包管理器）\n\n---\n\n## 快速开始（uvx 方式）\n\n发布到 PyPI 后，直接使用 uvx 运行，无需安装：\n\n```bash\nuvx memory-shell-mcp\n```\n\n### MCP 配置（uvx 方式）\n\n\u003e **支持 MCP 的客户端**：本工具可配置到任何支持 Model Context Protocol 的 AI 客户端，包括但不限于：\n\u003e - **IDE/编辑器**：[Cursor](https://cursor.com)、[Windsurf](https://codeium.com/windsurf)、[VS Code](https://code.visualstudio.com)（需安装 Copilot 扩展）、[Zed](https://zed.dev)、[Kiro](https://kiro.dev)\n\u003e - **AI 助手**：[Claude Desktop](https://claude.ai/download)、[Claude Code](https://docs.anthropic.com/en/docs/claude-code)\n\u003e - **开发工具**：[Cline](https://github.com/cline/cline)（VS Code 扩展）、[Continue](https://continue.dev)、[Roo Code](https://roocode.com)\n\u003e - **其他**：[5ire](https://5ire.app)、[BeeAI](https://beeai.dev)、[Genkit](https://firebase.google.com/docs/genkit)、[Goose](https://block.github.io/goose)\n\u003e\n\u003e 以下是常用客户端的配置示例：\n\n#### Kiro\n\n在 `.kiro/settings/mcp.json` 中添加：\n\n```json\n{\n  \"mcpServers\": {\n    \"memory-shell-detector\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memory-shell-mcp\"],\n      \"env\": {},\n      \"disabled\": false,\n      \"autoApprove\": []\n    }\n  }\n}\n```\n\n#### Claude Desktop\n\n在 `claude_desktop_config.json` 中添加：\n\n```json\n{\n  \"mcpServers\": {\n    \"memory-shell-detector\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memory-shell-mcp\"],\n      \"env\": {}\n    }\n  }\n}\n```\n\n\u003e **说明**：`env` 中的环境变量均为可选配置。不配置时，工具会下载到系统临时目录，SSH 参数可通过 AI 对话传入。\n\n---\n\n## 开发者模式（本地源码）\n\n### 安装\n\n```bash\ngit clone https://github.com/RuoJi6/memory-shell-mcp.git\ncd memory-shell-mcp\n\n# 创建虚拟环境并安装依赖\nuv venv --python python3.12\nsource .venv/bin/activate  # Linux/macOS\n# .venv\\Scripts\\activate   # Windows\n\nuv pip install -e .\n```\n\n### 运行\n\n```bash\n# 激活虚拟环境后\nmemory-shell-mcp\n```\n\n### MCP 配置（开发者模式）\n\n```json\n{\n  \"mcpServers\": {\n    \"memory-shell-detector\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"--directory\",\n        \"/path/to/memory-shell-mcp\",\n        \"memory-shell-mcp\"\n      ],\n      \"env\": {}\n    }\n  }\n}\n```\n\n\u003e **说明**：`env` 中的环境变量均为可选配置。不配置时，工具会下载到系统临时目录，SSH 参数可通过 AI 对话传入。\n\n---\n\n## 环境变量说明（可选）\n\n| 变量 | 说明 |\n|------|------|\n| `TOOLS_DIR` | 检测工具（JAR 文件）存放目录，不设置则下载到系统临时目录 |\n| `SSH_HOST` | SSH 主机地址 |\n| `SSH_USERNAME` | SSH 用户名 |\n| `SSH_PASSWORD` | SSH 密码 |\n| `SSH_KEY_PATH` | SSH 私钥路径（与密码二选一） |\n| `SSH_PORT` | SSH 端口（默认 22） |\n| `JAVA_HOME` | JDK 路径（可选） |\n\n\u003e - 所有环境变量均为可选，不配置也可正常使用\n\u003e - 设置环境变量后，调用工具时无需每次传入对应参数\n\u003e - 如果 `TOOLS_DIR` 目录中已存在工具文件，`download_detector_tools` 会跳过下载\n\u003e - SSH 参数也可以通过 AI 对话动态传入，优先级高于环境变量\n\n---\n\n## 使用流程\n\n### 完整检测流程\n\n#### 第一步：准备工作\n```\n1. 调用 download_detector_tools 下载检测工具\n2. 调用 list_java_processes 列出所有 Java 进程，找到目标进程 PID\n```\n\n#### 第二步：扫描检测\n```\n3. 调用 scan_process(pid=目标PID) 扫描目标进程\n4. 扫描结果会列出所有可疑类，记录完整类名\n```\n\n#### 第三步：源码分析（关键步骤）\n```\n5. 对每个可疑类调用 view_class_code(class_name=\"类名\", pid=PID) 反编译查看源码\n6. 分析源码判断是否为内存马\n```\n\n**内存马判断标准：**\n- ✅ 是否包含命令执行代码（`Runtime.exec`、`ProcessBuilder`）\n- ✅ 是否包含反射调用敏感方法\n- ✅ 是否有异常的网络连接或文件操作\n- ✅ 是否动态注册 Filter/Servlet/Listener\n- ✅ 是否有加密/编码的可疑字符串（Base64、AES 等）\n- ✅ 是否有 Webshell 特征（参数名为 cmd/command/exec 等）\n- ✅ 类名是否异常（随机字符串、与业务无关）\n- ✅ 是否有类加载器操作（defineClass、ClassLoader）\n\n#### 第四步：清除内存马\n```\n7. 确认是内存马后，调用 remove_memory_shell(class_name=\"类名\", pid=PID, ai_confirmed=True)\n8. 移除后立即再次调用 scan_process 验证是否清除成功\n9. 重要：某些内存马需要多次移除才能彻底清除，如果仍然存在，重复步骤 7-8\n```\n\n#### 第五步：生成报告（可选）\n```\n10. 调用 export_report 导出检测报告存档\n```\n\n---\n\n## 示例提示词\n\n直接复制以下提示词发送给 AI 即可开始检测：\n\n### 本地检测\n```\n帮我检测本机的 Java Web 服务，排查是否存在内存马。\n\n检测要求：\n1. 先下载检测工具，然后列出 Java 进程找到目标 PID\n2. 扫描该进程，获取所有可疑类列表\n3. 对每个可疑类反编译源代码，分析是否为内存马\n4. 如果确认是内存马，执行移除操作\n5. 移除后再次扫描验证，某些内存马需要多次移除才能彻底清除\n6. 最后给我一个检测报告总结\n```\n\n### SSH 远程检测\n```\n帮我检测远程服务器上的 Java 服务是否存在内存马。\n\n服务器信息：\n- IP: 192.168.1.100\n- 用户名: root\n- 密码: your_password\n\n检测要求：\n1. 通过 SSH 连接到服务器\n2. 下载检测工具到 /tmp 目录\n3. 列出所有 Java 进程，扫描可疑进程\n4. 反编译分析每个可疑类的源代码\n5. 确认是内存马后执行移除，并验证移除结果\n6. 生成检测报告\n```\n\n---\n\n## 内存马类型说明\n\n| 类型 | 特征 | 移除难度 |\n|------|------|----------|\n| Filter 型 | 实现 `javax.servlet.Filter`，动态注册到 FilterChain | 中等，可能需要多次移除 |\n| Servlet 型 | 继承 `HttpServlet`，动态注册路由 | 中等 |\n| Listener 型 | 实现 `ServletRequestListener` 等 | 较易 |\n| Spring Controller | 使用 `@RequestMapping` 动态注册 | 中等 |\n| Spring Interceptor | 实现 `HandlerInterceptor` | 中等 |\n| Agent 型 | 通过 `Instrumentation` 修改字节码 | 困难，可能需要重启 |\n| Valve 型 (Tomcat) | 继承 `ValveBase` | 中等 |\n\n---\n\n## 旧版使用流程（简化版）\n\n### 1. 下载检测工具\n\n```\n调用 download_detector_tools\n```\n\n### 2. 列出 Java 进程\n\n```\n调用 list_java_processes()\n```\n\n### 3. 扫描可疑进程\n\n```\n调用 scan_process(pid=进程ID)\n```\n\n### 4. 查看可疑类源代码\n\n```\n调用 view_class_code(class_name=\"类名\", pid=进程ID)\n```\n\n### 5. 移除内存马\n\n```\n# AI 确认后调用\n调用 remove_memory_shell(class_name=\"类名\", pid=进程ID, ai_confirmed=True)\n```\n\n---\n\n## SSH 远程执行\n\n### 方式1：环境变量预设\n\n在 MCP 配置的 `env` 中设置：\n\n```json\n\"env\": {\n  \"TOOLS_DIR\": \"/your/tools/directory\",\n  \"SSH_HOST\": \"192.168.1.100\",\n  \"SSH_USERNAME\": \"root\",\n  \"SSH_PASSWORD\": \"password\"\n}\n```\n\n调用时只需设置 `use_ssh=True`：\n\n```\n调用 scan_process(pid=12345, use_ssh=True)\n```\n\n### 方式2：AI 对话动态传入\n\n直接告诉 AI SSH 连接信息：\n\n```\n调用 scan_process(\n    pid=12345,\n    use_ssh=True,\n    ssh_host=\"192.168.1.100\",\n    ssh_username=\"root\",\n    ssh_password=\"password\"\n)\n```\n\n\u003e 对话传入的参数优先级高于环境变量\n\n---\n\n## 工具下载地址\n\n工具会自动从以下地址下载：\n\n- Agent JAR: `https://xget.xi-xu.me/gh/RuoJi6/memory-shell-mcp/releases/download/1/detector-agent-1.0.0-SNAPSHOT.jar`\n- CLI JAR: `https://xget.xi-xu.me/gh/RuoJi6/memory-shell-mcp/releases/download/1/memory-shell-detector-cli.jar`\n\n## 支持系统\n\n- Windows / Linux / macOS\n\n## 风险等级说明\n\n| 等级 | 说明 |\n|------|------|\n| CRITICAL | 确认为内存马，需立即处理 |\n| HIGH | 高度可疑，建议人工确认 |\n| MEDIUM | 中等风险，可能是正常组件 |\n| LOW | 低风险，基本可排除 |\n| SAFE | 安全，已在白名单中 |\n\n## 注意事项\n\n1. 扫描其他进程需要足够的系统权限\n2. 目标进程和检测工具需使用相同或兼容的 JDK 版本\n3. Agent JAR 需要和 CLI JAR 放在同一目录下\n4. Agent 型内存马无法通过本工具移除，需要重启应用\n5. 移除内存马可能影响应用正常运行，建议先备份\n\n---\n\n## 发布到 PyPI\n\n```bash\n# 1. 注册 PyPI 账号并获取 API Token\n# https://pypi.org/manage/account/token/\n\n# 2. 构建包\nuv build\n\n# 3. 发布到 PyPI\nuv publish --token YOUR_PYPI_TOKEN\n\n# 4. 发布后即可通过 uvx 运行\nuvx memory-shell-mcp\n```\n\n## 参考项目\n\n- [memory-shell-detector](https://github.com/private-xss/memory-shell-detector) - Java 内存马检测工具核心实现\n- [Xget](https://github.com/xixu-me/Xget) - GitHub 文件加速下载服务\n\n## License\n\nMIT License\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruoji6%2Fmemory-shell-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruoji6%2Fmemory-shell-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruoji6%2Fmemory-shell-mcp/lists"}