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

## 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
```

## 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. 点击文件名读取,点击目录名进入

### 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管理, 大语言模型, 安全学习资源, 实时处理, 密码管理, 自动化渗透测试, 逆向工具