gophish钓鱼平台增加二维码记录功能
字数 1257 2025-08-22 12:22:54
Gophish钓鱼平台增加二维码记录功能教学文档
前言
Gophish是一款开源的钓鱼演练工具,但在实际使用中发现其对二维码扫码记录的支持不足。虽然官方仓库中曾经合并过二维码相关代码,但编译打包后无法正常构造二维码。本教学文档将详细介绍如何对Gophish进行改造,增加二维码扫码记录功能。
Gophish核心功能分析
Gophish主要包含以下功能模块:
- Dashboard - 数据面板
- Campaigns - 钓鱼邮件发送页面
- Users & Groups - 配置接收邮件用户
- Email Templates - 钓鱼邮件模板
- Landing Pages - 钓鱼页面(通过钓鱼邮件模板可访问)
- Sending Profiles - 配置发送钓鱼邮件的发件人邮箱信息
邮件模板功能深入分析
现有变量支持
在Email Templates模块中,可以配置以下变量:
{{.URL}}- 钓鱼链接地址{{.Email}}- 收件人邮箱{{.From}}- 发件人信息
测试发现,尝试配置其他变量(如{{.QrURL}})时会提示失败。
代码结构分析
通过分析请求URL,定位到相关代码文件template.go。关键代码片段:
json.NewDecoder(r.Body).Decode(&t)
这行代码将接口传递的JSON参数解析到models.Template类中。
HTML字段处理流程
- 在
models.Template类中搜索HTML定位到相关代码逻辑 - 跟踪函数调用链,最终找到邮件模板配置所添加的变量(如URL、Tracker参数)
- 确认该位置就是模板变量接收器
二维码功能实现
代码改造步骤
-
添加二维码字段:
在models.Template类中添加一个二维码字段QrCode -
生成二维码逻辑:
- 使用
go-qrcode库将phishURL生成二维码图片 - 将二维码图片转换为base64格式字符串
- 将base64字符串赋给
QrCode字段
- 使用
-
HTML模板处理:
由于二维码是图片,需要在HTML中使用img标签引用base64格式的二维码:
关键代码实现
// 在models.Template中添加QrCode字段
type Template struct {
// ...其他字段...
QrCode string `json:"qr_code" gorm:"-"`
}
// 生成二维码的逻辑
func (t *Template) GenerateQRCode(phishURL string) error {
qr, err := qrcode.Encode(phishURL, qrcode.Medium, 256)
if err != nil {
return err
}
t.QrCode = base64.StdEncoding.EncodeToString(qr)
return nil
}
测试与验证
- 编译修改后的代码
- 在邮件模板配置中添加二维码变量
{{.QrCode}} - 发送测试邮件
- 验证:
- 邮件中正确显示二维码图片
- 扫描二维码后的访问记录被正确统计
注意事项
- 确保已正确导入
go-qrcode和encoding/base64包 - 二维码大小可根据需要调整(示例中使用256px)
- 二维码复杂度设置为Medium,可根据需要调整
- 确保在发送邮件前调用
GenerateQRCode方法生成二维码
总结
通过上述改造,Gophish成功增加了二维码扫码记录功能,使钓鱼演练更加全面。关键点包括:
- 分析Gophish现有模板变量机制
- 添加二维码字段和生成逻辑
- 将二维码图片转换为HTML可用的base64格式
- 确保扫码行为能被正确记录
这种改造方式不仅限于二维码功能,也可作为参考用于扩展Gophish的其他自定义功能。