面向安全测试人员的协作式 MITM 代理。
从统一界面捕获 HTTP 流量、使用 AI 为请求添加注解、运行 hunt 会话、重放流量并跟踪发现项。
快速开始 · 功能特性 · 截图 · 配置 · 安全 · 参与贡献
git clone https://github.com/synlace/ferret.git
cd ferret
cp .env.example .env # optional
just up
或者直接使用 Docker Compose:
docker compose up --build -d
| 服务 | URL |
|---|---|
| UI | http://localhost:3000 |
| API | http://localhost:8000 |
| 代理 | 127.0.0.1:1337 |
打开:
http://localhost:3000
首次运行的设置向导会要求你设置密码并选择 AI 提供商。
justFerret 是一个面向安全测试人员的 AI 辅助 HTTP 拦截代理。
将浏览器、CLI 工具或测试工作流指向:
127.0.0.1:1337
Ferret 捕获请求和响应,在本地存储,用 AI 为流量添加注解,并提供工具用于重放、修改、测试以及将有趣的行为转化为发现项。
它的设计目标是支持这样的工作流:你想要的不仅仅是被动代理,而是一个能帮助你在过程中思考、测试和记录的工具。

Hunts - AI 辅助的 hunt 会话,可搜索请求历史、编写并运行测试、创建发现项。

History - 完整的代理请求日志,包含 AI 注解、耗时、状态码以及内联的请求/响应编辑器。

Findings - 漏洞跟踪器,包含严重性、主机、类型、AI 生成的描述和证据片段。

Settings - 管理 CA 证书、密码、2FA、AI 提供商、API 密钥和代理状态。

