bugbasesecurity/pentest-copilot

GitHub: bugbasesecurity/pentest-copilot

Pentest Copilot 是一款基于浏览器的 AI 渗透测试助手,通过 Agentic AI 架构自动化执行安全测试任务,提升渗透测试效率。

Stars: 406 | Forks: 91

Pentest Copilot Banner

# Pentest Copilot ![GitHub License](https://img.shields.io/github/license/bugbasesecurity/pentest-copilot) ![GitHub Repo stars](https://img.shields.io/github/stars/bugbasesecurity/pentest-copilot) ![GitHub forks](https://img.shields.io/github/forks/bugbasesecurity/pentest-copilot) Pentest Copilot 是一款基于浏览器的 AI 驱动的道德黑客助手,旨在简化渗透测试工作流程。 请浏览 [Github Wiki](https://github.com/bugbasesecurity/pentest-copilot/wiki) 获取关于功能、安装和使用的详细文档。

## Pentest Copilot 实战演示 这是一段 Pentest Copilot 测试 TryHackMe 机器 [RootMe](https://tryhackme.com/room/rrootme) 的快速演示,这是一个 boot2root 挑战。 https://github.com/user-attachments/assets/5e50b14b-a64f-4ba1-9449-52d5ad61ead6 ## 目录 - [简介](#introduction) - [安装说明](#installation) - [配置说明](#configuration) - [系统架构](#architecture) - [功能特性](#features) - [系统要求](#system-requirements) - [本地开发](#local-development) - [贡献指南](#contributing) - [许可证](#license) - [免责声明](#disclaimer) - [作者](#authors) - [引用](#citations)

简介

Pentest Copilot 是一款开源工具,旨在为道德黑客和渗透测试人员提供协助。通过集成 LLM,它可以自动化执行并增强各种渗透测试任务。该工具可通过 Docker 在本地部署,并包含一个可选的 Kali Linux 容器用于模拟渗透测试环境。 ### 为什么选择 Pentest Copilot? Pentest Copilot 是一款基于浏览器的 AI 驱动助手,可融入任何安全专业人员的日常工作流程。与 [PentestGPT](https://github.com/greydgl/pentestgpt) 等替代方案相比,Pentest Copilot 与渗透测试环境紧密结合,提供了一个自动化与手动控制共存的统一界面。 主要差异化优势: - **基于浏览器的 AI 助手**:完全通过浏览器访问,无需本地 CLI 设置 - **Agentic AI 架构**:AI 直接在渗透测试环境中运行命令,减少人工操作 - **上下文保持**:维护会话上下文并在每个阶段提供智能摘要 - **动态渗透测试清单**:持续更新的任务列表引导用户进行结构化评估 - **集成终端访问**:浏览器嵌入式终端,可与 Kali 容器或其他测试环境无缝交互 - **VPN 集成**:通过 OpenVPN 连接到私有测试网络,实现安全的远程访问 - **工作空间管理**:组织和管理多个并发的渗透测试会话,且上下文相互隔离 - **自定义工具选择**:可配置的工具链,以符合个人偏好和组织标准 - **Burp Suite 集成**:搜索代理历史记录,将请求发送到 Repeater 或 Intruder,并使用 Collaborator 进行带外测试 - **浏览器 Agent**:通过 Magnitude 实现 Agentic 浏览器自动化,用于登录测试和表单交互等任务

安装说明

