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 newpage(name, path): try: with open(path) as file: html = file.read() page = Page(name=name, html=html) except(FileNotFoundError): exit('\n\tError: no such file {}\n'.format(path)) try: page = api.pages.post(page) print('Success: {} landing page created'.format(page.name)) return page except(AttributeError): exit('\n\tError: failed to create landing page (possible duplicate)\n')
def load_landings(api, assessment): """Return all landing pages in an assessment.""" pages = assessment["pages"] for page in pages: new_page = Page() new_page.name = page["name"] new_page.capture_credentials = page["capture_credentials"] new_page.capture_passwords = page["capture_passwords"] new_page.html = page["html"] if page["redirect_url"]: new_page.redirect_url = page["redirect_url"] # Debug page information logging.debug("Page Name: {}".format(new_page.name)) logging.debug("Redirect ULR: {}".format(new_page.redirect_url)) logging.debug("Capture Credentials: {}".format( new_page.capture_credentials)) logging.debug("Capture Passwords: {}".format( new_page.capture_passwords)) """ Catches when a page has already been loaded into GoPhish. Finds the current GoPhish page ID so it can be deleted prior to re-loading the new page. """ while True: try: new_page = api.pages.post(new_page) break except Error as e: if e.message == "Page name already in use": logging.warning( f"{e}. Finding with previously loaded page.") old_pages = api.pages.get() for old_page in old_pages: if old_page.name == new_page.name: logging.debug( f"Deleting Page with ID {old_page.id}") api.pages.delete(old_page.id) logging.info("Re-Loading new page.") else: logging.error(f"{e}\n") raise # Returns Landing Page ID logging.info(f"Landing Page {new_page.name} loaded.\n") page["id"] = new_page.id return pages
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")