Secphish 是一款功能强大的钓鱼邮件模拟演练平台,帮助企业从人员安全意识、 技术防护能力等多个维度评估和提升整体安全水平。
全方位钓鱼演练解决方案,助力企业安全建设
支持自定义邮件模板与登录页,模拟真实钓鱼场景,支持多种钓鱼手法组合。
完整的演练数据看板,实时追踪邮件发送、打开、点击、提交等关键指标。
集成 AI 对话能力,智能生成钓鱼邮件内容,提供演练报告分析与建议。
支持按部门、组织架构导入目标成员,批量管理演练对象与分组。
演练结束后自动生成多维度报告,直观展示安全薄弱环节与改进建议。
支持多用户权限管理、WebAuthn 通行密钥认证、操作日志审计。
更加安全、高并发、服务分离的现代化企业级钓鱼测试平台
SecPhish 是在 Gophish 基础上深度定制的企业级钓鱼测试平台,采用服务分离架构,由多个独立服务协作完成从管理、发件、追踪到分析的全流程。
┌─────────────────────────────────────────────────────────────────────┐
│ secphish (管理后台) │
│ 端口 3333 │ Go Web UI + REST API │ MySQL CRUD │ Webhook │ AI Chat │
└──────────────────────┬──────────────────────────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌──────────────┐ ┌────────────┐ ┌───────────────┐
│ listener │ │ listener- │ │ smtpd (内置 │
│ (事件监听) │ │ api (API) │ │ SMTP 服务器) │
│ 端口 8080 │ │ 端口 8082 │ │ 端口 25/465/587│
└──────────────┘ └────────────┘ └───────────────┘
▲
│
┌────────┴────────┐ ┌─────────────────────┐
│ Cloudflare │ │ MailPlatform │
│ Worker (边缘节点)│ │ Redis + Python Worker│
│ 追踪/页面/提交 │ │ 异步高并发发信 │
└─────────────────┘ └─────────────────────┘
┌─────────────────────────────────────────────┐
│ ransom_simulator_listener │
│ 勒索软件模拟器打包与监听服务 │
│ 端口 8081 │
└─────────────────────────────────────────────┘
| 组件 | 目录 | 功能 |
|---|---|---|
| secphish | secphish/ | 管理后台(Web UI + REST API),活动创建/管理/监控、用户管理、配置管理 |
| listener | listener/ | 事件监听服务,处理追踪像素打开、链接点击、表单提交等钓鱼事件 |
| listener-api | listener-api/ | Listener 的 API 代理层,提供事件写入接口 |
| smtpd | 集成于 secphish | 内置 SMTP 服务器,支持 DKIM 签名、MX 自动投递、多端口监听 |
| MailPlatform | mailplatform/ | 基于 Redis 队列的高并发异步发信系统,Python Worker + Postfix |
| ransom_simulator_listener | ransom_simulator_listener/ | 勒索软件模拟器打包与回调监听服务 |
| Cloudflare Worker | worker/ | 边缘节点追踪/页面托管/表单转发 |
| mail-qps-test | mail-qps-test/ | 临时邮箱系统(Cloudflare Workers + D1) |
| qrcode | qrcode/ | 二维码生成 API(Cloudflare Workers) |
| 依赖 | 版本要求 | 说明 |
|---|---|---|
| Go | 1.21+ | 所有 Go 服务编译运行 |
| MySQL | 5.7+ | 主数据库(必须使用 utf8mb4 字符集) |
| Redis | 6.x+ | 仅 MailPlatform 异步发信时需要 |
| Node.js | 18+ | 前端资源构建 |
| Python | 3.8+ | 仅 MailPlatform Worker 需要 |
| Docker | 可选 | 一键部署 |
CREATE DATABASE IF NOT EXISTS `secphish` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'secphish'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON `secphish`.* TO 'secphish'@'%';
FLUSH PRIVILEGES;
项目使用 Go Workspace 管理多模块,根目录的 go.work 统一管理所有子模块。
# 从项目根目录启动 secphish 管理后台
cd secphish
go run secphish.go --config=config.json
# 启动 listener 事件监听(另一个终端)
cd listener
go run main.go --config=config.json
# 启动 listener-api API 代理(另一个终端)
cd listener-api
go run main.go --config=config.json
cd secphish
# 安装依赖
npm install
# 或
yarn install
# 构建前端资源
gulp
# 开发模式(监听文件变化)
gulp watch
参见 mailplatform/docker-compose.yml(MailPlatform 全套件):
cd mailplatform
docker-compose up -d
cd secphish
go build -o secphish .
./secphish --config=config.json
# 交叉编译(Windows + Linux)
GOOS=linux GOARCH=amd64 go build -o secphish-linux .
GOOS=windows GOARCH=amd64 go build -o secphish.exe .
{
"admin_server": {
"listen_url": "0.0.0.0:3333", // 管理后台监听地址
"use_tls": false, // 是否启用 HTTPS
"cert_path": "gophish_admin.crt", // TLS 证书路径
"key_path": "gophish_admin.key", // TLS 私钥路径
"allowed_internal_hosts": [], // 允许的内部主机(用于导入站点)
"trusted_origins": [], // 受信任的来源(CORS)
"rp_id": "" // WebAuthn Relying Party ID
},
"phish_server": {
"listen_url": "0.0.0.0:80", // 钓鱼服务器监听地址(弃用,保留兼容)
"use_tls": false,
"cert_path": "",
"key_path": ""
},
"db_name": "mysql", // 数据库类型(目前仅支持 mysql)
"db_path": "user:pass@tcp(host:3306)/db?charset=utf8mb4&parseTime=True&loc=UTC",
"db_sslca_path": "", // 数据库 SSL CA 证书路径(可选)
"migrations_prefix": "db/db_", // 数据库迁移文件前缀
"contact_address": "", // 透明度反馈联系邮箱
"logging": {
"filename": "", // 日志文件路径(空=标准输出)
"level": "" // 日志级别:info / warn / error / debug
}
}
| 环境变量 | 覆盖配置项 | 说明 |
|---|---|---|
SECPHISH_LISTEN_URL | admin_server.listen_url | 管理后台监听地址 |
SECPHISH_USE_TLS | admin_server.use_tls | 启用 TLS |
SECPHISH_CERT_PATH | admin_server.cert_path | TLS 证书路径 |
SECPHISH_KEY_PATH | admin_server.key_path | TLS 私钥路径 |
DB_USER / DB_PASSWORD / DB_HOST / DB_DATABASE | db_path | 数据库连接信息覆盖 |
CONTACT_ADDRESS | contact_address | 联系邮箱 |
MAILPLATFORM_ENABLED | mailplatform.enabled | 启用 MailPlatform 异步发信 |
MAILPLATFORM_REDIS_ADDR | mailplatform.redis_addr | Redis 地址 |
MAILPLATFORM_REDIS_PASSWORD | mailplatform.redis_password | Redis 密码 |
在 secphish/config.json 中增加以下配置以启用 MailPlatform 异步发信:
{
"mailplatform": {
"enabled": true,
"redis_addr": "127.0.0.1:6379",
"password": "",
"redis_db": 0,
"queue_key": "mail_send_queue"
}
}
管理员后台(secphish Web UI)提供完整的图形化操作界面,默认访问地址 http://your-server:3333,首次启动自动创建管理员账号(默认凭据见启动日志)。以下按导航菜单顺序对各功能模块进行说明。
访问路径: /
仪表盘展示全局统计概览,数据实时读取数据库:
访问路径: /groups
目标组用于将收件人按部门、项目或任意维度分组管理。
创建目标组:
批量导入目标:
Email,FirstName,LastName,Position,Organization
zhangsan@company.com,张三,,工程师,公司A
lisi@company.com,李四,,经理,公司A
其他功能:
访问路径: /targets
提供全局视角查看和管理所有目标成员。
访问路径: /templates
邮件模板支持 HTML 富文本 和 纯文本 (Plain Text) 两种格式,可在模板中注入变量实现个性化。
创建模板:
🔐 账户安全验证通知)| 编辑器模式 | 说明 |
|---|---|
| 富文本编辑器(wangEditor) | 可视化编辑,支持 {{.变量}} 自动补全 |
| 代码编辑器(Monaco) | 语法高亮,HTML/JS/JSON 编辑,主题切换 |
导入 EML 文件:
.eml 格式邮件文件{{.URL}} 变量)模板操作:预览、复制、删除。
访问路径: /pages
钓鱼页面是目标点击链接后看到的 HTML 页面。
创建页面:
redirect_url — 提交表单后跳转的目标地址(建议设为真实官网)capture_credentials — 捕获用户提交的输入数据capture_passwords — 捕获密码字段(需配合表单 type=password)克隆已有网站:
https://login.office.com)建议: 克隆后的页面可能需要手动调整图片、CSS 等静态资源的引用路径。也可以使用 "Clone Site" 功能复制现有页面进行修改。
访问路径: /smtp
管理用于发送钓鱼邮件的外部 SMTP 服务器配置。
创建发信配置:
| 接口类型 | 默认端口 | 加密方式 | 适用场景 |
|---|---|---|---|
| SMTP | 25 | 无(明文) | 内部邮件服务器、开发测试 |
| STARTTLS | 587 | 升级式 TLS | 大多数邮件服务商 |
| SSL | 465 | 隐式 SSL/TLS | QQ 邮箱企业版等 |
| MQ | — | 消息队列 | 发信配置级多节点消息队列异步发送 |
安全中心 )MQ 模式说明:当接口类型选择 MQ 时,系统使用发信配置级消息队列模式:创建发信配置时选择接口类型为 mq,系统自动为该配置关联 Redis 节点,发信时遍历该配置关联的所有 MQ 节点,为每封邮件生成完整 MIME 消息并序列化,推送至每个节点的 Redis 队列。
测试连接:创建后可在列表页点击 "Send Test Email" 验证配置是否正确,点击 "Copy" 可复制现有配置快速创建新配置。
访问路径: 管理后台 → Mail Domains
管理发信域名,系统会自动生成 DKIM 密钥对和 DNS 记录建议。
添加域名:
phish.company.com)推荐的 DNS 记录:
; SPF 记录 — 授权发信服务器
phish.company.com. IN TXT "v=spf1 mx include:_spf.phish.company.com ~all"
; DKIM 记录 — 邮件签名验证
default._domainkey.phish.company.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."
; DMARC 记录 — 邮件认证策略
_dmarc.phish.company.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@phish.company.com"
访问路径: 管理后台 → Mail Accounts(在域名详情页中管理)
管理发信域名下的邮箱账号,用于 SMTP 认证和发件人地址设置。
添加邮箱账号:进入域名详情页 → 点击 "Add Account" → 输入邮箱地址和显示名称 → 设置 SMTP 认证密码。
访问路径: 管理后台 → SMTP Servers
内置 SMTP 服务器集成在 secphish 中,无需外部 MTA 即可直接投递。
配置步骤:
0.0.0.0:25),关联已配置的域名/api/smtp_servers/{id}/start)| 特性 | 说明 |
|---|---|
| 多端口监听 | 25(明文)/ 465(隐式 TLS)/ 587(STARTTLS) |
| DKIM 签名 | 从域名配置读取 DKIM 私钥,自动签名 |
| MX 自动投递 | net.LookupMX() 查询目标域名 MX 记录 |
| 备用 MX 故障转移 | 按 MX 优先级排序,依次尝试 |
| STARTTLS | 自动检测对端 SMTP 服务器 STARTTLS 支持 |
访问路径: /imap
配置 IMAP 收件箱监控,用于自动检测退信和被举报的邮件。
创建收件配置:
作用: secphish 后台 IMAP Monitor 协程会定期轮询这些收件箱,自动将被退信的目标标记为 "Error Sending",将被举报标记为 "Email Reported"。
访问路径: /webhooks(需要 ModifySystem 权限)
配置 Webhook 将事件实时推送到第三方系统(如 SIEM、SOAR、即时通讯机器人)。
创建 Webhook:
campaign(活动状态变更)、result(目标行为更新)验证端点:在列表页点击 "Validate" 发送测试事件验证回调地址是否可达,系统发送测试 Webhook,回调端可验证 X-SecPhish-Signature Header。
访问路径: /users(需要 ModifySystem 权限)
管理平台的用户账号和权限。
| 角色 | 权限范围 | 说明 |
|---|---|---|
| admin | 全部权限 | 系统管理员,可执行所有操作 |
| user | 管理自己的活动 | 普通用户,可创建和管理自己的活动与目标组 |
权限说明:
view_only 权限的用户,只能查看仪表盘和活动结果,不可修改任何配置访问路径: /models(仅 admin 角色可见)
统一管理钓鱼邮件生成所需的 AI 模型(如 DeepSeek、GPT 等),API Key 加密存储。
创建 AI 模型:
deepseek-chat)deepseek、openai、custom)https://api.deepseek.com/v1/chat/completions)安全说明:API Key 在存入数据库前使用 AES-256-GCM 加密,前端仅展示掩码(sk-****...****ab12),有效防止密钥泄露。
访问路径: /ai_chat
基于 AI 模型的智能对话助手,专为钓鱼测试场景设计。
主要功能:
使用场景:辅助编写钓鱼邮件模板、分析活动结果数据、生成目标话术和诱饵文案、解释钓鱼测试报告。
访问路径: /settings
访问路径: /reset_password
首次登录或管理员强制要求修改密码时自动跳转至此页面。
访问路径: /login → "Create a passkey"
SecPhish 支持 FIDO2 WebAuthn 通行密钥认证,提供比密码更强的防钓鱼身份验证。
配置步骤:
| 特性 | 说明 |
|---|---|
| 无密码登录 | 通过生物识别或硬件密钥验证身份 |
| 防钓鱼 | WebAuthn 绑定站点 Origin,无法在其他站点冒用 |
| 多密钥支持 | 一个账号可绑定多个通行密钥 |
| 自动注册 | 登录时自动检测浏览器 WebAuthn 支持 |
登录流程: 访问 /login 页面 → 输入用户名和密码 → 点击 "Create a passkey" → 浏览器弹出创建提示 → 验证生物特征或插入硬件密钥 → 密钥创建完成。
访问路径: /targets → 点击目标成员的 "Profile" 按钮
成员画像功能提供单个目标的完整安全行为分析,综合评估其安全意识水平。
画像包含内容:
| 板块 | 说明 |
|---|---|
| 基本信息 | 邮箱、姓名、职位、所属组织 |
| 所属群组 | 该成员所属的所有活动目标组列表 |
| 行为统计 | 打开邮件数、点击链接数、附件下载数、提交数据数、举报反馈数 |
| 安全意识评分 | 基于行为的 0-10 分量化评分 |
| 安全等级 | 优 / 良 / 差 / 极差 / 主机失陷 五个等级 |
| 参与活动 | 该成员参与过的所有活动列表及每个活动的达成状态 |
评分规则:
| 行为 | 分值影响 | 说明 |
|---|---|---|
| 基础分 | 10 分 | 满分起始 |
| 举报回信 | +1 分 | 安全意识好的表现 |
| 邮件打开 | -1 分 | 存在钓鱼邮件打开行为 |
| 访问链接 | -2 分 | 存在钓鱼链接点击行为 |
| 下载附件 | -3 分 | 存在附件下载行为 |
| 提交数据 | -3 分 | 存在表单提交行为 |
| 同一活动同时下载+提交 | -7 分 | 组合惩罚,两个高危行为同时出现 |
等级划分:
| 分数范围 | 等级 | 含义 |
|---|---|---|
| 9 - 10 | 优 | 安全意识良好 |
| 6 - 8 | 良 | 有一定安全意识 |
| 3 - 5 | 差 | 安全意识不足 |
| 1 - 2 | 极差 | 安全意识严重缺乏 |
| 0 | 主机失陷 | 高危行为全部触发 |
提示: 成员画像数据通过 REST API /api/targets/{id}/profile 获取,支持集成到外部安全评分系统。
访问路径: /reports
报表功能支持将活动结果的统计分析以精美 HTML 文档形式导出和归档。
生成报表:
管理报表:查看、下载为独立 HTML 文件、多选批量删除。
访问路径: 管理后台 → Secret Scan 页面
内置秘密扫描功能,支持对多个 Git 仓库或本地目录进行敏感信息检测。
配置扫描目标:
执行扫描与结果:配置保存后自动触发扫描,扫描结果展示检测到的敏感信息(文件路径、密钥/凭据类型、提交记录、扫描状态),支持重新扫描。
作用: 帮助安全团队发现可能在 Git 仓库中泄露的 API Key、密码、证书等敏感信息。
访问路径: 管理后台 → Config 页面(仅 admin 角色可见,需要 ModifySystem 权限)
集中管理系统全局配置参数,无需手动编辑 config.json 文件。
| 参数 | 类型 | 说明 |
|---|---|---|
admin_server.listen_url | string | 管理后台监听地址 |
admin_server.use_tls | bool | 是否启用 HTTPS |
admin_server.cert_path | string | TLS 证书路径 |
admin_server.key_path | string | TLS 私钥路径 |
db_name | string | 数据库类型 |
db_path | string | 数据库连接 DSN |
contact_address | string | 联系邮箱地址 |
logging.filename | string | 日志文件路径 |
logging.level | string | 日志级别 |
操作方式:进入 Config 配置页面 → 修改需要变更的配置项 → 点击 "Save" 保存 → 重启 secphish 服务使配置生效。
| 接口类型 | 默认端口 | 加密方式 | 适用场景 |
|---|---|---|---|
| SMTP | 25 | 无(明文) | 内部邮件服务器、开发测试环境 |
| STARTTLS | 587 | 升级式 TLS | 大多数邮件服务商(Gmail/Outlook/QQ) |
| SSL | 465 | 隐式 SSL/TLS | 部分邮件服务商(如 QQ 邮箱企业版) |
| MQ | — | 消息队列 | 发信配置级多节点异步发送 |
| 服务商 | 接口类型 | 服务器地址 | 端口 | 说明 |
|---|---|---|---|---|
| Gmail | STARTTLS | smtp.gmail.com | 587 | 需开启 "App Passwords" |
| Outlook / Office 365 | STARTTLS | smtp.office365.com | 587 | 需应用密码或 OAuth |
| QQ 邮箱 | SSL | smtp.qq.com | 465 | 需开启 SMTP 服务并使用授权码 |
| 阿里云企业邮 | STARTTLS | smtp.mxhichina.com | 587 | 企业邮箱 SMTP |
| 自建 Postfix | STARTTLS | 服务器 IP | 587 | 自建邮件服务器 |
内置 SMTP 服务器集成在 secphish 中,无需外部 MTA 即可直接投递。
配置步骤:
0.0.0.0:25),关联已配置的域名优势: 内置 DKIM 签名、MX 自动投递、备用 MX 故障转移、STARTTLS 加密。
基于 Redis 队列的高并发发信方案。
架构组件:
配置步骤:
docker run -d -p 6379:6379 redis:alpine)config.json 中启用 MailPlatform# config.json 中启用 MailPlatform
{
"mailplatform": {
"enabled": true,
"redis_addr": "127.0.0.1:6379",
"password": "",
"redis_db": 0,
"queue_key": "mail_send_queue"
}
}
# 启动 Python Worker
cd mailplatform/worker
pip install -r requirements.txt
export MAILPLATFORM_REDIS_HOST=localhost
export MAILPLATFORM_SMTP_MODE=starttls
export MAILPLATFORM_SMTP_HOST=127.0.0.1
export MAILPLATFORM_SMTP_PORT=587
python send_worker.py
IMAP 收件箱监控用于自动检测两种关键事件:
| 事件 | 检测方式 | 自动处理 |
|---|---|---|
| 退信 (Bounce) | 检测发往已知目标的退信邮件 | 将 Result.Status 更新为 "Error Sending" |
| 举报 (Report) | 检测用户举报邮件 | 将 Result.Status 更新为 "Email Reported" |
| 服务商 | 服务器地址 | 端口 | 加密 | 说明 |
|---|---|---|---|---|
| Gmail | imap.gmail.com | 993 | SSL | 需开启 IMAP 访问和 App Passwords |
| Outlook | outlook.office365.com | 993 | SSL | 需应用密码 |
| QQ 邮箱 | imap.qq.com | 993 | SSL | 需开启 IMAP 服务并使用授权码 |
| 自建邮箱 | 服务器 IP | 993 | SSL | 自建 Dovecot 等 IMAP 服务器 |
在管理后台验证 IMAP 连接:
method='post',提交至当前页面路径(action="" 或省略) 标签的内容(除 type=submit、type=image、type=button 外)均会被捕获type=password 的字段需同时开启 capture_passwords 选项{{.RId}} 变量到隐藏字段,确保表单提交时携带 rid示例表单:
/css/style.css)可能需要改为绝对路径redirect_urlhttps://www.office.com)| 状态 | 说明 |
|---|---|
| Draft | 活动已创建,尚未发送邮件。可编辑所有配置 |
| In Progress | 活动已启动,邮件正在发送或已发送完毕。不可编辑配置 |
| Emails Sent | 所有邮件投递完成,正在等待目标交互事件 |
| Completed | 活动已结束(手动完成或到达 send_by_date),不再接收新事件 |
前置准备(按此顺序逐一完成):
/groups → 添加目标成员/templates → 编写邮件内容与附件/pages → 设计钓鱼表单并配置重定向/smtp → 添加 SMTP 配置(或使用内置 SMTP / MailPlatform)创建活动:
/campaigns,点击 "New Campaign"Launch Date)和活动截止时间(Send By Date)访问路径: /campaigns
Launch Date 设为当前时间,保存后立即发送Launch Date,系统到时间自动发送Email,Name,Position,Organization,Status,IP,Latitude,Longitude,Send Date,Latest Event,Campaign Name
zhangsan@company.com,张三,工程师,公司A,Clicked Link,203.0.113.5,39.9042,116.4074,2026-06-25T14:00:05Z,2026-06-25T14:05:12Z,2026-06 安全演练
| 状态 | 图标 | 含义 | 触发条件 |
|---|---|---|---|
| Sent | 📤 | 邮件已发送成功 | 邮件被 SMTP 服务器受理 |
| Email Opened | 👁️ | 邮件已被打开 | 用户加载了邮件中的追踪像素图片 |
| Clicked Link | 🔗 | 链接已被点击 | 用户访问了钓鱼链接 |
| Submitted Data | 📝 | 表单数据已被提交 | 用户在钓鱼页面提交了表单 |
| Error Sending | ❌ | 邮件发送失败 | SMTP 服务器退信、地址不存在等 |
| Email Reported | 🚨 | 邮件被举报 | 用户通过举报渠道标记了该邮件 |
在活动结果页的 Summary 面板中查看关键指标:
| 指标 | 计算方式 | 说明 |
|---|---|---|
| Total | 目标总数 | 该活动关联的所有目标成员数量 |
| Sent | 成功发送数 | 占 Total 的百分比反映投递成功率 |
| Opened | 打开邮件数 | 占 Sent 的百分比反映邮件吸引力 |
| Clicked | 点击链接数 | 占 Opened 的百分比反映钓鱼诱导效果 |
| Submitted Data | 提交表单数 | 占 Clicked 的百分比反映表单可信度 |
| Error | 发送失败数 | 占 Total 的百分比反映地址质量 |
典型行业基准值:打开率 20-30% / 点击率 30-50% / 提交率 40-60%
| 变量 | 属性 | 说明 |
|---|---|---|
{{.From}} | 发件人 | 发件人显示名称 |
{{.URL}} | 钓鱼链接 | 完整钓鱼链接,自动追加收件人 rid 参数 |
{{.Tracker}} | 邮件追踪 | 标签形式的追踪像素 |
{{.TrackingURL}} | 追踪 URL | 追踪像素的完整 URL 地址 |
{{.RId}} | 收件人 ID | 每个收件人的唯一随机标识符(7位字母数字) |
{{.BaseURL}} | 基础 URL | 去除路径和查询参数后的基础 URL |
{{.QrCode}} | 二维码 | 包含钓鱼链接的二维码 PNG 图片,以 Base64 Data URI 格式嵌入 |
| 变量 | 属性 | 说明 |
|---|---|---|
{{.Email}} | 邮箱 | 收件人邮箱地址 |
{{.Name}} | 姓名 | 收件人姓名 |
{{.Position}} | 职位 | 收件人职位 |
{{.Organization}} | 组织/公司 | 收件人所属组织名称 |
支持的文件类型:
.txt)— 直接替换 {{.xxx}} 变量.html)— 替换标签中的变量.ics)— 替换 DESCRIPTION/LOCATION 中的变量.docx/.xlsx/.pptx)— 自动解压 ZIP,替换内部 XML 中的变量变量使用建议:
| 场景 | 推荐使用的变量 |
|---|---|
| 附件内容个性化 | {{.Name}}、{{.Position}}、{{.Email}} |
| 嵌入钓鱼链接 | {{.URL}} |
| 嵌入追踪像素/链接 | {{.Tracker}}、{{.TrackingURL}} |
| 构建自定义追踪链接 | {{.BaseURL}} + 自定义路径 + ?rid={{.RId}} |
| 发件人伪装 | {{.From}} |
| 职位信息 | {{.Position}} |