### 克隆仓库 ``` git clone https://github.com/bugbasesecurity/pentest-copilot.git pentest-copilot cd pentest-copilot ``` ### 一键设置与启动(推荐) 运行一体化启动器以配置、构建并启动 Pentest Copilot: ``` bash run.sh ``` 首次运行时,脚本将: - 让您选择部署模式:普通模式 或 开发者模式(仅基础设施,手动运行前端/后端) - 从模板创建 `config.toml` 和 `.env` - 自动生成安全的会话密钥 - 提示输入 LLM 模型提供商、模型名称和 API 密钥 - 可选配置 Google 搜索、Langfuse 追踪和 exploit box (SSH) 凭据 - 构建并启动所有 Docker 容器 在后续运行中,脚本会检测现有配置并提供保留选项。使用 `-q` 标志可跳过所有提示并立即启动: ``` bash run.sh start -q # Quick start, no prompts bash run.sh dev -q # Quick dev start, no prompts ``` 其他命令: ``` bash run.sh config # Update configuration (model keys, Google search, Langfuse, exploit box) bash run.sh stop # Stop all containers bash run.sh logs # Tail container logs (e.g. bash run.sh logs backend) bash run.sh status # Show running containers bash run.sh help # Show full help ``` ### 访问应用 容器运行后,请在浏览器中访问 `http://localhost:3000` 查看前端界面。 ### 关于 run.sh `run.sh` 是一个一体化交互式启动器,负责处理 Pentest Copilot 的设置、配置、构建和运行。 配置分为两个文件: | 文件 | 用途 | 读取时机 | |------|---------|-----------| | `config.toml` | 静态基础设施:服务器端口、部署模式、前端 URL、CORS 源、数据库 URI、会话密钥、Langfuse 追踪 | 启动时读取一次。更改需要重启容器。 | | `backend/.env` | 动态配置:LLM 提供商和 API 密钥、SSH 凭据、VNC、Burp、Magnitude、Google 搜索 | 启动时及运行时读取。可通过设置 UI 编辑。更改立即生效。 | 该脚本: - 从 `config.toml.template` 创建 `config.toml`,从 `backend/.env.template` 创建 `.env` - 提示输入模型提供商、模型名称、API 密钥和可选的 Base URL 覆盖 - 可选配置 Google 搜索(API 密钥和自定义搜索引擎 ID)、Langfuse 追踪和 exploit box (SSH) - 需要时将 SSH 私钥复制到 Docker 挂载卷 (`./ssh-keys/`) - 需要时生成 `docker-compose.override.yml` 用于 SSH 密钥挂载或主机网关 - 检测 WSL 并调整主机名以兼容 - 在后续运行中跳过已配置的项目(使用 `-q` 实现零提示) ### 手动环境设置(高级) 如果您更喜欢手动设置环境变量: 1. 将 `./config.toml.template` 复制到 `./config.toml` 并进行编辑(服务器、数据库、CORS、会话、追踪)。 2. 将 `./backend/.env.template` 复制到 `./backend/.env` 并添加您的模型 API 密钥和 SSH 凭据。 3. 将 `./frontend/.env.template` 复制到 `./frontend/.env` 并设置后端 URL。 然后启动堆栈: ``` docker compose up -d --build ```

配置说明

