Sign inSign up

loadingi/gophish_custom

By loadingi

•Updated about 1 year ago

Image
0

228

loadingi/gophish_custom repository overview

gophish logo

⁠Gophish-Custom

⁠项目说明

本项目 fork 自原 Gophish⁠ 项目,并在原有功能基础上增加了以下增强特性:

  • 解决 Windows 11 系统版本检测问题:由于 Windows 11 不再通过 User-Agent 暴露真实系统版本号(统一显示为 Windows 10),本项目采用现代化的 Client Hints API 来获取准确的系统信息
  • Client Hints 技术方案:利用 Sec-CH-UA-Platform-Version 等高熵客户端提示获取精确的操作系统版本,参考 Microsoft 官方文档⁠
  • 智能回退机制:当浏览器不支持 Client Hints 时,自动回退到传统的 User-Agent 解析,确保最大兼容性

⁠Windows 版本号对应关系

根据 Microsoft 官方文档⁠,Sec-CH-UA-Platform-Version 中的 Windows 版本号对应关系如下:

Windows 版本Sec-CH-UA-Platform-Version说明
Windows 11"13.0.0" 或更高Windows 11 21H2 及后续版本
Windows 10"10.0.0" - "10.0.22000"Windows 10 各版本
Windows 8.1"6.3.0"Windows 8.1
Windows 8"6.2.0"Windows 8
Windows 7"6.1.0"Windows 7

⁠增加功能

✅ Client Hints 支持 - 更准确的浏览器指纹识别

  • 支持现代浏览器的 Client Hints API (Sec-CH-UA-* 头部)
  • 获取精确的操作系统版本信息 (如 Windows 11, macOS 13.0)
  • 智能回退机制:不支持 Client Hints 时自动使用传统 User-Agent 解析

✅ 增强的设备信息 - 包含操作系统版本等详细信息

  • 系统架构信息:x86、ARM 等处理器架构
  • 系统位数:32位/64位系统信息
  • 移动设备型号:准确识别手机/平板设备型号
  • 浏览器品牌和版本:多品牌浏览器信息 (Chrome, Edge, Firefox等)
  • 数据源指示器:显示信息来源 (CH=Client Hints, UA=User-Agent)

✅ 可视化增强

  • 专门的设备信息展示界面
  • 彩色图标区分不同操作系统和浏览器
  • 清晰的数据来源标识

⁠技术说明

⁠高熵 Client Hints 机制

⚠️ 重要:Sec-CH-UA-Platform-Version 等详细系统信息属于高熵(high-entropy)客户端提示,具有以下特点:

  • 需要明确请求:浏览器只有在收到服务器的 Accept-CH 头部明确请求后,才会在后续请求中发送这些信息
  • 隐私保护:高熵信息可能用于设备指纹识别,因此浏览器默认不发送
  • 渐进增强:首次访问时可能无法获取完整信息,需要页面刷新或后续请求才能收集到详细数据
⁠实现机制

本项目通过以下方式确保高熵 Client Hints 的正确收集:

  1. 服务器端配置:发送 Accept-CH 头部请求高熵值信息
  2. 关键提示标记:使用 Critical-CH 头部标记重要的 Client Hints
  3. HTML 元标签:在页面中添加 <meta http-equiv="Accept-CH"> 标签
  4. 智能回退:当高熵信息不可用时,自动使用传统 User-Agent 解析

提示:为获得最佳效果,建议目标用户在访问钓鱼页面时刷新一次页面,以确保收集到完整的设备信息。

⁠具体实现详情
⁠1. 服务器端实现 (controllers/phish.go)

HTTP 头部设置: 在关键的处理函数中设置 Client Hints 请求头部:

// 请求高熵 Client Hints
w.Header().Set("Accept-CH", "Sec-CH-UA-Platform-Version, Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Model, Sec-CH-UA-Full-Version")
w.Header().Set("Critical-CH", "Sec-CH-UA-Platform-Version")

Client Hints 数据收集: 在 setupContext 函数中收集所有 Client Hints 头部:

// 收集 Client Hints 头部信息
d.Browser["sec-ch-ua"] = r.Header.Get("Sec-CH-UA")
d.Browser["sec-ch-ua-mobile"] = r.Header.Get("Sec-CH-UA-Mobile")
d.Browser["sec-ch-ua-platform"] = r.Header.Get("Sec-CH-UA-Platform")
d.Browser["sec-ch-ua-platform-version"] = r.Header.Get("Sec-CH-UA-Platform-Version")
d.Browser["sec-ch-ua-arch"] = r.Header.Get("Sec-CH-UA-Arch")
d.Browser["sec-ch-ua-bitness"] = r.Header.Get("Sec-CH-UA-Bitness")
d.Browser["sec-ch-ua-model"] = r.Header.Get("Sec-CH-UA-Model")
⁠2. 前端解析 (static/js/src/app/campaign_results.js)

parseClientHints 函数:

  • 解析存储在 browser 对象中的 Client Hints 数据
  • 提取平台、版本、架构、位数等详细信息
  • 解析浏览器品牌和版本信息

