前言
钓鱼演练时发现gophish对好像缺少二维码扫码记录的支持,gophish仓库中看有合并过二维码的代码,但是编译打包后无法构造二维码,于是对其进行改造。
gophish功能点分析
1、gophish主要功能如下:
Dashboard-数据面板
Campaigns-钓鱼邮件发送页面
Users & Groups - 配置接受邮件用户
Email Templates - 钓鱼邮件模版
Landing Pages - 钓鱼页面,通过钓鱼邮件模版可访问到该页面
Sending Profiles - 发送钓鱼邮件的发件人邮箱信息
2、其中Email Templates是最主要的,用来配置钓鱼模版
在这个页面中我们可以配置钓鱼链接地址、记录点击钓鱼信息等变量
可配置变量如下:
{{.URL}}
{{.FirstName}}
{{.LastName}}
{{.Position}}
{{.Email}}
{{.From}}
{{.TrackingURL}}
{{.Tracker}}
{{.URL}}
{{.BaseURL}}
3、经过测试,发现在配置以上变量时可以保存成功,配置其他变量时会提示失败,例如{{.QrURL}}
4、查看请求URL,通过该接口定位到相关代码文件template.go
5、json.NewDecoder(r.Body).Decode(&t)这行代码主要是把接口传递过来的json参数解析到models.Template类中,映射关系如图所示
6、根据我们配置邮件模版的操作,我们主要对html这个参数进行了修改,那代码改造的逻辑主要围绕着HTML参数进行。
HTML字段处理过程的代码分析
1、直接在该类中搜索HTML定位到相关代码逻辑。
2、继续跟进函数
3、继续跟进,代码逻辑到这里就是我们要找到的邮件模版配置所添加的变量了,例如URL、Tracker参数,那么基本可以确定,这里类就是模版变量接受器
4、如果在这里配置一个二维码的变量,是否就能达到相关的预期了?
开始进行代码改造,增加二维码字段用来存放二维码,由于二维码是一个图片,而html和图片相关的代码只有img标签,所有需要使用go生成二维码并处理成base64形式,然后给到img标签处理
二维码功能代码添加
1、在该类中添加一个二维码字段,这里设置成QrCode
2、在该类上增加二维码值生成的代码逻辑,URL的值是phishURL,这个值已知是携带rid的,所以这里直接使用go-qrcode把phishURL生成二维码图片并转换成base64格式的字符
4、现在已经在邮件模版中增加好了QrCode的字段,对代码进行编译测试,配置二维码模版时已经没有报错了
测试邮件发送,二维码的扫描数据已经被统计进去了