Pentest Copilot 使用两个配置文件。所有敏感文件均已通过 gitignore 排除;仅提交 `.template` 文件。 ### 静态配置 由 `run.sh` 从 `config.toml.template` 生成。启动时读取一次。绑定挂载到后端容器中。更改需要重启。 | 键名 | Section | 描述 | 默认值 | |-----|---------|-------------|---------| | `port` | `[server]` | 后端服务器端口 | `8080` | | `deployment` | `[server]` | 部署环境 (`LOCAL` 或 `PROD`) | `LOCAL` | | `base_url_frontend` | `[server]` | 用于 CORS 和重定向的前端 URL | `http://localhost:3000` | | `cors_origins` | `[server]` | 额外的 CORS 源(逗号分隔) | _(none)_ | | `mongo_uri` | `[database]` | MongoDB 连接字符串 | `mongodb://mongodb:27017/pentestcopilot` | | `mongo_database` | `[database]` | MongoDB 数据库名称 | `pentestcopilot` | | `redis_url` | `[database]` | Redis 连接字符串 | `redis://redis:6379` | | `secret` | `[session]` | 会话 cookie 签名密钥(由 run.sh 自动生成) | _(random)_ | | `lifetime` | `[session]` | 会话生命周期 (毫秒) | `1000` | | `enabled` | `[tracing]` | 启用 Langfuse LLM 追踪 | `false` | | `public_key` | `[tracing]` | Langfuse 公钥 | | | `secret_key` | `[tracing]` | Langfuse 密钥 | | | `base_url` | `[tracing]` | Langfuse Base URL | `https://cloud.langfuse.com` | ### 动态配置 由 `run.sh` 从 `backend/.env.template` 生成。位于开发模式下的 `backend/.env` 或 Docker 容器内的 `/srv/data/.env`。可在运行时通过设置 UI 编辑。更改立即生效。 | 变量 | 描述 | 默认值 | |----------|-------------|---------| | `MODEL_PROVIDER` | LLM 提供商 (`openai`, `anthropic`, `google`, `mistralai`, `openai-compatible`) | `openai` | | `MODEL` | 模型标识符 | `gpt-4o` | | `MODEL_API_KEY` | 模型提供商的 API 密钥 | | | `MODEL_BASE_PATH` | OpenAI 兼容提供商的 Base URL 覆盖 | | | `REASONING_MODE` | 为支持的模型启用扩展推理 (`on`, `off`) | `off` | | `GOOGLE-API-KEY` | 用于搜索工具的 Google API 密钥 | | | `CUSTOM-SEARCH-ENGINE-ID` | Google 自定义搜索引擎 ID | | | `SSH_HOST` | exploit box 的主机名 | | | `SSH_PORT` | SSH 端口 | `22` | | `SSH_USERNAME` | SSH 用户名 | `root` | | `SSH_PASSWORD` | SSH 密码 | | | `SSH_PRIVATE_KEY` | SSH 私钥文件路径 | | | `SSH_PRIVATE_KEY_PASSPHRASE` | 私钥的密码 | | | `VNC_MODE` | VNC 模式 (`manual` 或 `auto`) | | | `VNC_HOST` | VNC 服务器主机 | | | `VNC_PORT` | VNC websockify 端口 | `9020` | | `VNC_PASSWORD` | VNC 密码 | | | `VNC_DISPLAY` | VNC 的 X display(例如 `:89`) | `:89` | | `VNC_RFBPORT` | VNC RFB 端口 | `5989` | | `WEBSOCKIFY_PORT` | noVNC websockify 端口 | `9020` | | `BURP_RPC_HOST` | Burp Suite RPC 扩展主机 | | | `BURP_RPC_PORT` | Burp Suite RPC 端口 | `50051` | | `MAGNITUDE_ENABLED` | 启用 Magnitude 浏览器 Agent | `false` | | `MAGNITUDE_HEADLESS` | 在无头模式下运行浏览器 | `true` | | `MAGNITUDE_PROXY_URL` | 浏览器的代理 URL(例如 Burp) | | | `MAGNITUDE_DISPLAY` | 有头浏览器的 X display(例如 `:99`) | | | `MAGNITUDE_MODEL_PROVIDER` | 浏览器 Agent 的 LLM 提供商 | | | `MAGNITUDE_MODEL` | 浏览器 Agent 的模型 | | | `MAGNITUDE_MODEL_API_KEY` | 浏览器 Agent 的 API 密钥 | | | `MAGNITUDE_MODEL_BASE_URL` | 浏览器 Agent 的 Base URL | | | `ANTHROPIC_OAUTH_ACCESS_TOKEN` | Anthropic OAuth token(自动填充) | | | `ANTHROPIC_OAUTH_REFRESH_TOKEN` | Anthropic OAuth 刷新令牌(自动填充) | | | `ANTHROPIC_OAUTH_EXPIRES_AT` | Anthropic OAuth 令牌过期时间(自动填充) | | ### 支持的模型提供商 | 提供商 | 示例模型 | |----------|----------------| | OpenAI | `gpt-4o`, `gpt-4o-mini`, `gpt-4-turbo`, `o1`, `o3-mini` | | Anthropic (Claude) | `claude-sonnet-4-20250514`, `claude-3-5-sonnet-20241022`, `claude-3-5-haiku-20241022` | | Google | Gemini models via `aistudio.google.com` | | Mistral AI | Mistral models | | OpenAI-Compatible | Groq, Together, Ollama, vLLM, LiteLLM, OpenRouter, or any custom endpoint | Anthropic 除了支持 API 密钥外,还支持 OAuth 登录。浏览器 Agent (Magnitude) 使用单独的模型配置来执行 Agentic 浏览器任务。 ### 前端配置 由 `run.sh` 从 `frontend/.env.template` 生成。更改需要重新构建前端。 | 变量 | 描述 | 默认值 | |----------|-------------|---------| | `NEXT_PUBLIC_BACKEND_URI` | 后端服务器的 URL | `http://localhost:8080` | | `NEXT_PUBLIC_DEPLOYMENT` | 部署环境 | `LOCAL` |

系统架构

Pentest Copilot 采用基于 Docker 容器的微服务架构| 服务 | 端口(s) | 描述 | |---------|---------|-------------| | MongoDB | 27017 | 存储应用数据:用户数据、会话、工作空间信息 | | Redis | 6379 | 处理身份验证和工作空间数据,以便快速查询 | | Backend | 8080 | Node.js 应用程序,运行 API 和 socket 连接,用于与前端和 Kali 容器进行实时通信 | | Frontend | 3000 | 托管使用 Next.js 构建的用户界面 | | Kali | 4200, 1194/udp, 9020 | Kali Linux 容器,预装渗透测试工具,可通过 SSH、OpenVPN 和 noVNC 访问 | ### 数据目录 | 路径 | 用途 | |------|---------| | `config.toml` | 静态配置。绑定挂载到后端容器(只读)。 | | `backend/.env` | 动态配置(开发模式)。模型密钥、SSH 凭据、VNC、Burp、Magnitude。 | | `/srv/data/.env` | 动态配置。置入容器卷中。 | | `kali-data/` | 挂载到后端和 Kali 容器的共享主机目录。用于 VPN 配置文件和其他数据。 | | `ssh-keys/` | 由 `run.sh` 复制到此处的 SSH 私钥,并挂载到后端容器 |

