
邮件钓鱼演练Gophish教程
1. 概述
Gophish 是一个 开源的网络钓鱼框架,可以简便企业和渗透测试人员的网络钓鱼过程,可以用来强化企业人员的安全意识。
官方手册: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。一般会被邮箱服务器拦截掉,配置时务必修改。
在测试时,这里发信网易邮箱会拦截,并禁用客户端发信,恢复徒消耗时间。
测试时可以直接使用知名邮箱服务进行,但一般存在较多限制和考虑,在实际的钓鱼场景中,通常需要自己准备和伪造邮箱服务,以便达到更好的伪装效果。
3.2 Email Templates
邮件模板:邮件的内容模板,钓鱼用户实际接收到的邮件内容。接受 eml 原文直接导入和模板变量。
Envelope Sender 会修改邮件头 from 字段,可能导致对方邮箱服务器拒信情况
3.3 Landing Pages
钓鱼页面:用户点击邮件链接后进入的网页页面,可接受模板变量。
导入过程会存在导入失败或导入和实际页面不符的情况,多数是因为原网页 js、css 资源使用相对路径,导过来无法加载原资源,无法渲染。最好使用导入功能然后进行手动定制修改。
3.4 Users & Groups
用户组:没什么多说的,钓鱼时可以选择用户组发件,支持文件批量导入。
3.5 Campaigns
钓鱼活动:发起钓鱼活动,根据前面的配置发起邮件开始钓鱼。
3.6 Dashboard
仪表盘:常见的结果统计页面,展示所有钓鱼活动的数据。
点击某一个活动进行查看,可以查看每个钓鱼用户的中招状况,包含客户端信息(UA 不准确)和发送数据。
3.7 Template Variables
模板变量:在邮件和钓鱼页面可以直接使用的变量,可以通过变量完成更灵活的内容,需要注意变量名区分大小写。
{{.RId}}:每次发起钓鱼时,会为每位用户生成一个唯一 id 值
{{.FirstName}}:对应钓鱼用户名字
{{.LastName}}:对应钓鱼用户姓氏
{{.Position}}:钓鱼用户职位,实际可以任意写一些内容
{{.Email}}:用户邮件地址
{{.From}}:自己的发件人地址
{{.TrackingURL}} 跟踪已读状态的地址
{{.Tracker}}:一段 img 标签代码:
<img alt='' style='display: none' src='{{.TrackingURL}}'/>
{{.URL}}:填写的钓鱼地址加上 Rid 参数
{{.BaseURL}}:填写的钓鱼基地址
对应示例值如下:
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。
- 感谢你赐予我前进的力量