renderDevice 函数增强:

  • 优先使用 Client Hints 数据进行设备识别
  • 当 Client Hints 不可用时智能回退到 User-Agent 解析
  • 显示数据来源指示器 (CH=Client Hints, UA=User-Agent)
⁠3. 数据存储结构

Client Hints 数据存储在 EventDetails 结构的 Browser 字段中:

type EventDetails struct {
    Payload url.Values        `json:"payload"`
    Browser map[string]string `json:"browser"`  // Client Hints 存储在这里
}
⁠4. 工作流程
  1. 首次请求:用户访问钓鱼页面
  2. 服务器响应:发送 Accept-CH 和 Critical-CH 头部
  3. 浏览器处理:浏览器记录服务器的 Client Hints 请求偏好
  4. 后续请求:浏览器在后续请求中自动发送高熵 Client Hints
  5. 数据收集:服务器收集并存储完整的设备指纹信息
  6. 前端展示:JavaScript 解析并展示增强的设备信息
⁠5. 点击统计说明

✅ 重要保证:Client Hints 功能不会影响点击数统计的准确性

  • 无额外请求:Client Hints 数据通过 HTTP 头部在用户正常访问时收集,不产生额外的网络请求
  • 同步收集:设备指纹信息在用户点击钓鱼链接的同一个请求中收集,不会重复计数
  • 透明处理:整个 Client Hints 收集过程对用户和统计系统完全透明

潜在注意事项:

  • Critical-CH 头部在极少数情况下可能导致浏览器重新请求页面
  • 如发现重复统计问题,可通过移除 Critical-CH 头部解决
  • 建议在部署后监控是否有异常的重复点击记录
⁠6. 收集的 Client Hints 信息
Client Hint描述示例值
Sec-CH-UA浏览器品牌和版本"Chromium";v="118", "Google Chrome";v="118"
Sec-CH-UA-Mobile移动设备指示器?0 (桌面) / ?1 (移动)
Sec-CH-UA-Platform操作系统平台"Windows", "macOS", "Linux"
Sec-CH-UA-Platform-Version操作系统版本"15.0.0", "13.0.1"
Sec-CH-UA-Arch处理器架构"x86", "arm"
Sec-CH-UA-Bitness系统位数"64", "32"
Sec-CH-UA-Model设备型号"Pixel 6", "iPhone14,2"

⁠浏览器兼容性

⁠支持 Client Hints 的浏览器:
  • Chrome 89+ - 完整支持,包括高熵 Client Hints
  • Edge 89+ - 完整支持,包括高熵 Client Hints
  • Opera 75+ - 完整支持,包括高熵 Client Hints
⁠部分支持:
  • Chrome 84-88 - 支持基础 Client Hints,高熵信息有限
  • Edge 84-88 - 支持基础 Client Hints,高熵信息有限
⁠传统支持(User-Agent 解析):
  • Firefox(所有版本)- 暂不支持 Client Hints
  • Safari(所有版本)- 暂不支持 Client Hints
  • Internet Explorer - 仅支持 User-Agent
  • 其他浏览器 - 根据内核决定

注意:

  • 不支持 Client Hints 的浏览器会自动回退到传统的 User-Agent 解析,确保完全兼容性
  • 即使在支持的浏览器中,高熵 Client Hints 也需要用户交互或页面刷新才能完整收集

⁠部署方式

⁠Docker 部署(推荐)

本项目提供了增强版的 Docker 镜像,完整支持 Client Hints 功能:

🐳 Docker Hub 镜像:loadingi/gophish_custom⁠


⁠🚀 一键部署(强烈推荐)

我们提供了完全自动化的部署脚本,无需手动配置任何文件:

# 方法1: 直接下载运行
curl -O https://raw.githubusercontent.com/your-repo/gophish_cstm/main/setup-gophish-custom.sh
chmod +x setup-gophish-custom.sh
./setup-gophish-custom.sh

# 方法2: 克隆项目后运行
git clone https://github.com/your-repo/gophish_cstm.git
cd gophish_cstm
chmod +x setup-gophish-custom.sh
./setup-gophish-custom.sh
⁠🎯 脚本自动完成的任务
步骤说明传统方式脚本方式
环境清理清理旧容器和数据手动执行多个命令✅ 自动完成
镜像管理拉取最新镜像docker pull✅ 自动完成
目录创建创建持久化目录手动 mkdir✅ 自动完成
配置生成生成 gophish.db 和 config.json复杂的临时容器操作✅ 自动完成
权限设置设置正确的文件权限手动 chmod/chown✅ 自动完成
服务配置创建 docker-compose.yml手动编写或复制✅ 自动生成
服务启动启动 Gophish 服务docker-compose up -d✅ 自动完成
密码获取获取初始管理员密码手动查看日志✅ 自动显示
⁠📋 部署完成后的服务信息

脚本执行完成后,您将看到:

🎉 Gophish Custom 部署完成!
==========================================
📋 服务信息:
  - 管理界面: http://localhost:3333
  - 钓鱼服务器: http://localhost:80
  - HTTPS 钓鱼服务器: https://localhost:443

