Skip to content

Instantly share code, notes, and snippets.

@resource-not-found
Created May 9, 2024 06:51
Show Gist options
  • Save resource-not-found/7ab20247e37eafbee70e43998deeea99 to your computer and use it in GitHub Desktop.
Save resource-not-found/7ab20247e37eafbee70e43998deeea99 to your computer and use it in GitHub Desktop.
Appendix 3: gophish_create_compaigns.py
import sys
import re
from gophish import Gophish
from gophish.models import Group, Page, Template, SMTP, Campaign, User
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def create_campaign(url, params):
campaign = Campaign(
name='{} {} <{}> ({})'.format(params['first_name'], params['last_name'], params['email'], params['position']),
groups=[Group(name=params['email'])],
url=url,
template = Template(name='KnowBe4'),
smtp = SMTP(name='ZOHOKnowbe4')
)
campaign = api.campaigns.post(campaign)
print('Compaign created: {}'.format(campaign.name))
def parse_parameters(param_str):
param_str = param_str.strip()
pattern = re.compile(r'(\w+)="([^"]*)"')
matches = pattern.findall(param_str)
result_dict = dict(matches)
return result_dict
key = '[GOPHISH_API_KEY]'
api = Gophish(key, host='https://127.0.0.1:3333', verify=False)
groups = api.groups.get()
campaigns = api.campaigns.get()
file_name = sys.argv[2]
with open(file_name, 'r') as file:
for line in file:
line = line.rstrip()
url = line.split(' ; ')[0]
params = line.split(' ; ')[1]
params = parse_parameters(params)
if params['email'] in [g.name for g in groups]:
tmp = '{} {} <{}> ({})'.format(params['first_name'], params['last_name'], params['email'], params['position'])
if tmp not in [c.name for c in campaigns]:
create_campaign(url, params)
else:
print('Warning: Group not found for email: %s' % params['email'])
# Example run: python3 gophish_create_compaigns.py urls_0.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment