1. 概述

Gophish 是一个 开源的网络钓鱼框架,可以简便企业和渗透测试人员的网络钓鱼过程,可以用来强化企业人员的安全意识。

官网地址:https://getgophish.com/

官方手册:https://getgophish.com/documentation/

项目地址:https://github.com/gophish/gophish

2. 平台搭建

由于是 Go 语言开发的项目,所以支持多平台运行。这里只记录 Linux 的搭建教程,也是大多数运行方式。

# 前置处理
wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip
mkdir gofish
unzip gophish-v0.12.1-linux-64bit.zip -d gofish
cd gofish
chmod +x gofish

# 修改配置文件,其中127.0.0.1务必修改,其他根据自身需求修改
sed -i 's/"listen_url": "127.0.0.1:3333"/"listen_url": "0.0.0.0:3333"/g' config.json
sed -i 's/"listen_url": "0.0.0.0:80"/"listen_url": "0.0.0.0:8080"/g' config.json

# 直接启动,用户为 admin 和 随机密码
./gofish

# 输出如:
time="2025-06-06T21:29:46+08:00" level=info msg="Please login with the username admin and the password 14959f7fe1e05ef6"
time="2025-06-06T21:29:46+08:00" level=info msg="Starting IMAP monitor manager"
time="2025-06-06T21:29:46+08:00" level=info msg="Starting new IMAP monitor for user admin"
time="2025-06-06T21:29:46+08:00" level=info msg="Creating new self-signed certificates for administration interface"
time="2025-06-06T21:29:46+08:00" level=info msg="Background Worker Started Successfully - Waiting for Campaigns"
time="2025-06-06T21:29:46+08:00" level=info msg="Starting phishing server at http://0.0.0.0:8080"
time="2025-06-06T21:29:46+08:00" level=info msg="TLS Certificate Generation complete"
time="2025-06-06T21:29:46+08:00" level=info msg="Starting admin server at https://0.0.0.0:3333"

启动前需要修改一下config.json默认配置文件,主要需关注这两个配置就:admin_server.listen_url(Web 后台地址)phish_server.listen_url(钓鱼地址)。

3. 平台指南

3.1 Sending Profiles

发信配置:配置 SMTP ,用于发送邮件。需要注意 Email Headers 配置,Gofish 默认配置 X-Mailer 为 gofish。一般会被邮箱服务器拦截掉,配置时务必修改。

在测试时,这里发信网易邮箱会拦截,并禁用客户端发信,恢复徒消耗时间。

Gophish-发信配置.png

测试时可以直接使用知名邮箱服务进行,但一般存在较多限制和考虑,在实际的钓鱼场景中,通常需要自己准备和伪造邮箱服务,以便达到更好的伪装效果。

3.2 Email Templates

邮件模板:邮件的内容模板,钓鱼用户实际接收到的邮件内容。接受 eml 原文直接导入和模板变量。

Envelope Sender 会修改邮件头 from 字段,可能导致对方邮箱服务器拒信情况

Gophish-邮件模板配置.png

3.3 Landing Pages

钓鱼页面:用户点击邮件链接后进入的网页页面,可接受模板变量。

Gophish-钓鱼页面配置.png

导入过程会存在导入失败导入和实际页面不符的情况,多数是因为原网页 js、css 资源使用相对路径,导过来无法加载原资源,无法渲染。最好使用导入功能然后进行手动定制修改。

3.4 Users & Groups

用户组:没什么多说的,钓鱼时可以选择用户组发件,支持文件批量导入。

Gophish-用户组配置.png

3.5 Campaigns

钓鱼活动:发起钓鱼活动,根据前面的配置发起邮件开始钓鱼。

Gophish-钓鱼活动.png

3.6 Dashboard

仪表盘:常见的结果统计页面,展示所有钓鱼活动的数据。

Gophish-钓鱼仪表盘.png

点击某一个活动进行查看,可以查看每个钓鱼用户的中招状况,包含客户端信息(UA 不准确)和发送数据

Gophish-钓鱼用户状态.png

3.7 Template Variables

模板变量:在邮件和钓鱼页面可以直接使用的变量,可以通过变量完成更灵活的内容,需要注意变量名区分大小写。

  • {{.RId}}:每次发起钓鱼时,会为每位用户生成一个唯一 id 值

  • {{.FirstName}}:对应钓鱼用户名字

  • {{.LastName}}:对应钓鱼用户姓氏

  • {{.Position}}:钓鱼用户职位,实际可以任意写一些内容

  • {{.Email}}:用户邮件地址

  • {{.From}}:自己的发件人地址

  • {{.TrackingURL}} 跟踪已读状态的地址

  • {{.Tracker}}:一段 img 标签代码:<img alt='' style='display: none' src='{{.TrackingURL}}'/>

  • {{.URL}}:填写的钓鱼地址加上 Rid 参数

  • {{.BaseURL}}:填写的钓鱼基地址

对应示例值如下:

Gophish-模板变量示例.png

4.功能特性

4.1 钓鱼相关路由

钓鱼相关的功能代码为controllers/phish.go,主要注册几个路由:

router.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fileServer))
router.HandleFunc("/track", ps.TrackHandler)
router.HandleFunc("/robots.txt", ps.RobotsHandler)
router.HandleFunc("/{path:.*}/track", ps.TrackHandler)
router.HandleFunc("/{path:.*}/report", ps.ReportHandler)
router.HandleFunc("/report", ps.ReportHandler)
router.HandleFunc("/{path:.*}", ps.PhishHandler)

主要功能是:

  • /*/track路由功能 :邮件状态追踪,判断邮件已读,通过 rid 关联用户;访问对应状态 Email Opened。

  • /*路由功能:通过 rid 关联用户;GET-进入钓鱼页面,访问对应状态 Clicked link;POST-表单提交数据,提交对应状态 Submitted Data。

此处内容已隐藏,「验证码可见」