# PentestGPT2 **Repository Path**: kill-life/pentest-gpt2 ## Basic Information - **Project Name**: PentestGPT2 - **Description**: PentestGPT2 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-31 - **Last Updated**: 2026-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Excalibur (PentestGPT2) 基于人工智能的自主渗透测试代理,采用证据引导的攻击树搜索(EGATS)规划技术。可解决 CTF 挑战、Hack The Box 靶机及授权的安全评估。 - **项目说明:** 本项目非原作者直接维护,系收集自论文开源代码并整理完善而成。内容仅供学习、研究和技术交流使用。 ## 项目概述 Excalibur 是一个智能渗透测试系统,通过大语言模型(LLM)驱动的智能体自动执行安全测试任务。核心创新在于将**攻击树搜索算法**与**LLM 推理能力**相结合,实现: - **自主规划**:基于 TDA(Task Difficulty Assessment)动态评估任务难度 - **证据引导**:使用 EGATS(Evidence-Guided Attack Tree Search)算法优化搜索路径 - **记忆管理**:通过状态存储和上下文压缩维护长期会话状态 - **工具集成**:内置 6 大类安全工具,支持横向移动和权限提升 --- ## Agent 设计架构 ### 整体架构图 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ TUI 界面层 (excalibur/interface) │ │ - 终端用户交互 (TUI) │ │ - 活动日志流 │ │ - 攻击树可视化 │ └─────────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────┐ │ 事件总线 (EventBus) │ │ - 用户命令分发 │ │ - 状态变更通知 │ └─────────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────┐ │ 代理控制器 (AgentController) │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ 生命周期管理:IDLE → RUNNING → PAUSED → COMPLETED/ERROR │ │ │ │ 暂停/恢复/停止控制 │ │ │ │ 指令注入队列 │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ EGATS 规划器 (EGATSPlanner) │ │ │ │ - TDA 计算 → UCB 节点选择 → 反向传播 → 剪枝 │ │ │ │ - 横向移动 (Pivot) 管理 │ │ │ │ - BFS/DFS/Hybrid模式切换 │ │ │ └──────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ ↓ ↓ ┌───────────────────────────────┐ ┌───────────────────────────────┐ │ 记忆子系统 (Memory) │ │ 代理后端 (AgentBackend) │ │ ┌─────────────────────────┐ │ │ ┌─────────────────────────┐ │ │ │ 状态存储 (StateStore) │ │ │ │ ClaudeCodeBackend │ │ │ │ - 主机/服务凭证信息 │ │ │ │ - Anthropic API │ │ │ │ - 攻击树节点持久化 │ │ │ │ - OpenRouter │ │ │ └─────────────────────────┘ │ │ │ - 本地 LLM │ │ │ ┌─────────────────────────┐ │ │ └─────────────────────────┘ │ │ │ 上下文组装器 │ │ │ │ │ │ (ContextAssembler) │ │ │ 统一接口抽象 │ │ │ - 攻击路径上下文 │ │ │ - connect/disconnect │ │ │ - 状态事实检索 │ │ │ - query │ │ │ - 模式指导生成 │ │ │ - receive_messages │ │ └─────────────────────────┘ │ │ │ │ ┌─────────────────────────┐ │ └───────────────────────────────┘ │ │ 上下文压缩器 │ │ │ │ (ContextCompressor) │ │ │ │ - 分支摘要生成 │ │ │ │ - 上下文长度控制 │ │ │ └─────────────────────────┘ │ └───────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────┐ │ 工具层 (Tools) │ │ ┌──────────────┬──────────────┬──────────────┬──────────────┐ │ │ │ Reconnaissance│ Web Exploit. │ Network Exp. │ Credential │ │ │ │ (侦察探测) │ (Web 利用) │ (网络利用) │ Attacks │ │ │ └──────────────┴──────────────┴──────────────┴──────────────┘ │ │ ┌──────────────┬──────────────┐ │ │ │ Active Dir. │ Privilege │ │ │ │ (AD 攻击) │ Escalation │ │ │ │ │ (权限提升) │ │ │ └──────────────┴──────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ ``` ### 核心组件说明 #### 1. AgentController(代理控制器) 位于 [`excalibur/core/controller.py`](excalibur/core/controller.py),是系统的中央协调器: - **状态机管理**:实现 5 态生命周期模型(IDLE/RUNNING/PAUSED/COMPLETED/ERROR) - **EGATS 循环**:驱动攻击树搜索的主循环,包括节点选择、执行、反向传播 - **会话持久化**:支持暂停后恢复,保留攻击树状态和上下文 - **事件驱动**:通过 EventBus 与 TUI 解耦通信 #### 2. EGATSPlanner(证据引导的攻击树搜索规划器) 位于 [`excalibur/planner/egats.py`](excalibur/planner/egats.py:46),核心算法实现: | 组件 | 功能 | 关键参数 | |------|------|----------| | TDAComputer | 任务难度评估 | horizon/evidence/context/success权重 | | UCB Selector | 节点选择策略 | exploration_constant=1.414 | | Backpropagation | 奖励反向传播 | alpha=0.7 | | Pruning | 分支剪枝 | threshold=0.8, min_attempts=3 | | Pivot Manager | 横向移动管理 | 凭证传播、新主机子树创建 | #### 3. Memory Subsystem(记忆子系统) 位于 [`excalibur/memory/`](excalibur/memory/): - **StateStore** ([`state_store.py`](excalibur/memory/state_store.py:1)):持久化存储主机、服务、凭证等实体信息 - **ContextAssembler** ([`context_assembler.py`](excalibur/memory/context_assembler.py:27)):组装 LLM 提示词上下文,包括攻击路径、状态事实、模式指导 - **ContextCompressor** ([`context_compressor.py`](excalibur/memory/context_compressor.py:1)):压缩上下文长度,支持理想/激进阈值控制 #### 4. AgentBackend(代理后端抽象) 位于 [`excalibur/core/backend.py`](excalibur/core/backend.py),提供框架无关的 LLM 接口: ```python class AgentBackend(ABC): async def connect(self) -> None # 建立连接 async def disconnect(self) -> None # 断开连接 async def query(self, prompt: str) # 发送查询 async def receive_messages() # 接收消息流 ``` 当前实现:`ClaudeCodeBackend`(支持 Anthropic API、OpenRouter), `LocalLLMBackend` 接口。 --- ## 项目结构 ``` pentestgpt2/ ├── excalibur/ # 核心代码包 │ ├── core/ # 核心引擎模块 │ │ ├── agent.py # ExcaliburAgent - Claude Code 代理封装 │ │ ├── backend.py # AgentBackend 抽象接口及实现 │ │ ├── controller.py # AgentController - EGATS 主控制器 │ │ ├── config.py # 配置管理 (ExcaliburConfig) │ │ ├── events.py # EventBus - 事件总线 │ │ ├── session.py # SessionStore - 会话状态管理 │ │ └── tracer.py # Tracer - 执行追踪器 │ │ │ ├── interface/ # TUI 界面层 │ │ ├── main.py # 主入口点 │ │ ├── tui.py # TUI 组件实现 │ │ ├── components/ # UI 组件 │ │ │ ├── activity_feed.py # 活动日志流组件 │ │ │ ├── renderers.py # 渲染器(攻击树等) │ │ │ ├── splash.py # 启动画面 │ │ │ └── tree_view.py # 攻击树视图 │ │ └── styles.tcss # TUI 样式定义 │ │ │ ├── memory/ # 记忆子系统 │ │ ├── __init__.py │ │ ├── branch_summary.py # 分支摘要生成器 │ │ ├── context_assembler.py # 上下文组装器 │ │ ├── context_compressor.py # 上下文压缩器 │ │ ├── models.py # 记忆数据模型 │ │ └── state_store.py # 状态存储 (SQLite) │ │ │ ├── planner/ # 规划器模块 (EGATS) │ │ ├── __init__.py │ │ ├── backpropagation.py # 反向传播算法 │ │ ├── egats.py # EGATSPlanner 主类 │ │ ├── models.py # 攻击树数据模型 │ │ ├── mode_selector.py # 模式选择器 (BFS/DFS) │ │ ├── pivot.py # 横向移动管理 │ │ ├── pruning.py # 剪枝算法 │ │ ├── tda.py # TDA 计算 │ │ └── ucb.py # UCB 节点选择 │ │ └── ucb.py # UCB 选择策略 │ │ │ ├── prompts/ # 提示词模板 │ │ ├── __init__.py │ │ ├── pentesting.py # 渗透测试提示词 │ │ └── tda_prompts.py # TDA 相关提示词 │ │ │ ├── tools/ # 安全工具库 │ │ ├── __init__.py │ │ ├── base.py # ToolBase 抽象基类 │ │ ├── registry.py # 工具注册表 │ │ ├── knowledge.py # 知识库工具 │ │ └── skill.py # 技能封装 │ │ ├── categories/ # 工具分类 │ │ │ ├── __init__.py │ │ │ ├── active_directory.py # AD 攻击工具 (6 个) │ │ │ ├── credential_attacks.py # 凭证攻击工具 (5 个) │ │ │ ├── network_exploitation.py # 网络利用工具 (8 个) │ │ │ ├── privilege_escalation.py # 权限提升工具 (6 个) │ │ │ ├── reconnaissance.py # 侦察探测工具 (10 个) │ │ │ └── web_exploitation.py # Web 利用工具 (8 个) │ │ └── skills/ # 高级技能封装 │ │ ├── __init__.py │ │ ├── ad_skills.py # AD 技能 │ │ ├── pivot_skills.py # 横向移动技能 │ │ ├── privesc_skills.py # 权限提升技能 │ │ ├── recon_skills.py # 侦察技能 │ │ └── web_skills.py # Web 利用技能 │ │ │ └── __init__.py │ ├── scripts/ # Docker 启动脚本 │ ├── ccr-config-template.json # CCR 配置模板 │ ├── config.sh # 配置脚本 │ └── entrypoint.sh # 容器入口点 │ ├── tests/ # 测试套件 │ ├── conftest.py # pytest fixtures │ ├── docker/ # Docker 集成测试 │ ├── integration/ # 端到端集成测试 │ └── unit/ # 单元测试 │ ├── workspace/ # 运行时工作目录 │ └── .gitkeep │ ├── .env.example # 环境变量模板 ├── docker-compose.yml # Docker Compose 配置 ├── Dockerfile # Docker 镜像定义 ├── pyproject.toml # Python 项目配置 (uv) ├── Makefile # 构建命令封装 └── README_zh.md # 中文文档 ``` --- ## 具体模块与功能 ### 1. 侦察探测模块 (Reconnaissance) | 工具 | 功能描述 | |------|----------| | `nmap` | 端口扫描和服务检测 | | `gobuster` | Web 目录/子域名爆破 | | `nikto` | Web 服务器漏洞扫描 | | `whatweb` | Web 技术识别 | | `enum4linux` | SMB 信息枚举 | | `rpcclient` | RPC 服务查询 | | `snmp-check` | SNMP 枚举 | | `masscan` | 快速端口扫描 | | `dirb` | Web 目录发现 | | `ffuf` | 模糊测试工具 | ### 2. Web 利用模块 (Web Exploitation) | 工具 | 功能描述 | |------|----------| | `sqlmap` | SQL 注入自动化 | | `xsstrike` | XSS 检测 | | `commix` | 命令注入检测 | | `nuclei` | 基于模板的漏洞扫描 | | `httpx` | HTTP 探测 | | `waybackurls` | URL 收集 | | `paramspider` | 参数发现 | | `subfinder` | 子域名枚举 | ### 3. 网络利用模块 (Network Exploitation) | 工具 | 功能描述 | |------|----------| | `metasploit` | 渗透测试框架 | | `searchsploit` | Exploit-DB 搜索 | | `hydra` | 在线密码爆破 | | `medusa` | 并行认证爆破 | | `john` | John the Ripper 密码破解 | | `hashcat` GPU 密码破解 | | `responder` | LLMNR/NBT-NS 投毒 | | `smbmap` | SMB 枚举 | ### 4. 凭证攻击模块 (Credential Attacks) | 工具 | 功能描述 | |------|----------| | `seclists` | 字典文件集合 | | `crackmapexec` | 后渗透框架 | | `psexec` | 远程执行 | | `wmiexec` | WMI 远程执行 | | `smbexec` | SMB 执行 | ### 5. Active Directory 模块 (AD Attacks) | 工具 | 功能描述 | |------|----------| | `bloodhound` | AD 攻击路径分析 | | `impacket` | AD 协议实现集 | | `kerbrute` | Kerberos 爆破 | | `rubeus` | .NET Kerberos 工具 | | `mimikatz` | 凭证抓取 | | `donpwn` | AD 漏洞利用集 | ### 6. 权限提升模块 (Privilege Escalation) | 工具 | 功能描述 | |------|----------| | `linpeas` | Linux 提权检测 | | `winpeas` | Windows 提权检测 | | `gtfobins` | Linux 二进制提权 | | `gtoowin` | Windows 二进制提权 | | `linux-exploit-suggester` | 内核漏洞匹配 | | `windows-exploit-suggester` | Windows 补丁缺失检测 | --- ## 基座模型接入使用指导 ### 支持的模型服务 Excalibur 支持多种 LLM 后端,通过 [`AgentBackend`](excalibur/core/backend.py) 抽象接口实现框架无关性: | 后端类型 | 状态 | 说明 | |----------|------|------| | Anthropic Claude | ✅ 已支持 | 默认推荐,性能最佳 | | OpenRouter | ✅ 已支持 | 多模型统一 API | | LM Studio | ✅ 已支持 | 本地 LLM 服务 | | Ollama | ✅ 已支持 | 开源模型本地运行 | | vLLM | 🔄 计划中 | 高性能推理服务器 | ### Anthropic Claude(推荐) #### 方式一:OAuth 登录(推荐) ```bash # 1. 进入容器 make connect # 2. 配置 Claude Code claude config # 3. 按提示完成 OAuth 授权 ``` #### 方式二:API Key ```bash # 设置环境变量 export ANTHROPIC_API_KEY="sk-ant-api03-xxxxxxxx" # 或使用 .env 文件 echo 'ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxx' >> .env ``` ### OpenRouter 接入 OpenRouter 提供多模型统一 API,支持免费额度: ```bash # 1. 在 https://openrouter.ai 获取 API Key # 2. 配置环境变量 export EXCALIBUR_AUTH_MODE=openrouter export ANTHROPIC_BASE_URL=https://openrouter.ai/api/v1 export ANTHROPIC_AUTH_TOKEN="sk-or-v1-xxxxxxxx" export NO_PROXY="localhost,127.0.0.1" # 3. 选择模型(在.env 中设置) LLM_MODEL=meta-llama/llama-3.1-70b-instruct:free ``` ### LM Studio 本地接入 LM Studio 提供本地 LLM 推理服务,支持多种开源模型: #### 1. 安装并启动 LM Studio ```bash # Linux (下载 .AppImage) chmod +x lmstudio-x.x.x-x86_64.AppImage ./lmstudio-x.x.x-x86_64.AppImage # 或 Docker 运行 LM Studio Server docker run -d -p 1234:1234 --name lmstudio ghcr.io/lmstudio-ai/lmstudio-server:latest ``` #### 2. 下载并加载模型 在 LM Studio 界面中: 1. 搜索框输入模型名称(如 `qwen2.5`, `llama3`, `mistral`) 2. 点击 Download 下载模型 3. 选择模型卡片,点击 "Start Server" #### 3. 配置 Excalibur ```bash # .env 配置文件 EXCALIBUR_AUTH_MODE=local LLM_MODEL=qwen2.5:7b-instruct-q4_k_m # 或使用环境变量 export EXCALIBUR_AUTH_MODE=local export LLM_MODEL=qwen2.5:7b-instruct-q4_k_m ``` #### 4. 启动 Excalibur ```bash make connect excalibur --target <目标 IP> ``` ### Ollama 本地接入 Ollama 是轻量级本地 LLM 运行工具: #### 1. 安装 Ollama ```bash # Linux curl -fsSL https://ollama.com/install.sh | sh # Docker docker run -d -v ollama:/root/.ollama -p 11434:11436 --name ollama ollama/ollama ``` #### 2. 拉取模型 ```bash # 常用模型推荐 ollama pull qwen2.5:7b # 中文支持好,性能均衡 ollama pull llama3.1:8b # 英文能力强 ollama pull mistral:7b # 开源社区活跃 ollama pull phi3:mini # 小模型,资源占用低 # 验证安装 ollama list ``` #### 3. 启动 Ollama Server ```bash # 默认在 11434 端口运行 ollama serve # Docker 方式(已包含在 docker-compose 中) docker start ollama ``` #### 4. 配置 Excalibur ```bash # .env 配置文件 EXCALIBUR_AUTH_MODE=local LLM_MODEL=qwen2.5:7b OLLAMA_BASE_URL=http://host.docker.internal:11434 # 或使用环境变量 export EXCALIBUR_AUTH_MODE=local export LLM_MODEL=qwen2.5:7b export OLLAMA_BASE_URL=http://host.docker.internal:11434 ``` #### 5. 验证连接 ```bash # 在容器内测试 curl http://host.docker.internal:11434/api/generate \ -d '{"model": "qwen2.5", "prompt": "Hello"}' # 或直接运行 Excalibur excalibur --target <目标 IP> ``` ### 模型选择建议 | 场景 | 推荐模型 | 最低资源 | |------|----------|----------| | CTF 挑战 | `qwen2.5:14b` / `llama3.1:8b` | 16GB RAM | | HTB 靶机 | `qwen2.5:7b` / `mistral:7b` | 8GB RAM | | 快速测试 | `phi3:mini` / `gemma2:2b` | 4GB RAM | | 复杂攻击链 | `qwen2.5:32b` / `llama3.1:70b` | 32GB+ RAM | --- ### 模型上下文窗口配置(基于论文研究) 根据 PENTESTGPT V2 论文的实证研究,不同模型的上下文窗口大小直接影响任务完成率和性能表现: #### 1. 主要实验模型及其 max_token 配置 **附录 D.6 (Context Load Degradation Study)** 中明确给出的模型上下文窗口: | 模型 | 上下文窗口 (max_token) | 理想工作窗口 | 说明 | |------|------------------------|--------------|------| | GPT-4o | 128K | ~51K (40%) | 论文附录 D.6 控制实验基准 | | Claude-3-Sonnet | 200K | ~80K (40%) | 论文附录 D.6 控制实验基准 | | Gemini-1.5-Pro | 1M | ~400K (40%) | 论文附录 D.6 控制实验基准 | **主要实验使用的模型(Section 5.1):** | 模型 | 说明 | |------|------| | GPT-5.2 | 支持 thinking mode,用于扩展推理能力评估 | | Claude-Opus-4.5 | 在 XBOW 测试中达到最高完成率 (91%) | | Gemini-3.0-Pro | 支持 thinking mode,用于对比研究 | #### 2. 上下文负载与性能关系 论文通过受控实验发现,模型在**40% 上下文容量**时表现最佳: ``` 上下文负载 → 准确率变化 ───────────────────────────────────── ≤ 40% → >90% (稳定区间) 60% → 78% (开始下降) 80% → 61% (显著下降) ``` **关键发现:** - 超过 40% 负载后,准确率呈线性下降趋势 - 主要失败模式:忽略早期上下文信息 (42%)、幻觉工具输出 (31%)、执行错误但合理的命令 (27%) - 项目默认配置 `CONTEXT_IDEAL_THRESHOLD=0.7` 和 `CONTEXT_AGGRESSIVE_THRESHOLD=0.9` 基于此研究 #### 3. Thinking Mode(思考模式)支持 论文 Section 5.1 指出,所有主要实验模型都支持在标准模式和思考模式之间切换: | 模式 | 说明 | |------|------| | Standard (非 thinking) | 快速响应,适合短任务 | | Thinking (扩展推理) | 深度分析,适合复杂攻击链,通常带来 6-10 个百分点的性能提升 | **配置建议:** ```bash # 在 .env 中设置模型时,可考虑使用支持 thinking mode 的版本 LLM_MODEL=claude-opus-4.5-thinking # Claude Opus 4.5 with thinking enabled ``` #### 4. 上下文压缩策略(基于论文研究) 根据论文 Section 4.3.1 和附录 D.6,项目采用分层上下文管理策略: | 阈值 | 配置项 | 说明 | |------|--------|------| | ≤40% | 理想工作窗口 | 性能最佳区间,无需压缩 | | >70% | `CONTEXT_IDEAL_THRESHOLD` | 开始理想压缩(保留关键信息) | | >90% | `CONTEXT_AGGRESSIVE_THRESHOLD` | 激进压缩(释放更多空间) | **压缩策略:** - **理想压缩**:生成路径摘要,保留分支状态和发现结果 - **激进压缩**:移除旧的路径段,同时保留关键发现 ```bash # .env 配置示例 CONTEXT_IDEAL_THRESHOLD=0.7 # 70% 容量时开始压缩 CONTEXT_AGGRESSIVE_THRESHOLD=0.9 # 90% 容量时激进压缩 ``` --- ### 研究局限与未来方向(基于论文 Section 6) #### 1. 研究局限性与威胁有效性 **1.1 基准测试范围限制** 当前评估主要集中在以下场景: - ✅ Web 应用漏洞利用 - ✅ CTF 挑战解决 - ✅ Hack The Box 靶机渗透 **缺失的领域包括:** - 🔲 **二进制漏洞利用** - Exploit development for custom binaries - 🔲 **移动安全** - Android/iOS 应用逆向与攻击 - 🔲 **云特定攻击场景** - AWS/Azure/GCP 云服务配置错误利用 **1.2 模型特异性效应** 不同架构的 LLM 表现出不同的优势: | 模型 | 性能特点 | |------|----------| | Claude-Opus-4.5 | XBOW 测试中达到最高完成率 (91%),推理深度最佳 | | GPT-5.2 | Thinking mode 支持,适合复杂规划任务 | | Gemini-3.0-Pro | 上下文窗口大,适合长会话保持 | **1.3 基线公平性考虑** - 使用已发布的 baseline 代码和默认参数配置 - 未充分评估不同模型架构间的差异(Transformer vs MoE) - 实验环境相对受控,可能与真实世界复杂场景存在差距 **1.4 失败分析洞察** 当前未能完全解决的失败类型: | 类型 | 占比 | 说明 | |------|------|------| | Type A (能力缺口) | ~60% | 缺少工具、知识或技能 - 可通过工程改进解决 | | Type B (复杂性障碍) | ~40% | 规划、状态管理问题 - 需要架构创新 | --- #### 2. 未来方向与潜在点 **2.1 The Creativity Barrier(创造力壁垒)** 当前系统有效于模式匹配,但在**分布外泛化 (out-of-distribution generalization)**方面仍有挑战: ```mermaid graph LR A[已知攻击模式] -->|Pattern Matching| B{EGATS 搜索} C[新颖攻击场景] -->|需要创造力 | D{推理判断} B --> E[成功] D --> F[失败 - PlayerTwo 案例] ``` **PlayerTwo 失败案例分析:** - 系统能够识别已知漏洞模式 - 但在面对未见过的服务组合时,难以创造性地提出新的攻击路径 - **未来方向**:增强少样本学习能力和类比推理能力 **2.2 The Adversarial Environment Barrier(对抗环境壁垒)** 真实渗透测试环境中存在的挑战: | 障碍类型 | 描述 | 影响 | |----------|------|------| | Honeypots (蜜罐) | 故意暴露的脆弱服务,用于诱捕和追踪 | 可能误导状态表示 | | Canary Tokens (金丝雀令牌) | 检测异常访问的标记 | 增加误报风险 | | Deceptive Services (欺骗性服务) | 模拟真实服务的虚假响应 | 污染决策依据 | **应对策略:** - 增强对可疑行为的检测和验证机制 - 引入不确定性量化,降低单一证据源的权重 **2.3 The Temporal Scale Barrier(时间尺度壁垒)** 人类渗透测试专家能够在**数周甚至数月**的 engagements 中维持心理模型: ```mermaid graph TB subgraph "当前 EGATS 能力" A[单会话内推理] --> B[攻击树搜索] B --> C[反向传播更新] end subgraph "未来方向" D[跨会话连续性] --> E[长期记忆增强] E --> F[多周 engagement 管理] end ``` **当前局限:** - EGATS 改进了单会话内的推理能力 - 但跨会话的连续性和长期规划仍需加强 **未来方向:** - **Long-horizon planning**: 开发支持更长规划周期的算法 - **Cross-session memory consolidation**: 将短期发现转化为长期知识 - **Incremental model refinement**: 基于历史 engagement 持续优化策略 --- #### 3. 研究展望总结 | 方向 | 优先级 | 预期影响 | |------|--------|----------| | 扩展基准测试范围(二进制/移动/云) | 高 | 提升通用性和实用性 | | 增强创造力与泛化能力 | 中 | 解决 Type B 失败 | | 对抗环境鲁棒性 | 中 | 降低误报和误导 | | 跨会话连续性 | 低→中 | 支持长期复杂任务 | --- ## 安装指南 ### Docker 方式(推荐) ```bash # 1. 克隆项目 git clone https://github.com/pentestgpt/pentestgpt2.git cd pentestgpt2 # 2. 构建镜像 make install # 构建 Docker 镜像 # 3. 配置认证(首次使用) make config # 配置 API 密钥或本地 LLM # 4. 启动容器 make connect # 连接容器并进入交互界面 ``` ### 开发模式 ```bash # 1. 安装 uv (Python 包管理器) curl -LsSf https://astral.sh/uv/install.sh | sh # 2. 创建虚拟环境并安装依赖 uv sync # 3. 配置环境变量 cp .env.example .env nano .env # 编辑配置文件 # 4. 直接运行 excalibur --target <目标 IP> ``` --- ## Langfuse 本地部署 Excalibur 支持使用 Langfuse 作为可观测性平台,用于追踪渗透测试会话、记录攻击树状态和分析执行日志。项目已提供完整的 Docker Compose 配置文件,可一键启动 Langfuse 本地实例。 ### 部署架构 Langfuse 本地部署包含以下核心组件: | 组件 | 端口 | 说明 | |------|------|------| | langfuse-web | 3001 | Langfuse Web UI | | langfuse-worker | 3030 | 后台任务处理 | | postgres | 5432 | 主数据库 | | clickhouse | 8123/9000 | 分析数据库 | | redis | 6379 | 缓存与队列 | | minio | 9090/9091 | 对象存储 (S3 兼容) | ### 快速部署 ```bash # 1. 进入 Langfuse 部署目录 cd langfuse # 2. 复制环境变量模板并配置(必须修改默认密码) cp .env.example .env nano .env # 编辑配置,重点修改以下项: # - NEXTAUTH_SECRET: 生成密钥 openssl rand -hex 32 # - ENCRYPTION_KEY: 生成密钥 openssl rand -hex 32 # - POSTGRES_PASSWORD: PostgreSQL 密码 # - REDIS_AUTH: Redis 密码 # - MINIO_ROOT_PASSWORD: MinIO 密码 # - CLICKHOUSE_PASSWORD: ClickHouse 密码 # 3. 启动 Langfuse 服务 docker-compose up -d # 4. 验证服务状态 docker-compose ps ``` ### 访问 Langfuse Web UI 服务启动后,通过以下地址访问: - **Web UI**: http://localhost:3001 - **MinIO Console**: http://localhost:9091 (MinIO 管理界面) 首次访问需创建管理员账号。 ### Excalibur 集成配置 在 Excalibur 的 `.env` 文件中配置 Langfuse 连接: ```bash # Langfuse 配置 LANGFUSE_HOST=http://localhost:3001 LANGFUSE_PUBLIC_KEY=your-public-key LANGFUSE_SECRET_KEY=your-secret-key ``` 获取 API Key 步骤: 1. 访问 http://localhost:3001 并登录 2. 进入 Settings → API Keys 3. 创建新的 API Key 并复制到配置中 ### 服务管理 ```bash # 查看日志 docker-compose logs -f langfuse-web # 停止服务 docker-compose down # 停止服务并删除数据 docker-compose down -v # 重启服务 docker-compose restart ``` ### 安全建议 - 仅将 langfuse-web (3001) 和 minio (9090) 端口暴露给外部网络 - 其他组件(postgres、redis、clickhouse)绑定到 127.0.0.1,仅接受本地连接 - 生产环境务必修改所有默认密码和密钥 - 定期备份数据卷:`docker-compose down` 前导出重要数据 --- ## Docker 命令说明 | 命令 | 功能描述 | |------|----------| | `make install` | 构建 Docker 镜像 | | `make config` | 配置 API 认证(首次使用) | | `make connect` | 连接容器(主要入口) | | `make stop` | 停止容器(保留配置) | | `make clean-docker` | 彻底清除容器及配置 | --- ## 使用方法 ### TUI 模式(默认) ```bash # 进入容器后执行 excalibur --target 10.10.11.234 # 带上下文提示的使用 excalibur --target 10.10.11.50 --instruction "WordPress 站点,检查插件漏洞" ``` **快捷键:** - `F1` - 帮助 - `Ctrl+P` - 暂停/继续 - `Ctrl+Q` - 退出 ### 非交互模式 ```bash excalibur --target 10.10.11.100 --non-interactive ``` --- ## 测试运行 ```bash # 单元测试 make test # 执行所有测试(不含 Docker 测试) make test-cov # 生成测试覆盖率报告 # 代码检查 make lint # Ruff 代码检查 make typecheck # Mypy 类型检查 make check # 执行全部检查(lint + typecheck) ``` --- ## 许可协议 MIT License,详见 [`LICENSE.md`](LICENSE.md)。 **免责声明:** 仅供教育用途及授权安全测试使用。使用者需确保获得目标系统的明确授权,严禁用于非法活动。