def campaign_test(api, assessmentCampaigns, assessment_id): """Create test campaigns.""" tempGroups = [Group(name=add_group(api, assessment_id))] for campaign in assessmentCampaigns: tempUrl = campaign.url tempName = "Test-" + campaign.name tempPage = Page(name=campaign.page.name) tempTemplate = Template(name=campaign.template.name) tempSmtp = SMTP(name=campaign.smtp.name) postCampaign = Campaign( name=tempName, groups=tempGroups, page=tempPage, template=tempTemplate, smtp=tempSmtp, url=tempUrl, ) postCampaign = api.campaigns.post(postCampaign) logging.debug("Test Campaign added: {}".format(postCampaign.name)) logging.info("All Test campaigns added.") return True
def _import_into_gophish(self): users = self._zoom_results_to_gophish_users() group_name = f'{self.target_domain.split(".")[0]}-all' # Get user groups from gophish and match against current domain found_group_id = [ group.id for group in self.gophish_api.groups.get() if group.name == group_name ] if found_group_id: # Takes current results and PUTs them into the existing group in gophish click.secho( f'[+] gophish > updating existing users group \'{group_name}\'', fg='green') group_id = found_group_id[0] group = self.gophish_api.groups.get(group_id) group.targets = users group = self.gophish_api.groups.put(group) else: # Adds ZoomInfo results into gophish user group for domain click.secho( f'[+] gophish > adding users to group \'{group_name}\'', fg='green') group = self.gophish_api.groups.post( Group(name=group_name, targets=users))
def load_groups(api, assessment): """Return all groups in an assessment.""" groups = assessment["groups"] for group in groups: logging.info("Loading Group %s", group["name"]) new_group = Group() new_group.name = group["name"] for tgt in group["targets"]: target = User() target.first_name = tgt["first_name"] target.last_name = tgt["last_name"] target.email = tgt["email"] if tgt["position"]: target.position = tgt["position"] new_group.targets.append(target) """ Catches when a Group has already been loaded into Gophish. Finds the current Gophish group ID so it can be deleted prior to re-loading the new group. """ while True: try: new_group = api.groups.post(new_group) break except Error as e: if e.message == "Group name already in use": logging.warning( "%s. Finding previously loaded group to delete.", e) groups = api.groups.get() logging.debug( "Checking %d for previously imported group to get ID", len(groups), ) for old_group in groups: if old_group.name == new_group.name: logging.debug("Deleting Group with ID %d", old_group.id) api.groups.delete(old_group.id) logging.info("Re-Loading new group.") else: logging.exception( "Exception encountered when loading group in Gophish (%s)", e) raise group["id"] = new_group.id logging.info("Group Ready: %s", new_group.name) return groups
def send_to_gophish(userList): ''' create a group with the forged email addresses into gophish ''' print(okBox + 'Connecting to the goPhish API') api = Gophish(apiKey, host=host, verify=False) targets = [ User(first_name=u.firstname, last_name=u.lastname, email=u.getMail(), position=u.position) for u in userList ] group = Group(name='l2gp - ' + company, targets=targets) api.groups.post(group) print(okBox + 'Group created !')
def load_groups(api, assessment): """Return all groups in an assessment.""" groups = assessment["groups"] for group in groups: logging.info(f"Loading Group {group['name']}") new_group = Group() new_group.name = group["name"] for tgt in group["targets"]: target = User() target.first_name = tgt["first_name"] target.last_name = tgt["last_name"] target.email = tgt["email"] if tgt["position"]: target.position = tgt["position"] new_group.targets.append(target) """ Catches when a Group has already been loaded into GoPhish. Finds the current GoPhish group ID so it can be deleted prior to re-loading the new group. """ while True: try: new_group = api.groups.post(new_group) break except Error as e: if e.message == "Group name already in use": logging.warning( f"{e}. Finding previously loaded group to delete.") groups = api.groups.get() logging.debug( f"Checking {len(groups)} for previously imported group to get ID" ) for old_group in groups: if old_group.name == new_group.name: logging.debug( f"Deleting Group with ID {old_group.id}") api.groups.delete(old_group.id) logging.info("Re-Loading new group.") else: logging.error(f"{e}\n") raise group["id"] = new_group.id logging.info("Group Ready: {}\n".format(new_group.name)) return groups
def newgroup(name, path): targetlist = [] fieldnames = ['First Name', 'Last Name', 'Email', 'Position'] try: with open(path) as file: reader = csv.DictReader(file, fieldnames) for row in reader: if row: targetlist.append(newuser(row)) group = Group(name=name, targets=targetlist) except(FileNotFoundError): exit('\tError: no such file {}'.format(path)) try: group = api.groups.post(group) print('\nSuccess: {} target group created'.format(group.name)) return group except(AttributeError): exit('\n\tError: failed to create target group (possible duplicate)\n')
def add_group(api, assessment_id): """Create a test group.""" logging.info("Adding Test Group") newGroup = Group() newGroup.name = "Test-" + assessment_id # Holds list of Users to be added to group. targets = list() target = User() target.first_name = get_input("Enter First Name: ") # Receives the file name and checks if it exists. while target.first_name != "done" or target.first_name == "": target.last_name = get_input("Enter Last Name: ") while True: target.email = get_input("Enter Email: ") if not validate_email(target.email): print("In Valid Email") else: break target.position = get_input("Enter Org: ") targets.append(target) target = User() target.first_name = get_input("Enter First Name or 'done': ") newGroup.targets = targets newGroup = api.groups.post(newGroup) return newGroup.name
def build_campaigns(api, assessment): """Build campaigns.""" logging.info("Building Campaigns.") for campaign in assessment["campaigns"]: logging.info(f"Building Campaign: {campaign['name']}") # Build Template object new_template = Template( name=campaign["template"]["name"], subject=campaign["template"]["subject"], html=campaign["template"]["html"], text=campaign["template"]["text"], ) """ Catches when Template has already been loaded into GoPhish. Finds the current GoPhish template ID so it can be deleted prior to re-loading the new template. """ while True: try: new_template = api.templates.post(new_template) break except Error as e: if e.message == "Template name already in use": logging.warning( f"{e}. Finding previously loaded template to delete.") templates = api.templates.get() logging.debug( f"Checking {len(templates)} for previously imported template to get ID" ) for old_template in templates: if old_template.name == new_template.name: logging.debug( f"Deleting Template with ID {old_template.id}") api.templates.delete(old_template.id) logging.info("Re-Loading new template.") else: logging.error(f"{e}\n") raise # Build SMTP Object new_smtp = SMTP( name=campaign["smtp"]["name"], host=campaign["smtp"]["host"], from_address=campaign["smtp"]["from_address"], interface_type="SMTP", ignore_cert_errors=True, ) if ("username" in campaign["smtp"].keys() and "password" in campaign["smtp"].keys()): new_smtp.username = campaign["smtp"]["username"] new_smtp.password = campaign["smtp"]["password"] while True: try: new_smtp = api.smtp.post(new_smtp) break except Error as e: if e.message == "SMTP name already in use": logging.warning( f"{e}. Finding previously loaded smtp to delete.") smtps = api.smtp.get() logging.debug( f"Checking {len(smtps)} for previously imported smtp profiles to get ID" ) for old_smtp in smtps: if old_smtp.name == new_smtp.name: logging.debug( f"Deleting SMTP with ID {old_smtp.id}") api.smtp.delete(old_smtp.id) logging.info("Re-Loading new SMTP.") else: logging.error(f"{e}\n") raise # Check to remove any campaigns with the same name old_campaigns = api.campaigns.get() for old_campaign in old_campaigns: if old_campaign.name == campaign["name"]: logging.warning( f"Previous Campaign found with name {campaign['name']}.") logging.warning( f"Previous Campaign with id {old_campaign.id} being deleted." ) api.campaigns.delete(old_campaign.id) # Loads the campaign try: api.campaigns.post( Campaign( name=campaign["name"], groups=[Group(name=campaign["group_name"])], page=Page(name=campaign["page_name"]), template=new_template, smtp=new_smtp, url=campaign["url"], launch_date=campaign["launch_date"], completed_date=campaign["complete_date"], )) except Exception as e: logging.error(e) raise logging.info(f"Campaign {campaign['name']} successfully loaded.\n")