系统要求

为了有效地运行 Pentest Copilot,您的主机应满足以下最低要求: - **RAM**: 8GB(以适应前端、后端、数据库和资源密集型的 Kali 容器) - **处理器**: 多核处理器(用于多个容器的流畅运行) - **磁盘空间**: 20GB(用于 Kali 容器和其他组件) - **Node.js**: 版本 22+(前端和后端均需要) - **pnpm**: 版本 9+(前端和后端的包管理器)

功能特性

| 功能 | 描述 | |---------|-------------| | AI 驱动的指导 | 利用 LLM 协助用户完成渗透测试的各个阶段。 | | 工作流支持 | 辅助侦察、枚举、漏洞识别、权限提升、数据提取和痕迹清理。 | | 自定义工具选择 | 用户在 Settings > Capabilities 选择首选的 CLI 工具。Copilot 使用这些工具生成命令。 | | Agent 工具 | 在 Settings > Agent Tools 切换单个 AI 工具(bash、Python、shells、Google 搜索、subagents、Burp Suite、浏览器 Agent)。 | | 集成终端 | 从工作空间页面直接访问 Kali 容器的终端以执行命令。 | | Exploit Box (Kali 容器) | Kali Linux 容器,预装工具(可通过 `./kali/tools.sh` 修改),可通过 SSH、OpenVPN 和 noVNC 访问。 | | VPN 集成 | 通过 UI 上传自定义 OpenVPN 配置文件并将 Kali 容器连接到 VPN。 | | 工作空间管理 | 创建和管理多个工作空间,每个工作空间具有隔离的会话。 | | Burp Suite 集成 | 通过 gRPC 连接到 Burp Suite。搜索代理历史记录,将请求发送到 Repeater 或 Intruder,使用 Collaborator。在 Settings > Burp 配置。 | | 浏览器 Agent | 通过 Magnitude 实现 Agentic 浏览器自动化,用于登录测试、表单交互和 DOM 提取。使用单独的模型。在 Settings > Browser Agent 配置。 | | VNC / GUI | 通过 noVNC 对 Kali 桌面进行图形化访问。手动模式(外部 VNC)或自动模式(在 exploit box 上配置 VNC)。在 Settings > GUI 配置。 | | Google 搜索 | 可选的 AI 网络搜索工具。需要 Google API 密钥和自定义搜索引擎 ID。 | ## 前端技术 前端基于 **Next.js** 构建,使用 App Router,利用 **服务端渲染** 和 **静态站点生成** 以提高性能。它通过 **REST API** 和 **WebSockets** 与后端集成以实现实时功能。 关键技术: - **Ant Design**: 可复用的 UI 组件,提供一致、响应式的界面 - **Redux Toolkit**: 管理复杂交互的应用程序状态 - **Zustand**: 轻量级全局状态(例如跨页面导航的 Agent 流) - **Xterm**: 用于访问 Kali 容器的浏览器内终端模拟 - **Sass**: 高级 SCSS 样式 - **React Query**: 数据获取、缓存以及与后端 API 的同步 核心路由: - `/login`, `/register`: 用户身份验证 - `/dashboard`: 工作空间创建和管理 - `/session/[session_id]`: AI 交互和渗透测试任务的主要界面 - `/session/[session_id]/gui`: 基于 VNC 的 Kali 容器图形化访问 - `/session/[session_id]/vpn`: 上传并连接自定义 OpenVPN 配置 - `/session/[session_id]/burp`: Burp 代理历史记录、请求检查、发送到 Repeater/Intruder 设置路由: - `/settings/models`: LLM 提供商和模型选择 - `/settings/agent-tools`: 切换 AI 工具(bash、Burp、浏览器等) - `/settings/capabilities`: CLI 工具偏好 - `/settings/ssh`: Exploit box SSH 配置 - `/settings/gui`: VNC 配置 - `/settings/burp`: Burp Suite RPC 连接 - `/settings/magnitude`: 浏览器 Agent (Magnitude) 配置 ## 后端技术 后端由 **Node.js (TypeScript)** 和 **Express.js** 驱动,提供 API 并编排渗透测试逻辑。它与 LLM 提供商(OpenAI、Anthropic、Google、Mistral、OpenAI 兼容)集成,管理数据库,并促进实时通信。 关键组件: - **WebSockets**: 用于实时终端交互的实时、双向通信 - **Server-Sent Events**: 将 Agent 输出流式传输到前端 - **LLM 集成**: 支持 OpenAI、Anthropic(包括 OAuth)、Google、Mistral 和 OpenAI 兼容提供商 - **MongoDB**: 用户数据、会话和应用程序状态的持久存储(默认端口:27017) - **Redis**: 用于会话管理和身份验证令牌的快速键值存储(默认端口:6379) - **Express.js**: API 框架 后端将所有逻辑通过中央服务路由(默认端口:8080),将用户输入连接到 AI 输出和 Kali 容器执行。