配置文件: worker/index.js
关键配置项:
// 修改 API_BASE 指向你的 Listener/Listener-API 服务地址
const API_BASE = 'https://listener.your-domain.com';
功能路由:
| 路由 | 方法 | 功能 |
|---|---|---|
/track?rid=xxx | GET | 返回 1x1 透明追踪像素,异步调用 POST /api/track |
/?rid=xxx | GET | 返回钓鱼页面 HTML,异步调用 POST /api/click |
/ | POST | 转发表单提交数据到 POST /api/submit |
RID 校验机制:
404.html 和 emailTips.html 自定义提示页面部署步骤:
worker/index.js 代码粘贴并保存发布API_BASE 指向你的 listener/listener-api 服务地址404.html 和 emailTips.html 静态页面配置文件: mail-qps-test/_worker.js
基于 Cloudflare Workers + D1 数据库构建的无服务器临时邮箱系统,支持零依赖 MIME 解析、现代化三栏式 Web UI。
部署步骤:
readme.md 中的 SQL 建表语句mail-qps-test/_worker.js 代码粘贴并发布AUTH_TOKEN 环境变量,绑定 D1 数据库(变量名称 DB)配置文件: qrcode/_worker.js
基于 Cloudflare Workers 的二维码生成服务,支持 7 种样式和中心 Logo,响应缓存 7 天。
Web UI:https://your-worker-domain.com/
REST API 调用方式:
GET https://your-worker-domain.com/qr?text=hello&style=0&cellSize=10&margin=2&errorCorrectionLevel=H
参数说明:
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
text | ✅ | — | 二维码内容文本 |
style | ❌ | 0 | 样式 0-6(标准/液态/圆点/圆角/菱形/胶囊/三角) |
cellSize | ❌ | 8 | 单元格大小(像素) |
margin | ❌ | 2 | 边距(单元格数) |
errorCorrectionLevel | ❌ | M | 容错级别 L/M/Q/H |
logo | ❌ | — | 中心 Logo 图片 URL |
部署步骤:
qrcode/_worker.js 代码粘贴并保存发布https://your-domain.com/qr?text=xxx 调用ransom_simulator_listener 是基于 Go 语言构建的勒索软件模拟器打包与监听服务,与 secphish 平台深度集成。
/?rid=xxx 进入打包页面,记录 "Clicked Link" 事件POST /api/fetch-keys 调用远程 API 获取 UUID + RSA 公/私钥对POST /api/pack 自动获取密钥、注入回调地址、编译 Windows EXE┌──────────────────────────────────────────────────────────────────────┐
│ Ransom Simulator Listener │
│ HTTP 服务 (端口 8081) │
│ ┌──────────┐ ┌──────────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ GET / │ │ POST /api/ │ │ POST / │ │ POST /api/ │ │
│ │ 页面渲染 │ │ fetch-keys │ │ api/pack │ │ submit │ │
│ └──────────┘ └──────────────┘ └──────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ 远程密钥 API │ │ Go 编译器 │ │ MySQL 数据库 │
│ (encrypt. │ │ (cross-compile │ │ (secphish 共享) │
│ yangzifun │ │ → Windows/amd64)│ │ 事件记录 │
│ .org) │ └──────────────────┘ └──────────────────┘
└──────────────┘
工作流程:
GET /?rid=xxx 渲染打包页面,记录 "Clicked Link"POST /api/fetch-keys?rid=xxx 调用远程 API 获取 UUID + RSA 密钥对POST /api/pack 自动获取密钥、注入回调地址,编译生成 EXEPOST /api/submit,记录 "Submitted Data"配置文件: ransom_simulator_listener/config.json
{
"phish_server": {
"listen_url": "0.0.0.0:8081",
"use_tls": false,
"cert_path": "",
"key_path": ""
},
"db_name": "mysql",
"db_path": "user:pass@tcp(host:3306)/db?charset=utf8&parseTime=True&loc=UTC",
"contact_address": "",
"logging": {
"filename": "",
"level": ""
}
}
| 键名 | 类型 | 说明 |
|---|---|---|
phish_server.listen_url | string | 监听地址(默认 0.0.0.0:8081) |
db_path | string | 数据库 DSN(必须与 secphish 连接同一个数据库) |
contact_address | string | 透明度反馈联系邮箱 |
环境变量覆盖:
| 环境变量 | 覆盖配置项 | 说明 |
|---|---|---|
PHISH_LISTEN_URL | phish_server.listen_url | 监听地址 |
DB_USER / DB_PASSWORD / DB_HOST / DB_DATABASE | db_path | 数据库连接信息 |
REMOTE_API_URL | 控制器中的 RemoteAPIURL | 远程密钥 API 地址 |
CALLBACK_HOST | 控制器中的 CallbackHost | 嵌入 EXE 的回调地址 |
| 端点 | 方法 | 功能 | 事件记录 |
|---|---|---|---|
GET /?rid=xxx | GET | 渲染打包页面 | Clicked Link |
POST /api/fetch-keys | POST | 获取 UUID + RSA 密钥对 | — |
POST /api/pack | POST | 编译生成 EXE 文件 | File Download |
POST /api/submit | POST | EXE 回调 | Submitted Data |
GET /health | GET | 健康检查 | — |
cd ransom_simulator_listener
# 使用 Go Workspace 运行
go run main.go
# 编译运行
go build -o ransom_simulator_listener .
./ransom_simulator_listener
# 指定配置文件
./ransom_simulator_listener --config=/path/to/config.json
前提条件:Go 1.21+、MySQL 数据库(与 secphish 共享)、Go 编译器需支持 GOOS=windows GOARCH=amd64 交叉编译。
SecPhish 提供完整的 REST API,支持通过编程方式管理活动、模板、页面、发信配置等所有资源。
所有 API 请求需在 HTTP Header 中携带 API Key:
Authorization: Bearer
API Key 可在管理后台 /settings 页面查看和重置,或在用户管理中查看。
http://your-server:3333/api
| 实际方法 | 请求方式 | 示例 |
|---|---|---|
| GET | GET /api/resource | 查询资源列表 |
| POST | POST /api/resource | 创建资源 |
| PUT | POST /api/resource/{id}?_method=PUT | 更新资源 |
| DELETE | POST /api/resource/{id}?_method=DELETE | 删除资源 |
注意: 由于中间件限制,PUT 和 DELETE 方法通过 ?_method 查询参数模拟。
| 权限 | 说明 | 对应 API |
|---|---|---|
| 普通权限 | 管理自身资源 | 活动、模板、页面、组、发信、收件配置 |
ModifySystem | 系统管理 | Webhook、AI 模型、用户管理、AI 对话 |
| 分类 | 端点 | 方法 | 说明 |
|---|---|---|---|
| 活动 | /api/campaigns/ | GET/POST | 活动 CRUD |
/api/campaigns/{id} | GET/POST | 活动详情/更新/删除 | |
/api/campaigns/{id}/results | GET | 活动结果列表 | |
/api/campaigns/{id}/complete | POST | 完成活动 | |
/api/campaigns/{id}/timeline | GET | 活动时间线 | |
/api/campaigns/{id}/summary | GET | 活动摘要 | |
/api/campaigns/summary | GET | 所有活动摘要 | |
/api/campaigns/dailystats | GET | 每日统计 | |
/api/campaigns/export | POST | 批量导出 | |
| 目标组 | /api/groups/ | GET/POST | 组 CRUD |
/api/groups/{id} | GET/POST | 组详情/更新/删除 | |
/api/groups/summary | GET | 组摘要列表 | |
/api/groups/{id}/summary | GET | 单个组摘要 | |
/api/groups/search?q= | GET | 搜索组 | |
| 目标成员 | /api/targets/ | GET | 分页查询成员 |
/api/targets/{id} | GET | 单个成员详情 | |
/api/targets/{id}/profile | GET | 成员安全画像 | |
/api/targets/search?q= | GET | 搜索成员 | |
/api/targets/bulk_add | POST | 批量添加 | |
/api/targets/create_group | POST | 从选中成员创建组 | |
/api/targets/add_to_group | POST | 添加到已有组 | |
| 模板 | /api/templates/ | GET/POST | 模板 CRUD |
/api/templates/{id} | GET/POST | 模板详情/更新/删除 | |
| 页面 | /api/pages/ | GET/POST | 页面 CRUD |
/api/pages/{id} | GET/POST | 页面详情/更新/删除 | |
| 发信 | /api/smtp/ | GET/POST | SMTP CRUD |
/api/smtp/{id} | GET/POST | 配置详情/更新/删除 | |
| 收件 | /api/imap/ | GET/POST | IMAP CRUD |
/api/imap/{id} | GET/POST | 配置详情/更新/删除 | |
/api/imap/validate | POST | 连接验证 | |
| Webhook | /api/webhooks/ | GET/POST | Webhook CRUD |
/api/webhooks/{id} | GET/POST | 详情/更新/删除 | |
/api/webhooks/{id}/validate | POST | 连通性验证 | |
| AI模型 | /api/models/ | GET/POST | 模型 CRUD |
/api/models/{id} | GET/POST | 模型详情/更新/删除 | |
| AI对话 | /api/chat/send | POST | 发送消息(SSE) |
/api/chat/upload | POST | 上传文件 | |
/api/chat/history | GET | 获取历史 | |
/api/chat/history?_method=DELETE | POST | 清空历史 | |
| 用户 | /api/users/ | GET/POST | 用户 CRUD |
/api/users/{id} | GET/POST | 用户详情/更新/删除 | |
| 导入 | /api/import/group | POST | CSV 导入目标组 |
/api/import/bulk_targets | POST | 异步批量导入目标(大文件) | |
/api/import/bulk_targets/status/{id} | GET | 异步导入进度查询 | |
/api/import/email | POST | EML 导入模板 | |
/api/import/site | POST | 克隆网站 | |
| 工具 | /api/util/send_test_email | POST | 发送测试邮件 |
/api/reset | POST | 重置 API Key | |
| 报表 | /api/reports/ | GET/POST | 报表 CRUD |
/api/reports/{id} | GET/POST | 报表详情/更新/删除 | |
/api/reports/{id}/download | GET | 下载报表 HTML 文件 | |
| 秘密扫描 | /api/secretscan/ | GET/POST | 扫描配置 CRUD |
/api/secretscan/{id} | GET/POST | 配置详情/更新/删除 | |
/api/secretscan/{id}/scan | POST | 触发重新扫描 | |
| 系统配置 | /api/config/ | GET/POST | 系统全局配置读写 |
| 认证 | /api/auth/check | GET | 验证 API Key 有效性 |
/api/auth/webauthn/begin-registration | POST | WebAuthn 开始注册 | |
/api/auth/webauthn/finish-registration | POST | WebAuthn 完成注册 | |
/api/auth/webauthn/begin-login | POST | WebAuthn 开始登录 | |
/api/auth/webauthn/finish-login | POST | WebAuthn 完成登录 | |
/api/auth/webauthn/credentials | GET | 列出已注册凭证 | |
/api/auth/webauthn/credentials/{id}?_method=DELETE | POST | 删除凭证 | |
| 结果 | /api/results/{id}/timeline | GET | 单目标时间线 |
完整的请求与响应示例请参见 API 请求与响应示例。
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| SMTP 连接超时 | 防火墙未放行 SMTP 端口 | 检查安全组和防火墙规则 |
| 认证失败 | SMTP 用户名/密码错误 | 重新输入正确的凭据 |
| 550 退信 | 目标邮箱不存在 | 检查目标地址拼写 |
| 被标记为垃圾邮件 | 发信域信誉不足 | 配置 SPF/DKIM/DMARC 记录 |
| 553 拒绝发送 | 发件人地址未授权 | 使用被授权的发件人地址 |
| "Error Sending" | IMAP 检测到退信 | 查看发信日志中的错误详情 |
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 追踪像素未显示 | 邮件客户端阻止图片加载 | 在邮件正文添加文字说明引导用户加载图片 |
| 状态未更新 | Cloudflare Worker 未正确配置 | 检查 API_BASE 是否指向 listener/listener-api 服务 |
| 所有目标显示 "Sent" 无变化 | 邮件未被打开 | 检查邮件主题和内容是否具吸引力 |
| 打开率异常低 | 邮件被归类到垃圾邮件文件夹 | 检查 SPF/DKIM 配置 |
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 服务启动失败 "connection refused" | MySQL 未启动或地址错误 | 检查 db_path 配置 |
| "access denied" | 账号密码错误 | 验证数据库权限 |
| "Unknown database" | 数据库未创建 | 执行 CREATE DATABASE |
| 连接超时 | 网络不通 | 检查服务器之间的网络连通性 |
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 页面空白 / JS 错误 | 前端资源未正确构建 | 重新执行 gulp 构建 |
| CSS 样式混乱 | 静态资源路径问题 | 检查 static/ 目录是否完整部署 |
| DataTables 不显示数据 | API 请求失败 | 检查浏览器控制台网络请求状态 |
| 404 静态资源 | 文件未包含在部署包中 | 确保 static/dist/ 目录文件完整 |
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 403 Forbidden | 用户角色无权限执行操作 | 联系管理员提升角色权限 |
| 无法创建用户 | 非系统管理员 | 只有 admin 角色才能管理用户 |
| 无法修改配置 | 只读用户角色限制 | 更换有修改权限的账号 |
| 无法查看其他用户的活动 | 普通用户只能看自己的活动 | 使用 admin 账号登录 |
| HTTP 状态码 | 含义 | 排查方向 |
|---|---|---|
| 401 | API Key 无效或缺失 | 检查 Authorization Header 格式 |
| 403 | 权限不足 | 确认用户角色拥有所需权限 |
| 404 | 资源不存在 | 检查请求的 ID 是否有效 |
| 410 | 活动已结束 | 已完成的活动不再接收事件 |
| 500 | 服务器内部错误 | 查看 secphish 服务端日志 |
| 问题 | 原因与解决 |
|---|---|
go: go.work file not found | 在项目根目录(gophish/)下执行命令,或手动创建 go.work |
webpack build error | Node.js 版本过低,需 18+;检查 node_modules 是否完整 |
| 服务启动端口占用 | 检查端口 3333(secphish)或 8080(listener)是否被占用 |
Unknown column 数据库错误 | 运行数据库迁移;检查 migrations_prefix 配置是否正确 |
| 项目 | 值 |
|---|---|
| 当前版本 | V1.5.0 Build 202607061430 |
| 基础项目 | Gophish(二次开发) |
| 架构 | 服务分离(secphish / listener / listener-api / smtpd) |
| 数据库 | MySQL 5.7+(utf8mb4) |
| 前端 | React + Ant Design + AntV G2 + wangEditor + Monaco Editor |
| 许可证 | MIT |
| 版本 | 说明 |
|---|---|
| V1.5.0 | 新增成员画像、报表管理、秘密扫描、系统配置管理、WebAuthn 通行密钥、异步批量导入、认证 API 端点 |
| V1.4.2 | 新增 AI 对话功能、MQ 模式发信、勒索软件模拟器 |
| V1.4.0 | 新增 AI 模型管理与 AI Chat 对话功能 |
| V1.3.0 | 新增内置 SMTP 服务器(smtpd)和 MailDomain 管理 |
| V1.2.0 | 重构前端,全面迁移至 React + Ant Design |
| V1.1.0 | 引入 MailPlatform 异步发信系统 |
| V1.0.0 | 初始版本,基于 Gophish 的架构重构 |
| 0.1.x | 基于 Gophish 原始版本的功能继承 |
GeoIP 地理位置数据库路径:secphish/static/db/
自动更新方式(从 CDN 获取 GeoLite2-City 数据库):wp-statistics/GeoLite2-City
本项目基于 MIT 许可证开源。请在合法及授权的红队评估、钓鱼防范演练及企业安全建设场景下使用,严禁用于任何非法目的。
SecPhish — 更加安全、高并发、服务分离的现代化企业级钓鱼测试平台。