ente0/mcpstrike

GitHub: ente0/mcpstrike

MCP 服务器与 Ollama 驱动的自动化渗透测试框架,将 LLM 与安全工具链连接以提升评估效率。

Stars: 5 | Forks: 0

Frame 2
MCP 服务器 + Ollama 驱动的自动化渗透测试框架。 mcpstrike 通过模型上下文协议(MCP)将大型语言模型(LLM)与安全工具连接起来,支持在终端界面中进行自动化或引导式渗透测试。
## 架构 ``` mcpstrike-client mcpstrike-server (MCP) hexstrike_server (TUI + Ollama) ---> (FastMCP, port 8889) ---> (port 8888, must be running) | v Ollama LLM (llama3.2, qwen3.5, etc.) Optional: mcpstrike-backend can replace hexstrike_server for local testing ``` **组件:** | 组件 | 角色 | 默认端口 | |---|---|---| | **hexstrike_server** | 外部后端 — 需单独启动 | 8888 | | `mcpstrike-server` | 通过 MCP 协议暴露 15 个工具,用于会话与命令管理 | 8889 | | `mcpstrike-client` | 交互式 TUI,驱动 Ollama 大型语言模型调用 MCP 工具 | — | | `mcpstrike-backend` *(可选)* | 轻量级本地后端,替代 hexstrike_server | **8890** | ## 安装 ### 使用 pipx(推荐) ``` # 标准安装(使用 hexstrike-server 作为后端) pipx install . # 可选独立后端 pipx install ".[backend]" ``` ### 使用 pip ``` pip install --user . # 可选独立后端 pip install --user ".[backend]" ``` ### 开发环境 ``` pip install -e ".[dev,backend]" ``` ## 快速开始 **必须先在 8888 端口运行 hexstrike_server**,然后再启动 mcpstrike。 ### 自动模式(推荐) ``` mcpstrike ``` `mcpstrike` 是堆栈启动器。它会打开三个平铺的 xterm 窗口(若无则回退到 tmux,最后是后台进程)。所有选项均可通过标志覆盖: ``` mcpstrike --model qwen3:8b mcpstrike --ollama-url http://10.0.0.5:11434 mcpstrike --sessions-dir /opt/pentest/sessions mcpstrike --font-size 15 --screen-width 2560 --screen-height 1440 mcpstrike --tmux # force tmux even if DISPLAY is set ``` 请查看 `mcpstrike --help` 获取所有选项。 ### 手动模式 ``` # 终端 1:MCP 服务器(指向 8888 上的 hexstrike_server) HEXSTRIKE_BACKEND_URL=http://localhost:8888 mcpstrike-server # 终端 2:客户端 mcpstrike-client --ollama-url http://:11434 --model qwen3.5 ``` ### 使用独立后端(无需 hexstrike_server) ``` # 终端 1:本地后端(端口 8890,与 8888 上的 hexstrike 无冲突) mcpstrike-backend # 终端 2:指向 mcpstrike-backend 的 MCP 服务器 HEXSTRIKE_BACKEND_URL=http://localhost:8890 mcpstrike-server # 终端 3:客户端 mcpstrike-client ``` 需要先执行 `pipx install ".[backend]"`。 ## 命令 ### mcpstrike(堆栈启动器) 在单个命令中启动完整堆栈。自动在 xterm、tmux 和后台模式之间选择。 ``` mcpstrike [OPTIONS] Network options: --ollama-url URL Ollama daemon URL (default: http://localhost:11434) --model NAME Ollama model to use (default: qwen3.5:latest) --hexstrike-port PORT hexstrike_server port (default: 8888) --mcp-port PORT mcpstrike-server port (default: 8889) Session options: --sessions-dir PATH Directory for session files (default: ~/hexstrike_sessions) GUI xterm options: --font-size PT xterm font size in points (default: 13) --screen-width PX Screen width for window tiling (default: 1920) --screen-height PX Screen height for window tiling (default: 1080) Launch mode: --tmux, --no-xterm Force tmux even if a display is available --xterm Force xterm (fails if DISPLAY is not set) ``` 所有网络选项也支持对应的环境变量(`OLLAMA_URL`、`OLLAMA_MODEL`、`HEXSTRIKE_PORT`、`MCPSTRIKE_PORT`、`HEXSTRIKE_SESSION_PATH`)。 **窗口布局(xterm,1920×1080):** ``` ┌─────────────────────────┬─────────────────────────┐ │ hexstrike_server │ mcpstrike-server │ top ~54% ├─────────────────────────┴─────────────────────────┤ │ mcpstrike-client │ bottom ~46% └───────────────────────────────────────────────────┘ ``` ### mcpstrike-client 用于驱动渗透测试的交互式 TUI。 ``` mcpstrike-client [OPTIONS] Options: --mcp-url URL MCP server URL (default: http://localhost:8889/mcp) --ollama-url URL Ollama API URL (default: http://localhost:11434) --model, -m NAME Ollama model (default: llama3.2) --sessions-dir PATH Session files directory (default: ~/hexstrike_sessions) --no-native-tools Force JSON fallback mode (for older models) --no-auto-parse Disable automatic parser dispatch --debug Enable verbose error tracebacks ``` #### 交互命令 | 命令 | 描述 | |---|---| | `/help` | 显示所有可用命令 | | `/tools` | 列出服务器上发现的 MCP 工具 | | `/agent` | 切换自动代理模式(默认开启) | | `/prompt <#> ` | 生成并加载渗透测试提示模板 | | `/prompts` | 列出可用的提示模板及其编号 | | `/status` | 显示连接、模型和会话信息 | | `/model ` | 在运行时切换 Ollama 模型 | | `/native` | 切换原生工具调用与 JSON 回退 | | `/clear` | 清除对话历史 | | `/quit`、`/exit` | 退出客户端 | #### 输入模式 | 模式 | 用法 | |---|---| | 正常 | 输入消息并按回车 | | 多行 | 以 `<<<` 开头,输入多行内容,以 `>>>` 结尾 | | 文件输入 | `@path/to/file.txt` 加载文件内容作为输入 | #### 提示工作流程 mcpstrike 附带渗透测试提示模板。使用它们来引导评估流程: ``` /prompts # list templates with numbers /prompt 1 192.168.1.100 # generate autonomous prompt for target /prompt 2 10.0.0.5 -d example.com # guided prompt with domain go # send any message to start execution ``` 模板位于 `src/mcpstrike/client/prompts/templates/` — 您可以添加自己的 `.txt` 或 `.md` 文件。 ### mcpstrike-server 通过 MCP 协议暴露渗透测试工具的 FastMCP 服务器。 ``` mcpstrike-server ``` 环境变量: | 变量 | 默认值 | 描述 | |---|---|---| | `HEXSTRIKE_BACKEND_URL` | `http://localhost:8888` | 后端 API 地址(hexstrike 或 mcpstrike-backend) | | `MCPSTRIKE_HOST` | `0.0.0.0` | 服务器绑定地址 | | `MCPSTRIKE_PORT` | `8889` | 服务器绑定端口 | | `HEXSTRIKE_SESSION_PATH` | — | 会话文件的绝对路径(优先级最高) | | `HEXSTRIKE_SESSION_DIR` | — | `$HOME` 中的文件夹名称 | ### mcpstrike-backend(可选) 轻量级本地后端 — hexstrike_server 的替代方案。直接在本地机器上以子进程形式执行安全工具。 **需要安装 `backend` 额外组件:** `pipx install ".[backend]"` ``` mcpstrike-backend [OPTIONS] Options: --host TEXT Bind address (default: 0.0.0.0) --port INT Bind port (default: 8888) ``` 环境变量:`HEXSTRIKE_BACKEND_HOST`、`HEXSTRIKE_BACKEND_PORT`。 端点: | 方法 | 路径 | 描述 | |---|---|---| | GET | `/health` | 运行状况检查(含运行时长) | | POST | `/api/command` | 执行命令,返回标准输出/标准错误/退出码 | ### mcpstrike-prompt 独立的提示生成器 CLI。 ``` mcpstrike-prompt --target 192.168.1.100 --template autonomous mcpstrike-prompt --list # list templates mcpstrike-prompt -t 10.0.0.5 -d site.com --dry-run mcpstrike-prompt -t 10.0.0.5 -o ./prompts_out/ ``` ## MCP 工具参考 MCP 服务器暴露了 14 个工具,大型语言模型可以调用: ### 配置 | 工具 | 描述 | |---|---| | `get_config` | 返回当前服务器配置 | | `set_session_directory` | 在运行时更改会话目录 | ### 会话发现 | 工具 | 描述 | |---|---| | `discover_sessions` | 在多个目录中查找会话 | | `import_external_session` | 从外部路径导入会话文件夹 | ### 执行 | 工具 | 描述 | |---|---| | `health_check` | 向后端发送心跳 | | `execute_command` | 在后端执行安全命令 | ### 会话文件 | 工具 | 描述 | |---|---| | `create_session` | 创建新的渗透测试会话 | | `list_sessions` | 列出所有会话 | | `write_session_file` | 向会话文件写入内容 | | `read_session_file` | 从会话文件读取内容 | | `list_session_files` | 列出会话中的文件 | ### 解析器 | 工具 | 描述 | |---|---| | `parse_output` | 解析原始工具输出(nmap、whatweb、nuclei、nikto、dirb) | | `auto_parse_output` | 自动检测工具并路由到正确的解析器 | ### 发现结果 | 工具 | 描述 | |---|---| | `update_session_findings` | 将解析后的发现合并到 session_metadata.json | ## 代理模式 当代理模式开启(默认)时,客户端会运行自动循环: 1. 将对话与系统提示发送给 Ollama 2. 如果模型返回工具调用,则通过 MCP 执行 3. 将工具结果反馈回对话 4. 重复直到模型仅返回纯文本(无工具调用) 安全特性: - **最大迭代次数**:在 20 次连续工具调用后停止 - **上下文修剪**:滑动窗口保留最近 40 条消息,防止 Ollama 上下文溢出 - **Ctrl+C**:随时中止当前生成 - **自动保存**:命令输出自动保存到会话文件 - **自动解析**:输出解析为结构化发现(端口、漏洞等) - **发现持久化**:解析后的发现合并到 `session_metadata.json` ## 提示模板 mcpstrike 附带两个默认提示模板: ### 自主 全自主提示,包含决策框架。模型接收 - 目标信息与范围边界 - 完整工具集参考 - 决策框架(发现 -> 枚举 -> 渗透 -> 文档) - 工具使用最佳实践与反模式 - XSS/SQLi 工作流示例 ### 引导 分阶段编号(0-9)的逐步方法。更结构化,按顺序引导模型完成每个阶段。 ### 自定义模板 将 `.txt` 或 `.md` 文件添加到 `src/mcpstrike/client/prompts/templates/`。使用 `{{PLACEHOLDER}}` 语法: | 占位符 | 描述 | |---|---| | `{{TARGET}}` | 目标 IP 或主机名 | | `{{DOMAIN}}` | 域名 | | `{{SESSION_ID}}` | 自动生成的会话 ID | | `{{DATE}}` | 当前日期 | | `{{TEST_TYPE}}` | 测试类型(black_box、gray_box、web_app、network、full) | ## 配置 所有配置均通过环境变量或 `.env` 文件完成: ``` # 后端(hexstrike-server 或 mcpstrike-backend) HEXSTRIKE_BACKEND_URL=http://localhost:8888 # MCP 服务器 MCPSTRIKE_HOST=0.0.0.0 MCPSTRIKE_PORT=8889 # 客户端 MCPSTRIKE_MCP_URL=http://localhost:8889/mcp OLLAMA_URL=http://localhost:11434 OLLAMA_MODEL=llama3.2 # 会话 HEXSTRIKE_SESSION_PATH=/absolute/path/to/sessions HEXSTRIKE_SESSION_DIR=my_sessions # relative to $HOME ``` ## 项目结构 ``` src/mcpstrike/ config.py # Centralized settings (pydantic-settings) launcher.py # `mcpstrike` entry point — stack launcher with argparse backend/ # OPTIONAL — standalone local backend app.py # FastAPI subprocess execution server server/ wrapper.py # MCPServerWrapper (FastMCP lifecycle) app.py # MCP tool definitions (14 tools) client/ wrapper.py # MCPClientWrapper (JSON-RPC + SSE) ollama_bridge.py # Ollama streaming + tool-call dispatch tui.py # Interactive TUI (rich + prompt_toolkit) prompts/ generator.py # Template manager + prompt generation templates/ autonomous.txt # Full-autonomy pentest prompt guided.txt # Step-by-step guided prompt common/ filenames.py # Smart filename allocation for output formatters.py # Output extraction + report formatting parsers.py # nmap/whatweb/nuclei/nikto/dirb parsers ``` ## 需求 - Python >= 3.10 - 本地运行的 Ollama(或通过 `--ollama-url` 远程访问) - **hexstrike_server** 在 8888 端口运行,或使用 `.[backend]` 安装独立替代方案 - 后台机器上安装安全工具(nmap、nikto、sqlmap 等)
标签:AI安全, AI风险缓解, Chat Copilot, dalfox, FastMCP, Hexstrike, LLM评估, MCP, Model Context Protocol, nikto, Ollama, sqlmap, TUI, XSS, 会话管理, 安全测试, 攻击性安全, 数据统计, 本地安全测试, 渗透测试框架, 漏洞情报, 端口扫描, 终端渗透, 自动化渗透, 输出解析, 逆向工具, 防御