GitHub RadarRed team tool
Make Gophish great again Primary language: Go. 11 stars.
Project links:Open GitHub projectBack to radar
Gophish-NG is a fork of the open-source Gophish phishing toolkit, extended with additional capabilities for red team engagements.
Full documentation is published at <https://oppressionbreedsresistance.github.io/gophish-ng/>
| | | |---|---| | Getting started | Installation · VPS Quick Setup · Configuration | | User guide | Campaigns · Email Templates · Attachments · Campaign Results | | Features | Attachment Tracking · Hosted Attachments · IOC Removal · Password-Protected ZIP · QR Code Placeholder · SMS Campaigns (Smishing) · Turnstile Protection |
The sections below are a summary; the documentation site covers each feature in more depth.
For a full production deployment on a fresh Ubuntu/Debian VPS — including nginx reverse proxy, Let's Encrypt TLS certificates, and a systemd service — use the included setup script:
sudo bash setup_vps.shThe script is interactive and will ask for:
What it does automatically:
master branchconfig.json (admin on 127.0.0.1:3333, phish on 127.0.0.1:5555)gophish system user and a systemd serviceAfter setup, access the admin panel via an SSH tunnel:
ssh -L 3333:127.0.0.1:3333 user@<VPS_IP>
# then open https://localhost:3333 in your browserDefault credentials are printed in the service log:
journalctl -u gophish | grep "Please login"---
Requires Go v1.10 or above.
git clone https://github.com/OppressionBreedsResistance/gophish-ng.git
cd gophish-ng
go buildRun the binary and open a browser at https://localhost:3333. Login credentials are printed on first run:
time="2020-07-29T01:24:08Z" level=info msg="Please login with the username admin and the password 4304d5255378177d"This fork includes the following changes on top of the upstream Gophish codebase:
Full page: Attachment Template Support
{{.URL}}, {{.FirstName}}, etc.), the same way .txt and .html files do..zip archive is used as an attachment, Gophish-NG unpacks it in memory, applies template substitution to every text-based file inside, and repacks it before sending. The same extension list is used for standalone attachments and for files inside an archive, so a payload behaves identically whether or not it is zipped:| Templated (case-insensitive) | | --- | | .txt .html .htm .ics .ps1 .bat .pdf .js .vbs .hta .xml .rels |
Anything else inside the archive (images, binaries, nested Office documents) is repacked byte-for-byte. Note that substitution is unconditional for the extensions above — a .js payload that legitimately contains {{ will be rejected by the template parser, so escape it or rename the file to an untemplated extension.
payload.ps1, with any placeholders: $url = "{{.URL}}"
$name = "{{.FirstName}}"-mem=AES256)..zip file..zip with a personalized .ps1 inside, protected by the same password.---
Full page: QR Code Placeholder
Use {{.QR}} in any email template to embed a per-recipient QR code that links to the phishing URL.
keyname parameter).Example:
<p>Scan the QR code below to access the document:</p>
{{.QR}}---
Full page: Attachment Click Tracking
A new event type "Clicked Attachment" tracks when a recipient executes the delivered payload.
<base URL>/attachment?keyname=<RId>, e.g. http://example.com/attachment?keyname=1234567.{{.Attachment}} is available in every templated context — email bodies, landing pages and attachments — and appears in the CKEditor autocomplete dropdown.Example beacon in PowerShell:
Invoke-WebRequest -Uri "{{.Attachment}}" -UseBasicParsing | Out-NullCorrection: earlier revisions of this README documented the beacon URL as{{.URL}}/attachment?keyname={{.RId}}. That does not work.{{.URL}}is the full phishing URL and already carries the path and the `keyname` query string, so the expression expands to something likehttp://example.com?keyname=1234567/attachment?keyname=1234567— the/attachmentsegment ends up inside the query string, the request is routed to the landing page handler instead of the attachment handler, and the recipient ID no longer resolves. The result is a 404 and no Clicked Attachment event.
Use{{.Attachment}}. If you need to build the URL by hand, the correct form is{{.BaseURL}}/attachment?keyname={{.RId}}—{{.BaseURL}}has the path and query stripped.
---
Full page: Hosted Attachments
When Host Attachment is enabled on a campaign, the attachment is served directly from the phishing server rather than embedded in the email.
static/endpoint/attachments/<campaignId>/<RId>/.ps1, .bat, .pdf, and password-protected .zip---
Full page: Cloudflare Turnstile Bot Protection
Optional bot protection layer that silently verifies every visitor is a real browser before they can access any landing page or hosted attachment.
To enable, add your Cloudflare Turnstile keys to config.json:
"turnstile": {
"site_key": "YOUR_SITE_KEY",
"secret_key": "YOUR_SECRET_KEY"
}Leave both fields empty to disable (default). See the Turnstile docs for full setup instructions.
---
Full page: SMS Campaigns (Smishing)
Run SMS phishing campaigns alongside email. Gophish-NG does not send the texts — it generates a unique tracking link per recipient and exports them to CSV so you can send from your own SMS gateway, while clicks and submitted form data are tracked exactly as in an email campaign.
+48500000000); a Phone column is supported in CSV import. An email address is still required per recipient (used for de-duplication).first_name, last_name, email, phone, tracking_url for every recipient.See the Smishing docs for the full workflow.
---
Full page: IOC Removal
The following Gophish-specific indicators of compromise have been removed or replaced:
| What | Original value | New value | |------|----------------|-----------| | Email header | X-Gophish-Contact | X-Contact | | Webhook header | X-Gophish-Signature | X-Signature | | Server name / X-Mailer | gophish | (omitted) | | Recipient URL parameter | rid | keyname | | 404 response | Go default | Custom page |
Note: Tracking links use?keyname=...instead of?rid=.... Update landing pages and any external tooling accordingly.
---
Full page: Campaign Results Enhancements