🔑 初始管理员密码:
  Please login with the username admin and the password **********

🚀 Client Hints 功能已启用:
  - 支持现代浏览器的高精度设备指纹识别
  - 自动收集操作系统版本、架构、设备型号等信息
  - 智能回退到传统 User-Agent 解析

📖 详细文档:完整的脚本说明和故障排除请参考 部署脚本文档⁠


⁠🔧 手动部署(高级用户)

如果您需要自定义配置或了解部署细节,可以选择手动部署:

⁠前置要求

⚠️ 重要:手动部署需要先准备 gophish.db 和 config.json 文件,这是持久化的关键!

⁠方法: 临时容器生成
# 创建目录
mkdir -p gophish_data data logs

# 启动临时容器生成初始文件
docker run --name temp_gophish -d loadingi/gophish_custom:latest
sleep 15  # 等待文件生成

# 复制文件
docker cp temp_gophish:/opt/gophish/gophish.db ./gophish_data/
docker cp temp_gophish:/opt/gophish/config.json ./gophish_data/

# 清理临时容器
docker stop temp_gophish && docker rm temp_gophish

# 设置权限
chmod 666 ./gophish_data/*
⁠使用项目的 Docker Compose
# 克隆项目获取配置文件
git clone https://github.com/your-repo/gophish_cstm.git
cd gophish_cstm

# 确保配置文件已准备好
ls -la gophish_data/

# 启动服务
docker-compose up -d

# 查看初始密码
docker-compose logs gophish | grep "Please login with"
⁠项目 Docker Compose 配置

项目包含的 docker-compose.yml⁠ 提供了完整的持久化配置:

services:
  gophish:
    image: loadingi/gophish_custom:latest
    container_name: gophish_custom
    ports:
      - "3333:3333"  # 管理界面
      - "80:80"      # HTTP 钓鱼服务器
      - "443:443"    # HTTPS 钓鱼服务器
    volumes:
      - ./data:/opt/gophish/data                          # 应用数据
      - ./logs:/opt/gophish/logs                          # 日志文件
      - ./gophish_data/gophish.db:/opt/gophish/gophish.db # 数据库
      - ./gophish_data/config.json:/opt/gophish/config.json # 配置
    environment:
      - ADMIN_LISTEN_URL=0.0.0.0:3333
      - PHISH_LISTEN_URL=0.0.0.0:80
      - TZ=Asia/Shanghai
    restart: unless-stopped
    user: "root:root"
    networks:
      - gophish_network

⁠💾 持久化存储说明

⁠目录结构

部署完成后的目录结构:

./
├── docker-compose.yml           # Docker Compose 配置
├── setup-gophish-custom.sh     # 一键部署脚本
├── gophish_data/               # 核心数据(必须备份)
│   ├── gophish.db             # SQLite 数据库文件
│   └── config.json            # 服务器配置文件
├── data/                      # 应用数据目录
│   ├── uploads/              # 上传的文件
│   └── templates/            # 模板文件
└── logs/                     # 日志目录
    ├── gophish.log          # 应用日志
    └── error.log            # 错误日志
⁠持久化组件详解
组件路径用途备份重要性
数据库gophish_data/gophish.db存储活动、模板、用户、结果等所有数据🔴 极其重要
配置文件gophish_data/config.json服务器配置、端口、SSL 设置等🟡 重要
应用数据data/上传的文件、附件、静态资源等🟡 重要
日志文件logs/应用程序运行日志🟢 可选
⁠备份策略
# 完整备份(推荐)
tar -czf gophish_backup_$(date +%Y%m%d_%H%M%S).tar.gz gophish_data/ data/ logs/

# 核心数据备份(最小化)
tar -czf gophish_core_$(date +%Y%m%d_%H%M%S).tar.gz gophish_data/

# 定期备份脚本
echo "0 2 * * * cd /path/to/gophish && tar -czf backup/gophish_\$(date +\%Y\%m\%d).tar.gz gophish_data/" | crontab -

⁠🔧 常用管理命令

# 查看服务状态
docker-compose ps

# 查看实时日志
docker-compose logs -f gophish

# 重启服务
docker-compose restart

# 停止服务
docker-compose down

# 更新到最新版本
docker-compose pull && docker-compose up -d

# 进入容器调试
docker-compose exec gophish /bin/bash

# 备份数据
docker-compose exec gophish tar -czf /tmp/backup.tar.gz /opt/gophish/gophish.db
docker cp gophish_custom:/tmp/backup.tar.gz ./
⁠Setup

After running the Gophish binary, open an Internet browser to https://localhost:3333⁠ and login with the default username and password listed in the log output. e.g.

time="2020-07-29T01:24:08Z" level=info msg="Please login with the username admin and the password 4304d5255378177d"

Releases of Gophish prior to v0.10.1 have a default username of admin and password of gophish.

⁠Documentation

Documentation can be found on our site⁠. Find something missing? Let us know by filing an issue!

Tag summary

Content type

Image

Digest

sha256:aa58b8cd1…

Size

80.3 MB

Last updated

about 1 year ago

docker pull loadingi/gophish_custom