Пример #1
0
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
Пример #2
0
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')
Пример #3
0
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
Пример #4
0
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")