
Ein Python-Skript zum Sammeln von Kampagnendaten aus Gophish und zum Erstellen eines Berichts
Dieses Skript akzeptiert Ihre Gophish-Kampagnen-ID(s) als Parameter und sammelt dann die Kampagnenergebnisse, um die Statistiken darzustellen sowie User-Agent-Parsing und Geolokalisierungssuchen für IP-Adressen durchzuführen. Goreport generiert Listen von IP-Adressen, Betriebssystemen, Browsertypen und -versionen sowie Standorten mit Zählungen, wie oft jeder Eintrag während der Kampagne gesehen wurde.
Ein Hinweis zu den Statistiken: Goreport meldet die Gesamtzahl der Ereignisse und die Anzahl der E-Mail-Empfänger, die an jedem Ereignis teilgenommen haben. Mit anderen Worten, Goreport zeigt an, wie oft Gophish ein "Clicked Link"-Ereignis aufgezeichnet hat und wie viele Empfänger einen Link angeklickt haben. Das sind sehr unterschiedliche Zahlen. Eine Kampagne, die an 10 Personen gesendet wurde, könnte 9 Geklickter-Link-Ereignisse haben, obwohl nur 3 Empfänger einen Link angeklickt haben. Zu wissen, dass Empfänger einen Link mehrfach angeklickt oder Daten mehr als einmal übermittelt haben, ist wertvolle Information, aber stellen Sie sicher, dass Sie die Zahlen nicht durcheinanderbringen.
Dieses Skript erfordert einen Gophish-Server, eine aktive oder abgeschlossene Kampagne und den API-Schlüssel für Ihre Gophish-Anwendung. Erhalten Sie diesen Schlüssel, indem Sie auf den Reiter Einstellungen klicken. Der API-Schlüssel befindet sich auf der ersten Seite. Jedes Gophish-Benutzerkonto hat seinen eigenen API-Schlüssel, der als Authentifizierungsmethode für diesen Benutzer gegenüber der Gophish-API fungiert. Wenn Sie mehrere Konten mit Gophish verwenden, stellen Sie sicher, dass Sie den richtigen API-Schlüssel des Benutzers verwenden.
Diese Python-Bibliotheken werden ebenfalls benötigt:
Sie müssen einige Dinge tun, um loszulegen:
pip install -r requirements.txt aus.Dieses Beispiel geht davon aus, dass Gophish auf einem anderen Server läuft und HTTPS verwendet wird. Um den API-Endpunkt zu erreichen, müssen Sie SSH-Portweiterleitung mit Port 3333 (oder einem anderen lokalen Port Ihrer Wahl) verwenden:
[Gophish]
gp_host: https://127.0.0.1:3333
api_key: <YOUR_API_KEY>
[ipinfo.io]
ipinfo_token: <IPINFO_API_KEY>
[Google]
geolocate_key: <GEOLOCATE_API_KEY>
python3 Goreport.py --id 26 --format excel
Das würde die Ergebnisse der Kampagne 26 von https://localhost:3333/api/campaigns/26/?api_key=<Your_API_Key> abrufen und die Ergebnisse in eine xlsx-Datei ausgeben.
Mehrere IDs können gleichzeitig für mehrere Berichte angegeben werden. Die IDs können als kommagetrennte Liste, als Bereich oder beides angegeben werden.
Beispiel: python3 Goreport.py --id 26,29-33,54 --format csv
Wenn Sie mehrere Gophish-Benutzerkonten oder -Server verwenden, haben Sie mehrere API-Schlüssel. Um das Wechseln zwischen Schlüsseln zu erleichtern, ermöglicht Ihnen die --config-Option von Goreport, die Standardkonfigurationsdatei gophish.config durch eine von Ihnen benannte Konfigurationsdatei zu überschreiben. Wenn dieses Argument mit einer gültigen, lesbaren Konfigurationsdatei angegeben wird, verwendet Goreport diese anstelle von gophish.config, um die API-Verbindungen einzurichten.
Sie könnten diese Option verwenden, wenn Sie beispielsweise drei Phishing-Server mit Gophish betreiben. Sie könnten drei Konfigurationsdateien einrichten, jede mit einem anderen Gophish-API-Schlüssel, und diese dann nach Bedarf verwenden.
Beispiel: python3 Goreport.py --id 26,29-33,54 --format csv --config phish_server_2.config
Wenn Sie mehrere Kampagnen mit denselben Einstellungen für verschiedene Zielgruppen durchgeführt haben, möchten Sie möglicherweise Goreport für all diese Kampagnen auf einmal ausführen und die Ergebnisse dann zu einem Bericht zusammenfassen. Dies kann durch Hinzufügen des --combine-Flags von Goreport erreicht werden.
Beispiel: python3 Goreport.py --id 26,29-33,54 --format excel --combine
Dieser Befehl würde die Ergebnisse für die Kampagnen 26, 29, 30, 31, 32, 33 und 54 sammeln. Normalerweise würde Goreport sieben xlsx-Dateien ausgeben, aber durch Hinzufügen von --combine wird Goreport angewiesen, die Ergebnisse zu kombinieren und nur einen Bericht auszugeben, als ob es sich um eine einzige große Kampagne handeln würde.
Goreport kann entweder eine Excel-Tabelle (xlsx) oder ein Word-Dokument (docx) ausgeben. Es gibt auch eine "Quick"-Berichtsoption. Wählen Sie einfach Ihr bevorzugtes Format mit dem Befehlszeilenargument --format, wie oben im Abschnitt Beispielverwendung gezeigt. Über das csv-Format gibt es nicht viel zu sagen.
Das Word-Dokument wird aus einer Vorlage, template.docx, erstellt. Legen Sie Ihre Vorlagendatei mit dem Namen template.docx in das Goreport-Verzeichnis zusammen mit dem Hauptskript. Ihre Vorlage sollte einen gewünschten Tabellenstil und Überschriftenstile für Überschrift 1 und Überschrift 1 enthalten. Benennen Sie Ihren bevorzugten Tabellenstil "Goreport" und richten Sie Ihre Überschrift-1- und -2-Stile ein.
Sie können gerne einen benutzerdefinierten Stil erstellen oder einen vorhandenen Stil verwenden. Das Einzige, worauf es ankommt, ist, dass eine template.docx-Datei existiert und sie einen "Goreport"-Tabellenstil enthält.
Um einen Stil umzubenennen, klicken Sie mit der rechten Maustaste auf den Stil, wählen Sie Tabellenstil ändern und legen Sie einen neuen Namen fest.
Die Excel-Option gibt eine schön formatierte Excel-Arbeitsmappe mit mehreren Arbeitsblättern für die verschiedenen Sammlungen von Ergebnissen und Statistiken aus. Dies ist eine gute Option, wenn Sie Ergebnistabellen einfach sortieren oder filtern möchten.
Schließlich gibt es eine "Quick"-Option. Diese erzeugt keinen Bericht. Statt eines Berichts gibt sie grundlegende Informationen über die Kampagne auf Ihrem Terminal aus. Dies ist praktisch, um schnell den Kampagnenfortschritt zu überprüfen oder nach Abschluss der Kampagne auf Ergebnisse zu verweisen.
Wenn Sie den Status einer Kampagne bei der Berichtserstellung auf "Complete" setzen möchten, kann Goreport Ihnen dies automatisch mit dem --complete-Flag ermöglichen. Wenn Sie dieses Flag angeben, verwendet Goreport die API, um jede Kampagnen-ID als "Complete" zu markieren, um die Kampagne zu beenden und den Status in Gophish zu aktualisieren.
Gophish führt eigene Geolokalisierungssuchen mit IP-Adressen durch und gibt Breiten- und Längengrade zurück. Dies funktioniert einigermaßen, kann aber fehlschlagen und Koordinaten von 0,0 zurückgeben oder veraltete Informationen liefern.
Goreport hat zwei Optionen, die verwendet werden können, um die Standortergebnisse zu verbessern. Die erste und empfohlene Option ist die ipinfo.io API. Der API-Zugang ist kostenlos, solange Sie weniger als 1.000 Abfragen pro 24-Stunden-Zeitraum durchführen. Das sollte für eine Phishing-Kampagne nicht allzu schwierig sein.
Wenn ein ipinfo.io-API-Schlüssel zur Konfigurationsdatei hinzugefügt wird, verwendet Goreport automatisch ipinfo.io, um aktuelle Geolokalisierungsinformationen für jede eindeutige IP-Adresse zu sammeln.
Die zweite Option ist die Google Maps API. Goreport v1.0 verwendete die Maps API, als sie noch kostenlos war. Google verlangt jetzt $0,005 pro Anfrage für die Geolocate API (wie sie jetzt heißt). Wenn Sie ipinfo.io nicht verwenden möchten, aktivieren Sie die Maps Geolocate API in einem Google-Konto und fügen Sie den API-Schlüssel zur Goreport-Konfigurationsdatei hinzu. Fügen Sie dann das --google-Flag zu Ihrem Goreport-Befehl hinzu, wann immer Sie möchten, dass Goreport die API verwendet, um die Koordinaten von Gophish nachzuschlagen und eine formatierte Adresse zu erhalten.
Wenn Sie den Code überprüfen möchten, hier eine grundlegende Übersicht des Prozesses:
Goreport.py verwendet Python 3 und die Bibliothek Command Line Interface Creation Kit (CLICK). Wenn das Skript ausgeführt wird, wird ein neues Goreport-Objekt erstellt. Die __init__-Funktion der Goreport-Klasse stellt eine Verbindung zu Ihrem Gophish-Server her, wobei der bereitgestellte API-Schlüssel zur Authentifizierung verwendet wird. Dann wird die run()-Funktion aufgerufen.
Run() verwendet die Befehlszeilenoptionen, um die Berichterstellung zu starten. Eine For-Schleife wird verwendet, um alle mit --id angegebenen Kampagnen-IDs zu durchlaufen. Ihr Gophish-Server wird für Kampagnendetails für jede einzelne ID kontaktiert.
Zuerst wird collect_all_campaign_info() aufgerufen, um grundlegende Kampagneninformationen in Variablen zu speichern. Dies umfasst Daten wie den Namen der Kampagne, wann sie durchgeführt wurde, ihren Status, den verwendeten SMTP-Server, den Namen der Vorlage und mehr.
Zweitens wird process_timeline_events() aufgerufen, um das Zeitachsenmodell von Gophish für die ID zu erhalten. Dies umfasst die von Gophish aufgezeichneten Ereignisse. Diese Funktion wird als zweite ausgeführt, weil sie einige Listen füllt, die von process_results() überprüft werden.
Drittens wird process_results() aufgerufen, um das Ergebnismodell von Gophish für die ID zu erhalten. Dies liefert Daten wie die Anzahl der Ziele in der Kampagne.
Goreport verwendet diese Schritte, um einige Listen einzurichten, um die grundlegenden Ergebnisse der Kampagne zu ermitteln, z. B. wem erfolgreich eine E-Mail gesendet wurde, welche Empfänger einen Link angeklickt haben und welche Empfänger Daten bereitgestellt haben.
Mit dieser Grundlage kann Goreport die Daten auf beliebig viele Arten für einen Bericht anordnen. Jederzeit können die Listen abgefragt werden, um zu überprüfen, ob eine bestimmte E-Mail-Adresse im Ergebnismodell in der targets_clicked-Liste erscheint, um zu bestätigen, ob dieser Empfänger einen Link angeklickt hat. Dies kann dann eine Überprüfung des Zeitachsenmodells auslösen, um Details zu sammeln. Gophish speichert die Details wie IP-Adresse und User-Agent im Zeitachsenmodell und grundlegende Informationen im Ergebnismodell.