added the ability to generate QR code for phishing URL.

pull/2897/head
HLOverflow 2023-06-21 16:46:45 +08:00
parent d2efb18ef1
commit 43982882e7
3 changed files with 29 additions and 0 deletions

1
go.mod
View File

@ -25,6 +25,7 @@ require (
github.com/mattn/go-sqlite3 v2.0.3+incompatible github.com/mattn/go-sqlite3 v2.0.3+incompatible
github.com/oschwald/maxminddb-golang v1.6.0 github.com/oschwald/maxminddb-golang v1.6.0
github.com/sirupsen/logrus v1.4.2 github.com/sirupsen/logrus v1.4.2
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
github.com/ziutek/mymysql v1.5.4 // indirect github.com/ziutek/mymysql v1.5.4 // indirect
golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect

2
go.sum
View File

@ -74,6 +74,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=

View File

@ -6,6 +6,9 @@ import (
"net/url" "net/url"
"path" "path"
"text/template" "text/template"
"encoding/base64"
log "github.com/gophish/gophish/logger"
qrcode "github.com/skip2/go-qrcode" //library for generating qrcode
) )
// TemplateContext is an interface that allows both campaigns and email // TemplateContext is an interface that allows both campaigns and email
@ -24,6 +27,7 @@ type PhishingTemplateContext struct {
TrackingURL string TrackingURL string
RId string RId string
BaseURL string BaseURL string
QrURL string
BaseRecipient BaseRecipient
} }
@ -61,6 +65,8 @@ func NewPhishingTemplateContext(ctx TemplateContext, r BaseRecipient, rid string
trackingURL.Path = path.Join(trackingURL.Path, "/track") trackingURL.Path = path.Join(trackingURL.Path, "/track")
trackingURL.RawQuery = q.Encode() trackingURL.RawQuery = q.Encode()
qrDataUrl := generateQRCodeDataUrl(phishURL.String())
return PhishingTemplateContext{ return PhishingTemplateContext{
BaseRecipient: r, BaseRecipient: r,
BaseURL: baseURL.String(), BaseURL: baseURL.String(),
@ -69,6 +75,7 @@ func NewPhishingTemplateContext(ctx TemplateContext, r BaseRecipient, rid string
Tracker: "<img alt='' style='display: none' src='" + trackingURL.String() + "'/>", Tracker: "<img alt='' style='display: none' src='" + trackingURL.String() + "'/>",
From: fn, From: fn,
RId: rid, RId: rid,
QrURL: qrDataUrl,
}, nil }, nil
} }
@ -124,3 +131,22 @@ func ValidateTemplate(text string) error {
} }
return nil return nil
} }
//Generate QR code dataurl
func generateQRCodeDataUrl(websiteURL string) string {
// imageSize = 256 x 256 pixels
imageSize := 256
qrCodeImageData, taskError := qrcode.Encode(websiteURL, qrcode.High, imageSize)
if taskError != nil {
log.Errorf("Error generating QR code. %s",taskError)
}
// Encode raw QR code data to base 64
encodedData := base64.StdEncoding.EncodeToString(qrCodeImageData)
log.Infof("QR encodedData = %s", encodedData)
return "data:image/png;base64, "+encodedData
}