本地开发

### 使用开发者模式(推荐) 在本地开发最简单的方法是使用 `run.sh` 中内置的开发者模式: ``` bash run.sh dev ``` 这将在 Docker 中仅启动基础设施服务,同时您在主机上手动运行前端和后端。它会自动: - 在 `config.toml` 中将 `mongo_uri` 和 `redis_url` 设置为 `localhost` - 从模板创建 `backend/.env` 和 `frontend/.env` 然后在不同的终端中启动后端和前端: ``` # 终端 1:Backend TypeScript compiler (watch mode) cd backend pnpm run watch # 终端 2:Backend dev server cd backend pnpm run dev # 终端 3:Frontend dev server cd frontend pnpm run dev ``` 后端服务器将在 `http://localhost:8080` 启动,前端将在 `http://localhost:3000` 启动。 ### 手动设置 如果您更喜欢手动设置: #### 前置条件 - **Node.js 22+** - **pnpm 9+**(通过 `corepack enable` 安装,随 Node.js 22 捆绑) #### 配置 ``` cp config.toml.template config.toml # Edit: set mongo_uri/redis_url to localhost cp backend/.env.template backend/.env # Edit: add model API key, SSH details cp frontend/.env.template frontend/.env # Edit: set backend URL if needed ``` #### 后端 ``` cd backend pnpm install pnpm run watch # Terminal 1: TypeScript compiler in watch mode pnpm run dev # Terminal 2: Start dev server (after initial compilation) ``` #### 前端 ``` cd frontend pnpm install pnpm run dev # Starts Next.js dev server with Turbopack ``` ## 认识作者 - Dhruva Goyal - [dhruva@bugbase.ai](mailto:dhruva@bugbase.ai) | [LinkedIn](https://www.linkedin.com/in/dhruva-goyal/) | [Github](https://github.com/shero4) | [X/Twitter](https://x.com/dhruvagoyal) - Aditya Peela - [aditya@bugbase.ai](mailto:aditya@bugbase.ai) | [LinkedIn](https://www.linkedin.com/in/aditya-peela/) | [Github](https://github.com/adityamhn) | [Twitter](https://x.com/adityapeela) - Sitaraman Subramanian - [sitaraman@bugbase.ai](mailto:sitaraman@bugbase.ai) | [LinkedIn](https://www.linkedin.com/in/sitaraman-s/) | [Github](https://github.com/hackerbone) | [Twitter](https://x.com/situuu_ig) ## 引用 如果您在研究中使用 Pentest Copilot,请引用: ``` @article{goyal2024hacking, title={Hacking, the lazy way: LLM augmented pentesting}, author={Goyal, Dhruva and Subramanian, Sitaraman and Peela, Aditya}, journal={arXiv preprint arXiv:2409.09493}, year={2024} } ``` ## 贡献 我们欢迎对 Pentest Copilot 的贡献。请查阅我们的 [贡献指南](./CONTRIBUTING.md) 开始。同时,请确保遵守我们的 [行为准则](./CODE_OF_CONDUCT.md)。 ## 许可证 本项目采用 [MIT 许可证](./LICENSE) 授权。 ## 免责声明 Pentest Copilot 仅用于道德黑客和渗透测试。请始终确保您拥有测试任何目标系统的明确许可。
标签:AI助手, Bug Bounty, DLL 劫持, DNS枚举, Docker, MITM代理, TGT, TryHackMe, XXE攻击, 人工智能, 可自定义解析器, 命令行增强, 多语言支持, 大语言模型, 安全测试框架, 安全防御评估, 密码管理, 对称加密, 插件系统, 搜索引擎查询, 攻防演练, 浏览器扩展, 用户模式Hook绕过, 网络安全工具, 自动化审计, 自定义脚本, 请求拦截