设置向导 - 首次运行时创建密码并配置 AI 提供商。
将浏览器、CLI 工具或测试客户端配置为使用:
HTTP proxy: 127.0.0.1:1337
HTTPS proxy: 127.0.0.1:1337
对于 HTTPS 拦截,请从 Settings 页面下载并安装 mitmproxy CA 证书。
Ferret 在每次安装时都要求进行身份验证。
/login 登录。HttpOnly SameSite=Strict 会话 Cookie。可在 Settings 页面启用基于 TOTP 的 2FA。
启用后,登录时需要提供有效的验证器验证码。
在 .env 中设置静态 API 密钥:
FERRET_API_KEY=your-random-secret
然后将其用作 Bearer 令牌:
curl -H "Authorization: Bearer your-random-secret" \
http://localhost:8000/api/requests
会话 Cookie 和 Bearer 令牌会被独立检查。
将 .env.example 复制为 .env 以预配置 Ferret。
大多数 AI 提供商设置也可以在设置向导中配置。
提供商设置可在首次运行向导中完成。
just 命令Browser / tool
│
▼
127.0.0.1:1337
│
▼
ferret-api :8000 / :1337
FastAPI + mitmproxy + SQLite
│
├── docker exec
▼
ferret-lab
pytest, ffuf, sqlmap, scripts, tests, notes
│
▼
ferret-ui :3000
Next.js
所有持久化数据存储于:
${FERRET_DATA_DIR:-./data}
Ferret 使用绑定挂载,而不是命名 Docker 卷。
要清空本地状态并重新启动设置向导:
just reset
这会删除本地数据库,包括凭据。
你还可以在通过身份验证后通过 API 重置设置:
curl -X DELETE \
-H "Authorization: Bearer your-random-secret" \
http://localhost:8000/api/setup
如需热重载的本地 UI 开发:
just dev
这会在 Docker 中运行 API 和 lab 容器,同时通过 npm run dev 在宿主机上提供 UI。此模式要求宿主机安装 Node.js。
运行测试:
just test api # API unit tests (inside the running api container)
just test ui # Playwright UI tests (auto-starts Next.js dev server + mock API)
just test shim # docker-shim allow/block unit tests (no Docker needed)
just test all # run all three suites in sequence
Ferret 专为本地安全测试工作流而设计,并未针对公网暴露进行加固。
在将 Ferret 暴露到 localhost 之外之前,请了解以下内容:
| 风险 | 详情 |
|---|---|
| 代理流量 | 代理会捕获经过它的所有 HTTP/HTTPS 流量,包括凭据。 |
| API 暴露 | API 会暴露请求历史、发现项和工作区文件。 |
| Lab 执行 | lab 容器可以代表你执行测试工具。 |
| 凭据 | API 密钥和 AI 提供商凭据存储在本地,应视为机密。 |
请使用强密码,并在 Settings 页面启用 2FA。
请勿针对安全漏洞开启公开 issue。
完整披露政策和报告说明请参阅 .github/SECURITY.md。
修复可用后,过去的披露会在 security/ 中发布。
感谢以下研究人员负责任地披露安全问题:
| 研究人员 | 问题 | 年份 |
|---|---|---|
| Trent (@AzureADTrent) | DISC-2026-001 - 通过 SSRF + docker-socket-proxy 配置错误导致未认证 RCE | 2026 |
Ferret 正在积极开发中。
欢迎提供想法、bug 报告、功能请求和贡献。
想帮助构建它吗?
MIT - 请参阅 LICENSE。
| 功能 | 描述 |
|---|
| 拦截代理 | 通过 mitmproxy 捕获 HTTP 和 HTTPS 流量。 |
| 请求历史 | 浏览、筛选、检查和重放捕获的流量。 |
| AI 注解 | 为请求补充与安全相关的上下文。 |
| Hunts | 在捕获的流量中运行 AI 辅助的 hunt 会话。 |
| Findings | 按严重性、主机、类型、证据和状态跟踪漏洞。 |
| Snare | 在传输过程中拦截并修改请求或响应。 |
| Gnaw | 用于编辑和重新发送 HTTP 请求的 Repeater 风格标签页。 |
| Workspaces | 每个会话独立的 scripts/、tests/ 和 notes/ 目录。 |
| Projects | 隔离的请求历史、发现项、工作区和 API 密钥。 |
| 身份验证 | 密码登录、会话 Cookie、可选的 API 密钥访问和 TOTP 2FA。 |
| 本地优先存储 | 基于 SQLite 的数据存储于本地绑定挂载目录中。 |
| 变量 | 默认值 | 描述 |
|---|
FERRET_API_KEY | - | 用于以编程方式访问 API 的静态 Bearer 令牌 |
OPENROUTER_MODEL | google/gemini-3-flash-preview | 默认 OpenRouter 模型 |
PROXY_HOST | 0.0.0.0 | 代理绑定地址 |
PROXY_PORT | 1337 | 代理端口 |
UI_PORT | 3000 | UI 端口 |
FERRET_DATA_DIR | ./data | 持久化数据目录 |
NEXT_PUBLIC_API_URL | http://localhost:8000 | 浏览器使用的 API URL |
NEXT_PUBLIC_SIGINT_URL | - | 可选的 SIGINT/新闻源 JSON URL |
| 提供商 | 类型 |
|---|
| OpenRouter | 云 - 统一 API,支持众多模型 |
| OpenAI | 云 - GPT-4o、o1 等 |
| Anthropic | 云 - Claude 模型 |
| Gemini | 云 - Google Gemini 模型 |
| DeepSeek | 云 - DeepSeek 模型 |
| Mistral | 云 - Mistral 模型 |
| Ollama | 本地 - 在你自己的机器上运行模型 |
| LM Studio | 本地 - 在你自己的机器上运行模型 |
| 命令 | 描述 |
|---|
just up | 从 GHCR 拉取预构建镜像并启动所有服务 |
just down | 停止所有服务 |
just dev | 在 Docker 中运行 API/lab,并在宿主机上热重载 UI(需要 Node.js) |
just logs | 跟踪服务日志 |
just test api | 运行 API 单元测试(在正在运行的 api 容器内) |
just test ui | 运行 Playwright UI 测试 |
just test shim | 运行 docker-shim 允许/阻止单元测试(无需 Docker) |
just test all | 按顺序运行所有测试套件 |
just reset | 清空本地数据库 |
just shell | 在 lab 容器中打开 shell |