swfk2154/Stopen

GitHub: swfk2154/Stopen

一款基于 OODA 循环与大语言模型驱动的自动化渗透测试 Agent,集成 WebShell 管理、C2 框架、漏洞全生命周期管理与 MCP 工具桥接能力。

Stars: 0 | Forks: 0

# Stopen — 自动化渗透测试 Agent ![Web UI](https://static.pigsec.cn/wp-content/uploads/repos/cas/95/95505e36fbbbe5cb4517a6d10e447d189ee113fe2136b1a5523ba7480cc20c75.png) ## 1. 快速开始 ### 0.1 克隆 ``` git clone https://github.com/swfk2154/Stopen.git cd Stopen ``` ### 0.2 一键安装 ``` python install.py ``` 脚本会自动: - **安装 Python 依赖**:`pip install -r requirements.txt` (FastAPI, aiohttp, cryptography 等) - **初始化存储目录**:创建 `stopen/storage/logs/` 和 `stopen/storage/uploads/` ### 0.3 构建前端(可选) 如果预构建的前端运行正常则可跳过。如果 UI 页面空白请重新构建: ``` cd stopen/frontend npm install npx vite build cd ../.. ``` ### 1.1 启动后端 ``` cd Stopen python run.py ``` | 参数 | 描述 | |----------|-------------| | `--port 8081` | 自定义端口(默认:8080) | | `--host 0.0.0.0` | 监听所有网络接口以供局域网访问 | | `--no-reload` | 禁用热重载 | 环境变量:`$env:STOPEN_PORT=8081` ### 1.2 访问 WebUI 打开浏览器 → `http://localhost:8080` ### 1.3 CLI 终端 ``` python cli.py # Interactive REPL mode python cli.py run 192.168.1.1 # One-key penetration test python cli.py status # System status python cli.py --port 8081 # Specify backend port ``` ![CLI 界面](https://static.pigsec.cn/wp-content/uploads/repos/cas/bb/bba00b60b805c8f2db3480cf44b8201b40b9f8ca0b79820727514b801409fcad.png) ## 2. 首次设置 ### 2.1 配置 API Key WebUI → 侧边栏 → **配置** → 选择 LLM 提供商 → 输入 API Key → 启用 → 保存 支持 12 家提供商: | 提供商 | 获取 API Key | |----------|-------------| | OpenAI | https://platform.openai.com/api-keys | | Anthropic | https://console.anthropic.com/settings/keys | | Google (Gemini) | https://aistudio.google.com/app/apikey | | DeepSeek | https://platform.deepseek.com/api_keys | | Kimi | https://platform.moonshot.cn/console/api-keys | | MiniMax | https://platform.minimaxi.com/user-center/basic-information/interface-key | | GLM (智谱) | https://open.bigmodel.cn/usercenter/apikeys | | 豆包 (字节跳动) | https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey | | Qwen | https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key | | SiliconFlow | https://cloud.siliconflow.cn/account/ak | | Baichuan | https://platform.baichuan-ai.com/console/apikey | | 自定义 | 任何兼容 OpenAI 的 endpoint | ### 2.2 配置 MCP 服务器(可选) MCP (Model Context Protocol) 服务器将外部安全工具集成到 Stopen 的 Agent 工具注册表中。 WebUI → **MCP 配置** → 添加服务器 | 服务器 | 类型 | 地址 | 用途 | |--------|------|---------|---------| | Yakit | HTTP | `http://127.0.0.1:8082/mcp` | 端口扫描,FOFA 搜索,子域名枚举,CVE 查询 | | Burp Suite | HTTP/SSE | `http://127.0.0.1:9876/sse` | 代理抓包,扫描器,Repeater,Intruder | | Wireshark (tshark) | Stdio | `tshark` | 网络流量捕获与分析 | | CSNAS (Colasoft) | Stdio | `cmdl.exe` | 网络协议分析与取证 | ## 3. 功能 ### 3.1 聊天 导航 → **聊天** 多轮 LLM 对话界面: - **多轮对话**:在连续的问答中保留上下文 - **模型选择器**:下拉菜单仅显示已配置并启用的模型 - **对话管理**: - 侧边栏列出所有对话 - "新建对话"按钮用于创建 - 点击切换,× 删除 - **消息气泡**:用户紫色右对齐,AI 灰色左对齐 - **发送**:按 Enter 发送,Shift+Enter 换行 ### 3.2 Agent 控制台 导航 → **Agent 控制台** Agent 控制台是 Stopen 的核心功能,通过 OODA 循环驱动自动化渗透测试。 **参数**: | 参数 | 描述 | |-----------|-------------| | 目标 | IP 地址 / 域名 / URL | | 目标描述 | 可选的任务描述 | | 任务类型 | 渗透测试 / CTF / CTF Web / CTF Crypto | | 角色 | 可选的预设角色,用于技能注入 | | 持久模式 | 多循环执行,每个循环自动生成报告 | **渗透流程**: ``` Target → Port Scan → Service Detection → Vuln Scan → CVE Query → Exploit → Report ``` **界面**: - **左侧(终端)**:实时流式输出(思考过程、工具调用、结果) - **右侧(黑板面板)**: - **事实 (Facts)**:已确认的发现 — 开放端口、Web 路径、CVE、flag - **意图 (Intents)**:待探索的方向 — 待扫描端口、待爆破目录 - 使用"刷新"按钮手动更新 **核心规则**: - 每一项发现都必须有工具输出证据支持(防幻觉机制) - 连续 3 次失败或 15 次迭代后自动停止 - CTF 模式下发现 flag 后立即报告 ### 3.3 WebShell 管理 导航 → **WebShell** 支持 3 种主流 Webshell 协议。 **协议对比**: | 协议 | 传输 | 密钥派生 | 加密 | |----------|-----------|----------------|------------| | AntSword | `POST pass=system('cmd');` | 明文密码,直接发送 PHP 代码 | 无 | | Behinder | `POST pass=AES-128-CBC(payload)` | MD5(password)[:16] | AES-128-CBC | | Godzilla | `POST pass=AES-128-CBC(payload)` | MD5(password+key_suffix)[:16] | AES-128-CBC | **功能**: | 功能 | 描述 | |---------|-------------| | 添加 WebShell | 名称 / URL / 密码 / 类型 (PHP/ASP/ASPX/JSP) / 协议 | | 连接测试 | 点击测试按钮,结果内联显示(绿色=成功,红色=失败) | | 删除 | 确认后永久删除 | | 交互式终端 | 命令历史记录,↑↓,Ctrl+C,清空,快捷按钮 | | 文件管理器 | 列出目录 / 读取 / 写入 / 删除 / 创建文件夹 | **终端快捷键**: | 操作 | 效果 | |--------|--------| | ↑ 键 | 上一条命令(最多 50 条历史记录) | | ↓ 键 | 历史记录中的下一条命令 | | Enter | 执行当前命令 | | Ctrl+C | 中断(显示 ^C,返回提示符) | | `clear` | 清除终端显示 | **快捷命令**:whoami / id / ls / pwd / uname -a / ipconfig **文件管理器使用**: 1. 选择一个 WebShell 2. 点击“文件管理器”标签页 3. 输入路径(默认 /),点击“列出目录” 4. 点击文件名读取,点击目录名进入 ![WebShell](https://static.pigsec.cn/wp-content/uploads/repos/cas/da/da17bba2ff4bb189221415a9eebb66b64732bd3e8947f5fad6507d2808c8d7cb.png) ### 3.4 C2 框架 导航 → **C2 面板** C2 (Command & Control) 框架,用于管理远程主机控制通道。 **监听器类型**: | 类型 | 描述 | 用例 | |------|-------------|----------| | TCP 反向 | 反向连接监听器 | 目标可以向外连接 | | HTTP Beacon | HTTP 轮询通信 | 严格的防火墙环境 | | WebSocket | WebSocket 持久连接 | 低延迟双向通信 | **加密**(可针对每个监听器配置): | 类型 | 算法 | 用例 | |------|-----------|----------| | AES-256-CTR | 对称加密,随机 IV | 默认,最高安全性 | | XOR | 简单的 XOR 混淆 | 兼容性最好,无依赖 | **Payload 生成**: | Payload | 加密 | 描述 | |---------|------------|-------------| | Python (TCP) | AES-256-CTR | 全功能 Python TCP 反向 shell | | Python (HTTP) | AES-256-CTR | HTTP Beacon 轮询 | | Python (WS) | AES-256-CTR | WebSocket 持久连接 | | PowerShell (TCP) | AES-CBC | Windows 原生,AES 加密 | | Bash (TCP) | AES-256-CTR | Linux 通过 Python 进程执行并使用 AES | **自定义 Payload 模板**: - 通过“Payload 模板”标签页进行 CRUD 操作 - 支持 3 个占位符:`{host}`, `{port}`, `{secret}` - 可通过 `listener_id` 参数自动匹配监听器密钥 ### 3.5 漏洞管理 导航 → **漏洞** **漏洞来源**: - **自动导入**:Agent 在查询 CVE 时自动创建记录 - **手动**:填写标题、目标、严重程度、类型、描述、证据 **严重程度级别**: | 级别 | 颜色 | 描述 | |-------|-------|-------------| | 严重 | 🔴 红色 | 远程 RCE,影响严重 | | 高危 | 🟠 橙色 | 高风险,优先修复 | | 中危 | 🟡 黄色 | 中等风险,需要关注 | | 低危 | 🔵 蓝色 | 低风险的信息泄露 | | 信息 | ⚪ 灰色 | 仅供参考 | **状态工作流**:`open → confirmed → fixed → false_positive` **操作**: - 创建 / 编辑 / 删除漏洞 - 按严重程度或状态过滤 - 统计面板:总计 / 按严重程度 / 按状态 - 一键生成 Python PoC 脚本(从漏洞数据填充) ### 3.6 自定义 YAML 工具 导航 → **自定义工具** 通过 UI 创建 YAML 定义的工具,无需编写 Python 代码,自动注册到 Agent 工具注册表中。 **两种模式**: **Subprocess 模式** — 执行本地命令行工具: ``` name: nmap_scan description: "Nmap port scan" category: scanner type: subprocess command: ["nmap", "-sV", "-p", "{ports}", "{target}"] parameters: target: { type: string, description: "Target IP/domain" } ports: { type: string, default: "80,443,8080" } timeout: 120 ``` **API 模式** — 调用外部 HTTP 接口: ``` name: shodan_search description: "Shodan search" category: scanner type: api command: "https://api.shodan.io/shodan/host/search" parameters: query: { type: string, description: "Search syntax" } timeout: 30 ``` **工作流程**: 1. 填写名称、描述、类型、命令、参数 JSON、超时时间 2. 点击“测试”验证工具是否有效 3. 点击“重载到 Agent”将其注册到 Agent 工具列表中 4. 该工具现在可在 Agent 控制台中使用 ### 3.7 报告与 PoC 生成 导航 → **任务** **报告格式**: | 格式 | 特点 | |--------|----------------| | Markdown | 文本格式,易于阅读和进行版本控制 | | HTML | 带样式的表格,适合在浏览器中查看 | **PoC 脚本**:从漏洞数据自动生成的 Python 验证脚本,包括: - 目标 URL - 漏洞类型和描述 - HTTP 请求验证 - 格式化输出 **持久模式**:Agent 在每个循环结束时自动生成报告。 ### 3.8 MCP 配置 导航 → **MCP 配置** MCP (Model Context Protocol) 服务器模式: | 模式 | 原理 | 适用场景 | |------|-----------|------------| | HTTP | 基于 HTTP 的 JSON-RPC 2.0 | Yakit, Burp Suite 等基于 HTTP API 的工具 | | Stdio | 子进程 stdin/stdout JSON-RPC | Wireshark, CSNAS 等 CLI 工具 | 在 Stdio 模式下,命令和参数会直接传递给子进程 — 请确保命令是可信的。 ### 3.9 角色系统 导航 → **角色** **6 个内置角色**: | 角色 | 描述 | |------|-------------| | 渗透测试 | 完整流程 — 端口扫描 → 漏洞扫描 → 漏洞利用 | | CTF | 自动化 CTF 挑赛解题流程 | | Web 扫描 | 专注于 Web 安全的检测 | | API 测试 | API 安全测试 | | 侦察 | 仅信息收集 | | 报告 | 结果汇总和报告生成 | **自定义角色**:用户可以创建具有自定义名称、描述、系统提示词和技能绑定的角色。 ### 3.10 主题切换器 侧边栏底部按钮:☀️ 浅色 / 🌙 深色模式。通过 localStorage 跨页面刷新保持状态。 ## 4. CLI 命令 | 命令 | 参数 | 描述 | |---------|-----------|-------------| | `target` | `` | 设置渗透目标 | | `goal` | `` | 设置目标描述 | | `run` | `[target]` | 全自动渗透测试 | `recon` | `[target]` | 信息收集 | | `scan` | `[target]` | 漏洞扫描 | | `exploit` | `[target]` | 漏洞利用 | | `tools` | — | 列出所有可用工具 | | `status` | — | 系统状态(黑板、工具、MCP) | | `listeners` | — | C2 监听器列表 | | `sessions` | — | 活动的 C2 会话 | | `webshells` | — | WebShell 列表 | | `vulns` | — | 漏洞列表 | | `config providers` | — | LLM 提供商状态 | | `think` | `on/off` | 切换思考过程显示 | | `health` | — | 检查后端连接 | | `help` | — | 显示帮助 | | `exit` / `q` | — | 退出 | 任何自然语言输入都会自动路由到 LLM 聊天。 ## 5. 项目结构 ``` Stopen/ ├── run.py # Backend entry (supports --port/--host) ├── cli.py # CLI terminal (interactive + single-command) ├── install.py # One-click install script (pip deps + storage/ init) ├── .gitignore # Git exclusion rules ├── README.md # English documentation ├── README_CN.md # Chinese documentation ├── stopen/ │ ├── main.py # FastAPI app + route registration + tool init │ ├── app_config/ # Configuration module │ │ ├── encryption.py # AES (Fernet) API key encryption │ │ ├── providers.py # 12 LLM provider definitions │ │ ├── auth.py # Bearer Token auth middleware │ │ ├── settings.py # Global constants │ │ └── logging_config.py # Logging setup │ ├── models/ # Pydantic data models │ │ ├── chat.py # WebShell/message creation models │ │ ├── c2.py # Listener/session/task models │ │ ├── task.py # Pentest task model │ │ └── report.py # Report model │ ├── routes/ (11 modules) # FastAPI route modules │ │ ├── agent.py # OODA Agent SSE streaming │ │ ├── c2.py # C2 listener/session/payload CRUD │ │ ├── chat.py # Chat API (LLM direct, no Agent loop) │ │ ├── config.py # LLM provider config CRUD + test │ │ ├── mcp_config.py # MCP server CRUD + stdio support │ │ ├── roles.py # Role CRUD (built-in + custom) │ │ ├── tasks.py # Task management + report/PoC │ │ ├── tools.py # Tool listing + MCP status │ │ ├── vulnerabilities.py# Vulnerability CRUD + stats │ │ ├── webshell.py # WebShell + file operation API │ │ └── yaml_tools.py # Custom YAML tool CRUD + reload │ ├── services/ # Business logic layer │ │ ├── agent_loop_ooda.py # OODA core loop engine │ │ ├── blackboard.py # Blackboard (Fact/Intent/Goal) │ │ ├── c2_service.py # C2 engine (listener/encryption/payload) │ │ ├── webshell_service.py# 3-protocol WebShell │ │ ├── db_service.py # SQLite (13 tables) │ │ ├── llm_client.py # LLM HTTP client (OpenAI/Anthropic) │ │ ├── llm_service.py # LLM service wrapper │ │ ├── report_service.py # Report + PoC generation │ │ ├── skills_service.py # Skill file loader │ │ ├── tool_base.py # Base tool abstract class │ │ ├── tool_registry.py # Tool registry singleton │ │ └── tools/ # Built-in pentest tools │ │ ├── scanners.py # Port scan/dir brute/subdomain/CVE │ │ ├── web_tools.py # HTTP request/browser/Burp │ │ ├── crypto_tools.py# 29 encoding/crypto operations │ │ ├── space_search.py# FOFA/Hunter/Shodan search │ │ ├── js_discovery.py# JS asset discovery/unauth/dir enum │ │ ├── mcp_bridge.py # MCP bridge (HTTP + Stdio) │ │ └── yaml_loader.py # YAML custom tool loader │ ├── frontend/ # React SPA frontend │ │ ├── index.html # Dual-theme CSS + Inter font │ │ ├── src/ │ │ │ ├── main.jsx # React entry │ │ │ └── App.jsx # Full SPA (~800 lines, 11 pages) │ │ └── dist/ # Vite build output (gitignored) │ ├── skills/ (8 files) # Pentest knowledge base (.md) │ │ ├── recon.md # Reconnaissance methodology │ │ ├── vuln_discovery.md # Vulnerability discovery methodology │ │ ├── exploitation.md # Exploitation methodology │ │ ├── post_exploit.md # Post-exploitation methodology │ │ ├── report.md # Report writing methodology │ │ ├── ctf_web.md # CTF web challenge guide │ │ ├── ctf_crypto.md # CTF cryptography guide │ │ └── ctf_reverse.md # CTF reverse engineering guide │ ├── TPIAN/ # Screenshots │ │ ├── Web.png # WebUI homepage screenshot │ │ ├── Cli.png # CLI terminal screenshot │ │ └── Webshell-web.png # WebShell page screenshot │ └── storage/ # Runtime data (.gitignored) │ ├── stopen.db # SQLite main database │ ├── config.enc # AES-encrypted API key config │ ├── keyfile.key # Encryption key file │ ├── .auth_secret # Auth token │ └── logs/ # Runtime logs ``` ## 6. 开发 ### 构建前端 ``` cd stopen/frontend npm install npx vite build # Production build npx vite # Dev mode (default port 3000) ``` ### 后端开发 ``` # 热重载(代码更改时自动重启) python run.py # 无热重载 python run.py --no-reload # 自定义端口 python run.py --port 8081 ``` ### 代码规范 - 后端:Python 3.10+, FastAPI, SQLite, 全面采用 async/await - 前端:React 18 + Vite,单文件 SPA,CSS 变量主题化 - 日志:在 `storage/logs/stopen.log` 自动轮转日志文件 - 所有 emoji 输出均替换为 ASCII `[tag]` 格式(兼容 Windows GBK 终端) ## 7. 安全 1. **API Key 加密存储**:磁盘上使用 Fernet (AES) 对称加密,绝不以明文存储 2. **认证**:所有 `/api/*` 路由(`/api/health`, `/api/auth/*` 除外)均需要 Bearer Token,在 `storage/.auth_secret` 处自动生成 3. **CORS**:白名单 — 仅限 localhost(不支持通配符) 4. **默认监听**:仅限 `127.0.0.1`,局域网访问需显式指定 `--host 0.0.0.0` 5. **C2 通信**:AES-256-CTR / XOR 加密(按监听器分配密钥) 6. **C2 密钥**:在 API 响应中自动掩码为 `****` 7. **WebShell 密码**:在 SQLite 中以明文存储 — 请严格限制 `storage/` 目录的访问权限 8. **`.gitignore`**:排除了 `*.db`, `*.enc`, `*.key`, `logs/`, `reports/`, `.auth_secret` 9. **YAML 工具 / MCP Stdio**:命令直接传递给子进程 — 请确保命令是可信的 ## 8. 架构 ### OODA 循环 + 黑板 ``` ┌──────────────────────────────────────────────┐ │ OODA Loop (max 15 iterations) │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │Observe│──→│Orient│──→│Decide│──→│ Act │ │ │ └───┬───┘ └───┬───┘ └───┬───┘ └───┬──┘│ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ ┌──────────────────────────────────────────┐│ │ │ Blackboard ││ │ │ Facts: confirmed findings ││ │ │ ports/services/vulns/web paths/flags ││ │ │ Intents: pending directions ││ │ │ port scans/dir brute/exploit ││ │ │ Goal: target state + achieved flag ││ │ └──────────────────────────────────────────┘│ └──────────────────────────────────────────────┘ ``` ### Reflexion 升级引擎 当工具调用连续失败时,payload 级别会自动升级: ``` L0: Original payload L1: URL/Base64 encoding L2: Escape/double-write L3: Command substitution/Unicode L4: Obfuscation/change attack surface ``` ### 防幻觉机制 - 所有发现必须源自工具输出的文本 - Flag 必须与证据中的字符完全逐字匹配 - 防止 LLM 编造结果 ## 9. 已知问题 1. **WebSocket payload 加密不兼容**:Python WS Payload 使用 AES-256-CTR,但服务器端 `_start_ws()` 的解密方式可能不匹配。请在投入生产环境前进行测试。 2. **不支持 HTTPS/WSS**:HTTP 和 WebSocket 监听器仅支持明文传输。在生产环境中请使用反向代理(如 Nginx)进行 TLS 终结。 3. **SQLite 单连接**:使用单一连接 — 在高并发下可能成为瓶颈。对于单用户使用是可以接受的。 4. **无速率限制**:目前所有 API endpoint 均无速率限制。 *Stopen v1.0 — 自动化渗透测试 Agent*
标签:AI智能体, AV绕过, C2框架, DLL 劫持, FastAPI, GitHub, WebShell管理, 大语言模型, 安全学习资源, 实时处理, 密码管理, 自动化渗透测试, 逆向工具