├── Common └── __init__.py ├── Helpers ├── __init__.py ├── TemplateEdit.py ├── CmdLoop.py └── Helpers.py ├── Modules ├── __init__.py ├── External │ ├── __init__.py │ ├── Social │ │ ├── TwitterLink.py │ │ └── LinkedinGroup.py │ ├── Partners │ │ └── McAfeeThreatIntelligence.py │ ├── Storage │ │ └── GoogleSlideInvite.py │ ├── News │ │ └── BasicFoxNews.py │ └── Agency │ │ └── IRS-CorrectedW2.py ├── Internal │ ├── __init__.py │ ├── Hr │ │ ├── __init__.py │ │ ├── HRTaxCorectionW2.py │ │ ├── SocialMediaPolicy.py │ │ ├── WellnessProgram.py │ │ ├── PayScaleBonusGuideline.py │ │ ├── TelecommuteOpportunities.py │ │ ├── HRNewsArticle.py │ │ ├── EducationalPartnership.py │ │ ├── TelecommuteDecrease.py │ │ └── TelecommutePolicyUpdate.py │ ├── Marketing │ │ ├── __init__.py │ │ └── CyberNews.py │ ├── IT │ │ ├── MobileComputing.py │ │ ├── PhishingAlert.py │ │ ├── NoticeofMonitoring.py │ │ ├── WebsiteDevelopmentTest.py │ │ ├── Office365Migration.py │ │ └── BlockedWebsite.py │ ├── Facilities │ │ └── BuildingInspection.py │ ├── Leadership │ │ ├── AppleEncryptionFBI.py │ │ ├── CFOBonusStructure.py │ │ └── PTOPolicyUpdate.py │ └── Agency │ │ └── GovBudgetReduction.py ├── Sample │ ├── BonusPayScale.png │ ├── LinkedinGroup.png │ ├── HRTaxCorrectionW2.png │ ├── SocialMediaPolicy.png │ ├── McAfeeThreatIntell.png │ └── Office365Migration.png └── EmailTemplates │ ├── WellnessProgram.email │ ├── FoxNewsBasicTemplate.email │ ├── GovBudgetReduction.email │ ├── BlockedWebsite.email │ ├── TwitterLink.email │ ├── PhishingAlert.email │ ├── WebsiteDevelopmentTest.email │ ├── BuildingInspection.email │ ├── IRS-CorrectedW2.email │ ├── NoticeOfMonitoring.email │ ├── CFOBonusStructure.email │ ├── MobileComputing.email │ ├── PayScaleBonusGuideline.email │ ├── HRTaxCorrectionW2.email │ ├── SocialMediaPolicy.email │ ├── AppleEncryptionFBI.email │ ├── Office365Migration.email │ ├── TelecommuteOpportunities.email │ ├── GoogleSlidesInvite.email │ ├── PTOPolicyUpdate.email │ └── LinkedinGroupTemplate.email ├── tests ├── __init__.py └── test_simplytemplate.py ├── .coveragerc ├── .landscape.yml ├── .travis.yml ├── .gitignore ├── SimplyTemplate.py ├── Setup.sh ├── README.md └── LICENSE /Common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Modules/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Modules/External/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Modules/Internal/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Modules/Internal/Marketing/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.coveragerc: -------------------------------------------------------------------------------- 1 | [report] 2 | omit = 3 | */python?.?/* 4 | */site-packages/nose/* 5 | *__init__* 6 | -------------------------------------------------------------------------------- /Modules/Sample/BonusPayScale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimplySecurity/SimplyTemplate/HEAD/Modules/Sample/BonusPayScale.png -------------------------------------------------------------------------------- /Modules/Sample/LinkedinGroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimplySecurity/SimplyTemplate/HEAD/Modules/Sample/LinkedinGroup.png -------------------------------------------------------------------------------- /Modules/Sample/HRTaxCorrectionW2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimplySecurity/SimplyTemplate/HEAD/Modules/Sample/HRTaxCorrectionW2.png -------------------------------------------------------------------------------- /Modules/Sample/SocialMediaPolicy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimplySecurity/SimplyTemplate/HEAD/Modules/Sample/SocialMediaPolicy.png -------------------------------------------------------------------------------- /.landscape.yml: -------------------------------------------------------------------------------- 1 | doc-warnings: no 2 | 3 | test-warnings: no 4 | max-line-length: 120 5 | autodetect: yes 6 | python-targets: 7 | - 2 8 | -------------------------------------------------------------------------------- /Modules/Sample/McAfeeThreatIntell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimplySecurity/SimplyTemplate/HEAD/Modules/Sample/McAfeeThreatIntell.png -------------------------------------------------------------------------------- /Modules/Sample/Office365Migration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimplySecurity/SimplyTemplate/HEAD/Modules/Sample/Office365Migration.png -------------------------------------------------------------------------------- /Modules/EmailTemplates/WellnessProgram.email: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimplySecurity/SimplyTemplate/HEAD/Modules/EmailTemplates/WellnessProgram.email -------------------------------------------------------------------------------- /tests/test_simplytemplate.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import SimplyTemplate 4 | from Common import TaskController 5 | 6 | def test_taskcontrollers(): 7 | Task = TaskController.Conducter() 8 | assert Task.Modules 9 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/FoxNewsBasicTemplate.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_FULL_NAME 3 | Date: 4 | Subject: Interesting News Article 5 | To: 6 | Content-Type: text/plain; charset=ISO-8859-1 7 | 8 |

TEXT_BLOCK_1

9 |

TEXT_BLOCK_2

10 |

TEXT_BLOCK_3

11 |

TEXT_BLOCK_4
FROM_FIRST_NAME

-------------------------------------------------------------------------------- /Modules/EmailTemplates/GovBudgetReduction.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_NAME 3 | Date: 4 | Subject: Reduction in TARGET_COMP_NAME Budget 5 | To: 6 | Content-Type: text/plain; charset=ISO-8859-1 7 | 8 |

TEXT_BLOCK_1

9 |

TEXT_BLOCK_2

10 |

TEXT_BLOCK_3

11 |

TEXT_BLOCK_4

12 |

TODAYS_DATE Budget Plan

13 |

Thank you,

14 |

TEXT_BLOCK_5

-------------------------------------------------------------------------------- /Modules/EmailTemplates/BlockedWebsite.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_NAME 3 | Date: 4 | Subject: Blocked Website Detected 5 | To: 6 | Content-Type: text/plain; charset=ISO-8859-1 7 | 8 |

NOTICE: TEXT_BLOCK_1

9 |

DATE: Starting TODAYS_DATE.

10 |

SUBJECT: TEXT_BLOCK_2

11 |

REMEDIATION: TEXT_BLOCK_3 Security Questions

12 |

CONTACT: TEXT_BLOCK_4

13 |

TARGET_COMP_NAME Security Operations Center (SOC)
TARGET_PHONE

-------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - "2.7" 4 | script: 5 | - pip install coveralls 6 | - pip install coverage 7 | - pip install nose 8 | - pip install glob2 9 | - pip install configparser 10 | - "sudo easy_install pip" 11 | - "sudo apt-get -y install w3m" 12 | - "sudo pip install glob2 --upgrade" 13 | - "sudo pip install configparser --upgrade" 14 | - "sudo apt-get install python python-tk idle python-pmw python-imaging" 15 | - "sudo chmod +x SimplyTemplate.py" 16 | - "sudo ./SimplyTemplate.py -l -v" 17 | - "sudo ./SimplyTemplate.py -h" 18 | - nosetests --with-coverage 19 | after_success: 20 | - coveralls 21 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/TwitterLink.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Date: 3 | Subject: Check out this tweet! 4 | From: FROM_NAME 5 | To: 6 | Content-Type: multipart/alternative; boundary=089e0116172e3f92ae83753da82c 7 | 8 | --089e0116172e3f92ae83753da82c 9 | 10 | Content-Type: text/plain; charset=UTF-80h 11 | 12 | my, look at what somebody posted on Twitter TARGET_LINK Someone is getting FIRED for this!! 13 | 14 | --089e0116172e3f92ae83753da82c 15 | 16 | Content-Type: text/html; charset=UTF-8 17 | 18 |

Oh my, look at what somebody posted on Twitter link

19 | 20 |

Someone is getting FIRED for this!!

21 | 22 | --089e0116172e3f92ae83753da82c -------------------------------------------------------------------------------- /Modules/EmailTemplates/PhishingAlert.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_NAME 3 | Date: 4 | Subject: TARGET_COMP_NAME Security Alert (Phishing) 5 | To: 6 | 7 |

The TARGET_COMP_NAME IT Security team has detected several active phishing campaigns that are targeting internal TARGET_COMP_NAME staff. These campaigns have been running through internal TARGET_COMP_NAME email for several weeks and are prompting users to click on URLs embedded within the email. The security team has been tracking these emails and has made a report available to you for review. Please take a moment to review these email subjects and report any suspicious emails you may be receiving.

8 |

Phishing Tracking Center

9 |

Remember to not click on links within any emails from untrusted sources.

10 |

Thank you,

11 |

TARGET_COMP_NAME IT Security Team

-------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | *.egg-info/ 23 | .installed.cfg 24 | *.egg 25 | 26 | # PyInstaller 27 | # Usually these files are written by a python script from a template 28 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 29 | *.manifest 30 | *.spec 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .coverage.* 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | *,cover 45 | 46 | # Translations 47 | *.mo 48 | *.pot 49 | 50 | # Django stuff: 51 | *.log 52 | 53 | # Sphinx documentation 54 | docs/_build/ 55 | 56 | # PyBuilder 57 | target/ 58 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/WebsiteDevelopmentTest.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_NAME 3 | Date: 4 | Subject: ACTION REQUIRED TARGET_COMP_NAME Website Development Test 5 | To: 6 | 7 |

Good Morning,

8 |

During the normal course of operations, TARGET_COMP_NAMEs development team continuously updates our website, and tests all updates to ensure no issues are introduced. As part of the Quality Assurance (QA) process, our Development team requested that a group of internal users help test the website before it is placed in production.

9 |

Please navigate to the QA Website and verify that all sections pertaining to your responsibilities are accurately reflected, and inform us of any issues you experience while interacting with the website.

10 |

We thank you for your time and participation. Your help will allow the development team to streamline the QA process, enabling more rapid deployments of website content and features in the future.

11 |

Thank you,

12 |

TARGET_COMP_NAME IT Development Team

-------------------------------------------------------------------------------- /Modules/EmailTemplates/BuildingInspection.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_NAME 3 | Date: Wed, 24 Apr 2013 17:37:17 -0400 4 | Subject: TARGET_COMP_NAME Facilities Inspected for Mold 5 | To: 6 | Content-Type: text/plain; charset=ISO-8859-1 7 | 8 |

Over the past several months TARGET_COMP_NAME has been doing testing in our facility for mold contamination. This note serves as an official notice that mold has been detected in several facilities. Because of this finding TARGET_COMP_NAME has decided to perform a more detailed analysis of our facilities.

9 |

If you have experienced any illnesses over the past several months related to respiratory illness (Bronchitis, Pneumonia, persistent cold and flu) we would like to know. This email contains a URL to a website were TARGET_COMP_NAME will be collecting all of this information.

10 |

Please take a few moments to fill out the online form here if you have been experiencing any symptoms that may be mold related. We will schedule testing in your area to determine if any mold exists in your location.

11 |

Thank you,
TARGET_COMP_NAME Facilities Management Team

-------------------------------------------------------------------------------- /Modules/EmailTemplates/IRS-CorrectedW2.email: -------------------------------------------------------------------------------- 1 | From: IRS-No-Reply 2 | Date: 3 | Subject: IRS-W2 Corrections 4 | To: 5 | Content-type: multipart/alternative; 6 | boundary="B_3539793613_1473794394" 7 | 8 | > This message is in MIME format. Since your mail reader does not understand 9 | this format, some or all of this message may not be legible. 10 | 11 | --B_3539793613_1473794394 12 | Content-type: text/plain; 13 | charset="UTF-8" 14 | Content-transfer-encoding: 7bit 15 | 16 | TEXT_BLOCK_1 17 | 18 | TEXT_BLOCK_2 19 | 20 | TARGET_LINK 21 | 22 | TEXT_BLOCK_3 23 | 24 | Thanks, 25 | FROM_AGENCY 26 | 27 | 28 | --B_3539793613_1473794394 29 | Content-type: text/html; 30 | charset="UTF-8" 31 | Content-transfer-encoding: quoted-printable 32 | 33 | 34 | 35 | 36 | 37 | 38 |

TEXT_BLOCK_1

39 |
40 |

TEXT_BLOCK_2

41 |
42 |

CorrectedW2-Instructions or TARGET_LINK

43 |
44 |

TEXT_BLOCK_3

45 |
46 |

Thanks,
47 | FROM_AGENCY

48 | 49 | 50 | 51 | 52 | --B_3539793613_1473794394-- 53 | 54 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/NoticeOfMonitoring.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_NAME 3 | Date: 4 | Subject: --- Notice of Monitoring --- 5 | To: 6 | 7 |

The TARGET_COMP_NAME Security Operations Center (SOC) has determined that your workstation has attempted on several occasions to browse web content that is forbidden by TARGET_COMP_NAME Security Policy.

8 |

Because of this activity the Client Services Implementation Team will begin reviewing all of your web usage logs. We will also need you to review the usage logs and complete a verification poll provided below. If you did not make these requests then the TARGET_COMP_NAME Security Operations Center will review your systems for potential malware.

9 |

Please open the following URL here and answer the questions provided. This should take no longer than 10 minutes to complete this poll. Please be as accurate as possible when answering these questions.

10 |

If you have any further questions, please contact your TARGET_COMP_NAME Information Security Officer through the contact link at the website located here.

11 |

Thank you,

12 |

TARGET_COMP_NAME Security Operations Center

-------------------------------------------------------------------------------- /Modules/EmailTemplates/CFOBonusStructure.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_CFO_NAME 3 | Date: 4 | Subject: Action Required - CFO Bonus Structure update 5 | To: 6 | Content-Type: text/plain; charset=ISO-8859-1 7 | 8 |

Team,

9 |

Please familiarize yourself with what FROM_CFO_NAME (CFO) just sent out to upper management. Please see the attached message that was just received, 10 | you will need to sign the form and return. Questions will arise with this major policy update, further guidance will be pushed out later tonight.

11 |

Very Respectfully,

12 | 13 |

FROM_CFO_NAME
14 | FROM_TITLE,
15 | e: FROM_REAL_EMAIL
16 | p: TARGET_PHONE

17 |

TARGET_ADDR
18 | TARGET_PHONE

19 |

TARGET_WEB_LINK

20 |

CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, is for the sole use of the intended recipient(s) and may contain confidential and privileged information or otherwise be protected by law. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply e-mail and destroy all copies of the original message.

-------------------------------------------------------------------------------- /Modules/EmailTemplates/MobileComputing.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | From: FROM_NAME 3 | Date: 4 | Subject: TARGET_COMP_NAME announces new mobile computing solution. 5 | To: 6 | 7 |

Team,

Over the past few months the TARGET_COMP_NAME internal engineering staff have been looking at ways of providing portable computing solutions to the TARGET_COMP_NAME staff. After months of work, our teams have decided on a solution that we feel best suits the TARGET_COMP_NAME mobile user community.

8 |

With that we would like to announce that the Apple iPad has been selected as our internal mobile computing platform. This is because of the secure operating system, many enhanced features and the support provided for the platform.

9 |

As a result, the TARGET_COMP_NAME IT support team will start to deploy iPads to select internal employees for use during work hours. These devices have been designed to allow our users to check email securely and access our Internet via a secure wireless connection. The users will be allowed to install applications on the devices that are on an approved list. You have been selected to start the initial pilot testing of this platform. If you wish to participate in this program please open the form below and fill out the online application. The iPad should be delivered to your office within 2 weeks and will be ready to use.

10 |

iPad Request Form

11 |

Thank you,

12 |

TARGET_COMP_NAME Mobile Platform Device Engineering Group

-------------------------------------------------------------------------------- /SimplyTemplate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import os 4 | import argparse 5 | import sys 6 | from Common import TaskController 7 | 8 | 9 | def cli_parser(): 10 | parser = argparse.ArgumentParser(add_help=False, description=''' 11 | Builds out full emails for an OP. 12 | ''') 13 | parser.add_argument( 14 | "-l", action='store_true', help="List the current Modules Loaded") 15 | parser.add_argument( 16 | "-v", action='store_true', help="Set this switch for verbose output of modules") 17 | parser.add_argument('-h', '-?', '--h', '-help', 18 | '--help', action="store_true", help=argparse.SUPPRESS) 19 | args = parser.parse_args() 20 | if args.h: 21 | parser.print_help() 22 | sys.exit() 23 | return args.l, args.v 24 | 25 | 26 | def TaskManger(): 27 | # Get all the options passed and pass it to the TaskConducter, this will 28 | # keep all the processioning on the side. 29 | # need to pass the store true somehow to tell printer to restrict output 30 | cli_list, cli_verbose = cli_parser() 31 | Task = TaskController.Conducter() 32 | if cli_list: 33 | Task.ListModules() 34 | sys.exit(0) 35 | Task.TaskSelector() 36 | 37 | 38 | def main(): 39 | # instantiate the class 40 | TaskManger() 41 | 42 | if __name__ == "__main__": 43 | try: 44 | main() 45 | except KeyboardInterrupt: 46 | print '\n [!] Interrupted' 47 | try: 48 | sys.exit(0) 49 | except SystemExit: 50 | os._exit(0) 51 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/PayScaleBonusGuideline.email: -------------------------------------------------------------------------------- 1 | Date: 2 | Subject: CUR_YEAR Payscale Guidelines 3 | From: FROM_FULL_NAME 4 | Mime-version: 1.0 5 | Content-type: multipart/alternative; 6 | boundary="B_3539950401_2088939626" 7 | 8 | > This message is in MIME format. Since your mail reader does not understand 9 | this format, some or all of this message may not be legible. 10 | 11 | --B_3539950401_2088939626 12 | Content-type: text/plain; 13 | charset="UTF-8" 14 | Content-transfer-encoding: 7bit 15 | 16 | ALCON, 17 | 18 | The TARGET_COMP_NAME Office of Human Resources has formalized the CUR_QUATER - CUR_YEAR enhanced bonus structure and compensation policy for the beginning of the year. 19 | 20 | The updated guidelines are available at TARGET_LINK. 21 | 22 | Regards, 23 | TARGET_HR_DIR 24 | Director of Human Resources 25 | 26 | 27 | --B_3539950401_2088939626 28 | Content-type: text/html; 29 | charset="UTF-8" 30 | Content-transfer-encoding: quoted-printable 31 | 32 |
ALCON,

The TARGET_COM= 35 | P_NAME Office of Human Resources has formalized the CUR_QUATER - CUR_YEAR en= 36 | hanced bonus structure and compensation policy for the beginning of the year= 37 | . 

The updated guidelines are available at TARGET_LINK

Regards,&= 39 | nbsp;
TARGET_HR_DIR 
Director of Human Resources&nb= 40 | sp;
41 | 42 | --B_3539950401_2088939626-- 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/HRTaxCorrectionW2.email: -------------------------------------------------------------------------------- 1 | From: TARGET_COMP_NAME Human Resources 2 | Date: 3 | Subject: (HOT) HR-W2 Corrections! 4 | To: 5 | Content-type: multipart/alternative; 6 | boundary="B_3539793613_1473794394" 7 | 8 | > This message is in MIME format. Since your mail reader does not understand 9 | this format, some or all of this message may not be legible. 10 | 11 | --B_3539793613_1473794394 12 | Content-type: text/plain; 13 | charset="UTF-8" 14 | Content-transfer-encoding: 7bit 15 | 16 | ALCON, 17 | 18 | 19 | Team, over the past few days we have had reports of issues with the distributed W-2's. 20 | As a result we are issuing W-2c (Corrected W-2) for a large subset of TARGET_COMP_NAME employees. 21 | Please review the following documentation immediately, and following the instructions provided to 22 | obtain the corrected W-2. 23 | 24 | 25 | TARGET_LINK 26 | 27 | 28 | Sorry for any inconvenience this has caused! 29 | 30 | 31 | Thanks, 32 | Human Resources Dept. 33 | TARGET_COMP_NAME 34 | 35 | 36 | --B_3539793613_1473794394 37 | Content-type: text/html; 38 | charset="UTF-8" 39 | Content-transfer-encoding: quoted-printable 40 | 41 | 42 | 43 | 44 | 45 | 46 |

ALCON,

47 |
48 |

Team, over the past few days we have had reports of issues with the distributed W-2's. 49 | As a result we are issuing W-2c (Corrected W-2) for a large subset of TARGET_COMP_NAME employees. 50 | Please review the following documentation immediately, and following the instructions provided to 51 | obtain the corrected W-2.

52 |
53 |

CorrectedW2-instructions.pdf or TARGET_LINK

54 |
55 |

Sorry for any inconvenience this has caused!

56 |
57 |

Thanks,
58 | Human Resources Dept.
59 | TARGET_COMP_NAME

60 | 61 | 62 | 63 | 64 | --B_3539793613_1473794394-- 65 | 66 | -------------------------------------------------------------------------------- /Helpers/TemplateEdit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | import Tkinter 4 | from Tkinter import * 5 | from ScrolledText import * 6 | import tkFileDialog 7 | import tkMessageBox 8 | import ScrolledText 9 | 10 | 11 | # A class to edit the material internal to the template 12 | # DONT look at this crap code, no idea lol 13 | global ReturnText 14 | 15 | 16 | def build(textPad, Text): 17 | textPad.insert('1.0', Text) 18 | 19 | 20 | def save_command(textPad, root): 21 | global ReturnText 22 | # slice off the last character from get, as an extra return is added 23 | data = textPad.get('1.0', END+'-1c') 24 | # file.write(data) 25 | # file.close() 26 | ReturnText = str(data) 27 | root.destroy() 28 | 29 | 30 | def exit_command(root): 31 | if tkMessageBox.askokcancel("Quit", "Do you really want to quit?"): 32 | root.destroy() 33 | 34 | 35 | def about_command(): 36 | label = tkMessageBox.showinfo("About", "SimplyTemplate Editor") 37 | 38 | 39 | def root(Text): 40 | global ReturnText 41 | root = Tkinter.Tk(className="SimplyTemplate Test Editor") 42 | textPad = ScrolledText.ScrolledText( 43 | root, width=100, height=15) # creates text area 44 | menu = Menu(root) 45 | root.config(menu=menu) 46 | filemenu = Menu(menu) 47 | menu.add_cascade(label="File", menu=filemenu) 48 | filemenu.add_command( 49 | label="Save", command=lambda: save_command(textPad, root)) 50 | filemenu.add_separator() 51 | filemenu.add_command(label="Exit", command=lambda: exit_command(root)) 52 | helpmenu = Menu(menu) 53 | menu.add_cascade(label="Help", menu=helpmenu) 54 | helpmenu.add_command(label="About...", command=about_command) 55 | # end of menu creation 56 | textPad.pack() 57 | build(textPad, Text) 58 | root.mainloop() 59 | try: 60 | if ReturnText: 61 | return ReturnText 62 | except: 63 | print " [!] No text returned / changed" 64 | pass 65 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/SocialMediaPolicy.email: -------------------------------------------------------------------------------- 1 | Subject: Social Media Policy 2 | From: TARGET_HR_DIR 3 | Mime-version: 1.0 4 | Content-type: multipart/alternative; 5 | boundary="B_3539950961_1068255931" 6 | 7 | > This message is in MIME format. Since your mail reader does not understand 8 | this format, some or all of this message may not be legible. 9 | 10 | --B_3539950961_1068255931 11 | Content-type: text/plain; 12 | charset="UTF-8" 13 | Content-transfer-encoding: 7bit 14 | 15 | Team, 16 | 17 | As social media becomes increasingly visible to the public, TARGET_COMP_NAME employees must be mindful of how their actions online may reflect on the company. When representing TARGET_COMP_NAME, employees should remain professional, courteous, and friendly to uphold our core values. 18 | Please sign the attached memorandum for the new Social Media Policy for TARGET_COMP_NAME employees. 19 | 20 | Regards, 21 | TARGET_HR_DIR 22 | Director of Human Resources 23 | 24 | 25 | --B_3539950961_1068255931 26 | Content-type: text/html; 27 | charset="UTF-8" 28 | Content-transfer-encoding: quoted-printable 29 | 30 |
Team, 

As social media becomes increasingly visible to the p= 34 | ublic, TARGET_COMP_NAME employees must be mindful of how their actions onlin= 35 | e may reflect on the company. When representing TARGET_COMP_NAME, employees = 36 | should remain professional, courteous, and friendly to uphold  our core= 37 | values. 
Please sign the attached memorandum for the new Soc= 38 | ial Media Policy for TARGET_COMP_NAME employees. 

<= 39 | div>Regards, 
TARGET_HR_DIR 
Director of Human= 40 | Resources 
41 | 42 | --B_3539950961_1068255931-- 43 | 44 | -------------------------------------------------------------------------------- /Setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Current supported platforms: 4 | # Kali-Linux 5 | # Global Variables 6 | runuser=$(whoami) 7 | tempdir=$(pwd) 8 | 9 | # Title Function 10 | func_title(){ 11 | # Clear (For Prettyness) 12 | clear 13 | 14 | # Echo Title 15 | echo '==========================================================================' 16 | echo ' SimpleTemplate Setup Script | [Updated]: ' 17 | echo '==========================================================================' 18 | echo ' [Web]: Http://CyberSyndicates.com | [Twitter]: @KillSwitch-GUI' 19 | echo '==========================================================================' 20 | } 21 | 22 | 23 | 24 | # Environment Checks 25 | func_check_env(){ 26 | # Check Sudo Dependency going to need that! 27 | if [ $(which sudo|wc -l) -eq '0' ]; then 28 | echo 29 | echo ' [ERROR]: This Setup Script Requires sudo!' 30 | echo ' Please Install sudo Then Run This Setup Again.' 31 | echo 32 | exit 1 33 | fi 34 | } 35 | 36 | func_install_requests(){ 37 | echo ' [*] Installing and updating requests libary' 38 | #Insure we have the latest requests module in python 39 | #sudo apt-get -q update 40 | #sudo apt-get -q upgrade 41 | sudo git pull 42 | sudo easy_install pip 43 | sudo apt-get -y install icedove 44 | sudo apt-get -y install w3m 45 | sudo apt-get install iceweasel -y 46 | sudo apt-get install python python-tk idle python-pmw python-imaging -y 47 | # we need to check for front end for this install 48 | cd /tmp/ 49 | sudo wget http://www.unmht.org/unmht/files/unmht-8.1.0.xpi 50 | sudo whiptail --msgbox "Please Hit (Install Now) & Please Close Iceweasel!" 10 40 51 | iceweasel unmht-8.1.0.xpi && 52 | sudo pip install glob2 --upgrade 53 | sudo pip install configparser --upgrade 54 | sudo chmod +x SimplyTemplate.py 55 | sudo rm /tmp/unmht-8.1.0.xpi 56 | } 57 | 58 | 59 | # Menu Case Statement 60 | case $1 in 61 | *) 62 | func_title 63 | func_check_env 64 | func_install_requests 65 | ;; 66 | 67 | esac 68 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/AppleEncryptionFBI.email: -------------------------------------------------------------------------------- 1 | MIME-Version: 1.0 2 | Subject: URGENT - TARGET_COMP_NAME Stance on Government Forced Decryption 3 | From: FROM_NAME 4 | Content-Type: multipart/alternative; boundary=001a113a98aeec0214052c9cd998 5 | 6 | --001a113a98aeec0214052c9cd998 7 | Content-Type: text/plain; charset=UTF-8 8 | 9 | All, 10 | 11 | It's a very important time for information security as we know it. The 12 | debate over the Apple vs. FBI issue is growing each day, with the very 13 | concepts of personal liberty vs. national security moving more into the 14 | public spotlight. 15 | 16 | There is no doubt that each of us hold strong personal opinions regarding 17 | this very important issue; however, as a company will need to deliver a 18 | unified message when customers ask. The official company stance regarding 19 | forced decryption can be found below. The document contains information 20 | about how our company fits into this issue, what our future plans around 21 | end-user encryption and privacy entail, and company policies around 22 | compliance with court orders. 23 | 24 | *Every employee is required to verify that they have read the document via 25 | the link below. As a token of our appreciation for your attention to this 26 | matter, the first 15 users who read and acknowledge the document will be 27 | given a $20 Starbucks gift card.* 28 | 29 | TARGET_LINK 30 | 31 | Thank you all for your continued hard work! 32 | FROM_NAME 33 | 34 | --001a113a98aeec0214052c9cd998 35 | Content-Type: text/html; charset=UTF-8 36 | Content-Transfer-Encoding: quoted-printable 37 | 38 |
All,

It's a very important time for= 39 | information security as we know it. The debate over the Apple vs. FBI issu= 40 | e is growing each day, with the very concepts of personal liberty vs. natio= 41 | nal security moving more into the public spotlight.

There is no doubt that each of us hold strong personal opinions regarding= 43 | this very important issue; however, as a company will need to deliver a un= 44 | ified message when customers ask. The official company stance regarding for= 45 | ced decryption can be found below. The document contains information about = 46 | how our company fits into this issue, what our future plans around end-user= 47 | encryption and privacy entail, and =C2=A0company policies around complianc= 48 | e with court orders.

Every employee is required= 49 | to verify that they have read the document via the link below. As a token = 50 | of our appreciation for your attention to this matter, the first 15 users w= 51 | ho read and acknowledge the document will be given a $20 Starbucks gift car= 52 | d.


Thank you all for your continued hard work!
FROM_NAME
55 | 56 | --001a113a98aeec0214052c9cd998-- -------------------------------------------------------------------------------- /Modules/External/Social/TwitterLink.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "TwitterLink.html" 18 | self.RenderName = "TwitterLink.html" 19 | self.CoreOptions = "[Html, Link]" 20 | self.RenderOptions = "[Html, Link]" 21 | # Required for each class: 22 | self.Name = "Quick Link to Twitter post!" 23 | self.Author = "Killswitch-GUI" 24 | self.Type = "Html" 25 | self.Info = """A very simple Tweet for a friend to checkout!""" 26 | self.Sophistication = "Low" 27 | self.SampleImage = str('''Modules/Sample/TwitterLink.png''') 28 | self.TemplatePath = str('''Modules/EmailTemplates/TwitterLink.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetLink": ["%URL%", "The full path link"], 34 | } 35 | 36 | def Generate(self, filename, location, Verbose=False): 37 | # Gen will get 38 | # Filename = the name of the output 39 | # Location = Where do you want to place the output 40 | # Verbose = Print all help data 41 | # adapted from Andy 42 | replaceDict = { 43 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 44 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 45 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 46 | } 47 | WritePath = str(filename) + str(location) 48 | 49 | with open(self.TemplatePath, 'r') as templateEmail: 50 | outputEmail = templateEmail.read() 51 | 52 | for dummy, value in replaceDict.iteritems(): 53 | outputEmail = outputEmail.replace(dummy, value) 54 | try: 55 | f = open(WritePath, 'w') 56 | f.write(outputEmail) 57 | f.close 58 | except Exception as e: 59 | print e 60 | 61 | def Render(self, Verbose=False): 62 | # Gen will get 63 | # Filename = the name of the output 64 | # Location = Where do you want to place the output 65 | # Verbose = Print all help data 66 | # adapted from Andy 67 | replaceDict = { 68 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 69 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 70 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 71 | } 72 | 73 | with open(self.TemplatePath, 'r') as templateEmail: 74 | outputEmail = templateEmail.read() 75 | 76 | for dummy, value in replaceDict.iteritems(): 77 | outputEmail = outputEmail.replace(dummy, value) 78 | return outputEmail 79 | -------------------------------------------------------------------------------- /Helpers/CmdLoop.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import readline 3 | import logging 4 | import Helpers 5 | 6 | LOG_FILENAME = '/tmp/completer.log' 7 | logging.basicConfig(filename=LOG_FILENAME, 8 | level=logging.DEBUG, 9 | ) 10 | 11 | 12 | class BufferAwareCompleter(object): 13 | # https://pymotw.com/2/readline/ 14 | 15 | def __init__(self, options): 16 | self.options = options 17 | self.current_candidates = [] 18 | return 19 | 20 | def complete(self, text, state): 21 | response = None 22 | if state == 0: 23 | # This is the first time for this text, so build a match list. 24 | 25 | origline = readline.get_line_buffer() 26 | begin = readline.get_begidx() 27 | end = readline.get_endidx() 28 | being_completed = origline[begin:end] 29 | words = origline.split() 30 | 31 | logging.debug('origline=%s', repr(origline)) 32 | logging.debug('begin=%s', begin) 33 | logging.debug('end=%s', end) 34 | logging.debug('being_completed=%s', being_completed) 35 | logging.debug('words=%s', words) 36 | 37 | if not words: 38 | self.current_candidates = sorted(self.options.keys()) 39 | else: 40 | try: 41 | if begin == 0: 42 | # first word 43 | candidates = self.options.keys() 44 | else: 45 | # later word 46 | first = words[0] 47 | candidates = self.options[first] 48 | 49 | if being_completed: 50 | # match options with portion of input 51 | # being completed 52 | self.current_candidates = [w for w in candidates 53 | if w.startswith(being_completed)] 54 | else: 55 | # matching empty string so use all candidates 56 | self.current_candidates = candidates 57 | 58 | logging.debug('candidates=%s', self.current_candidates) 59 | 60 | except (KeyError, IndexError), err: 61 | logging.error('completion error: %s', err) 62 | self.current_candidates = [] 63 | 64 | try: 65 | response = self.current_candidates[state] 66 | except IndexError: 67 | response = None 68 | logging.debug('complete(%s, %s) => %s', repr(text), state, response) 69 | return response 70 | 71 | 72 | def input_loop(): 73 | line = '' 74 | while line != 'stop': 75 | line = raw_input(Helpers.color(' [>] ')) 76 | return line 77 | 78 | 79 | def start_loop(cmddict): 80 | # Register our completer function 81 | readline.set_completer(BufferAwareCompleter( 82 | cmddict).complete) 83 | 84 | # Use the tab key for completion 85 | readline.parse_and_bind('tab: complete') 86 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/HRTaxCorectionW2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "HRTaxCorrectionW2.mht" 18 | self.RenderName = "HRTaxCorrectionW2.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "HR request for target to use link or download file to view" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A moderate template that is used to entice users to either download a file or click a link.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/HRTaxCorrectionW2.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/HRTaxCorrectionW2.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 33 | "TargetLink": ["%URL%", "The full path link"], 34 | } 35 | 36 | def Generate(self, filename, location, Verbose=False): 37 | # Gen will get 38 | # Filename = the name of the output 39 | # Location = Where do you want to place the output 40 | # Verbose = Print all help data 41 | # adapted from Andy 42 | replaceDict = { 43 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 44 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 45 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 46 | } 47 | WritePath = str(filename) + str(location) 48 | 49 | with open(self.TemplatePath, 'r') as templateEmail: 50 | outputEmail = templateEmail.read() 51 | 52 | for dummy, value in replaceDict.iteritems(): 53 | outputEmail = outputEmail.replace(dummy, value) 54 | try: 55 | f = open(WritePath, 'w') 56 | f.write(outputEmail) 57 | f.close 58 | except Exception as e: 59 | print e 60 | 61 | def Render(self, Verbose=False): 62 | # Gen will get 63 | # Filename = the name of the output 64 | # Location = Where do you want to place the output 65 | # Verbose = Print all help data 66 | # adapted from Andy 67 | replaceDict = { 68 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 69 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 70 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 71 | } 72 | 73 | with open(self.TemplatePath, 'r') as templateEmail: 74 | outputEmail = templateEmail.read() 75 | 76 | for dummy, value in replaceDict.iteritems(): 77 | outputEmail = outputEmail.replace(dummy, value) 78 | return outputEmail 79 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/SocialMediaPolicy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "SocialMediaPolicy.mht" 18 | self.RenderName = "SocialMediaPolicy.mht" 19 | self.CoreOptions = "[Text, Html, Attachment]" 20 | # Required for each class: 21 | self.Name = "Social Media Policy Signature Request" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Text" 24 | self.Info = """A very simple email template using a Attahment to deliver Payload and asking them to sign the OLE PDF.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/SocialMediaPolicy.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/SocialMediaPolicy.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "HrDirector": ["Ray Mongo", "The full name of the Director of HR"], 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 34 | } 35 | 36 | def Generate(self, filename, location, Verbose=False): 37 | # Gen will get 38 | # Filename = the name of the output 39 | # Location = Where do you want to place the output 40 | # Verbose = Print all help data 41 | # adapted from Andy 42 | replaceDict = { 43 | 'TARGET_HR_DIR': self.RequiredOptions["HrDirector"][0], 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 46 | } 47 | WritePath = str(filename) + str(location) 48 | 49 | with open(self.TemplatePath, 'r') as templateEmail: 50 | outputEmail = templateEmail.read() 51 | 52 | for dummy, value in replaceDict.iteritems(): 53 | outputEmail = outputEmail.replace(dummy, value) 54 | try: 55 | f = open(WritePath, 'w') 56 | f.write(outputEmail) 57 | f.close 58 | except Exception as e: 59 | print e 60 | 61 | def Render(self, Verbose=False): 62 | # Gen will get 63 | # Filename = the name of the output 64 | # Location = Where do you want to place the output 65 | # Verbose = Print all help data 66 | # adapted from Andy 67 | replaceDict = { 68 | 'TARGET_HR_DIR': self.RequiredOptions["HrDirector"][0], 69 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 70 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 71 | } 72 | 73 | with open(self.TemplatePath, 'r') as templateEmail: 74 | outputEmail = templateEmail.read() 75 | 76 | for dummy, value in replaceDict.iteritems(): 77 | outputEmail = outputEmail.replace(dummy, value) 78 | return outputEmail 79 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/Office365Migration.email: -------------------------------------------------------------------------------- 1 | Subject: Office 365 Migration 2 | From: Tech Support 3 | To: 4 | Date: 5 | Mime-version: 1.0 6 | Content-type: multipart/alternative; 7 | boundary="B_3539954124_543756244" 8 | 9 | > This message is in MIME format. Since your mail reader does not understand 10 | this format, some or all of this message may not be legible. 11 | 12 | --B_3539954124_543756244 13 | Content-type: text/plain; 14 | charset="UTF-8" 15 | Content-transfer-encoding: 7bit 16 | 17 | Team, 18 | 19 | We are excited to announce that information systems is currently in the process of migrating everyone to Office 365 in order to increase reliability and ease of access. Last night we did the initial migration and account sync. Continue using Outlook/Exchange until you hear otherwise, but if you want to login and check it out visit TARGET_LINK. Use your current windows credentials to login. 20 | 21 | Please let us know should you experience any difficulty. 22 | 23 | 24 | Technical Support 25 | Department of Technical Operations 26 | TARGET_COMP_NAME, TARGET_LOCATION 27 | TARGET_PHONE 28 | 29 | CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, is for the sole use of the intended recipient(s) and may contain confidential and privileged information or otherwise be protected by law. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply e-mail and destroy all copies of the original message. 30 | 31 | 32 | 33 | 34 | --B_3539954124_543756244 35 | Content-type: text/html; 36 | charset="UTF-8" 37 | Content-transfer-encoding: quoted-printable 38 | 39 |
Team, 
We are excited to announce that information systems is currentl= 43 | y in the process of migrating everyone to Office 365 in order to increase re= 44 | liability and ease of access. Last night we did the initial migration and ac= 45 | count sync. Continue using Outlook/Exchange  until you hear otherwise, = 46 | but if you want to login and check it out visit TARGET_LINK. Use your current windows credentials to= 47 | login. 

Please let us know should you experie= 48 | nce any difficulty.


Technical Suppor= 49 | t
Department of Technical Operations
TARGET_COMP_NAME, TARGET_LOCATION
TARGET_PHONE
 
CONFIDENTIA= 50 | LITY NOTICE: This e-mail message, including any attachments, is for the sole= 51 | use of the intended recipient(s) and may contain confidential and privilege= 52 | d information or otherwise be protected by law. Any unauthorized review, use= 53 | , disclosure or distribution  is prohibited. If you are not the intende= 54 | d recipient, please contact the sender by reply e-mail and destroy all copie= 55 | s of the original message. 


57 | 58 | --B_3539954124_543756244-- 59 | 60 | -------------------------------------------------------------------------------- /Modules/External/Partners/McAfeeThreatIntelligence.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | class TemplateModule: 4 | 5 | def __init__(self): 6 | self.OutputName = 'McAfeeThreatIntell.mht' 7 | self.RenderName = 'McAfeeThreatIntell.mht' 8 | self.CoreOptions = '[Text, Html, Link]' 9 | self.Name = 'McAfee Threat Intelligence Inside Feed.' 10 | self.Author = 'Killswitch-GUI' 11 | self.Type = 'Html' 12 | self.Info = 'A semi targeted email that pretends to be McAfee GTI notice for third party partners.' 13 | self.Sophistication = 'Medium' 14 | self.SampleImage = str('Modules/Sample/McAfeeThreatIntell.png') 15 | self.TemplatePath = str('Modules/EmailTemplates/McAfeeThreatIntell.email') 16 | self.RequiredOptions = {'FromEmail': ['noreply@agency.com', 'From Email'], 17 | 'FromName': ['Alex Jason', 'From Full Name'], 18 | 'TargetCompany': ['Cyber Power', 'Set the Target Company Full Name'], 19 | 'TargetLink': ['%URL%', 'The full path link'], 20 | 'CurrentDate': ['Sep 01, 2016', 'The current date'], 21 | 'CveNumber': ['CVE-2015-2456', 'CVE number for vuln'], 22 | 'VulnName': ['Adobe Flash Player RCE', 'CVE number for vuln'], 23 | 'VulnSoftware': ['Adobe Flash Player RCE', 'CVE number for vuln']} 24 | 25 | def Generate(self, filename, location, Verbose = False): 26 | replaceDict = {'FROM_EMAIL': self.RequiredOptions['FromEmail'][0], 27 | 'FROM_NAME': self.RequiredOptions['FromName'][0], 28 | 'TARGET_COMPANY': self.RequiredOptions['TargetCompany'][0], 29 | 'TARGET_LINK': self.RequiredOptions['TargetLink'][0], 30 | 'CUR_DATE': self.RequiredOptions['CurrentDate'][0], 31 | 'CVE_NUMBER': self.RequiredOptions['CveNumber'][0], 32 | 'VULN_SOFTWARE': self.RequiredOptions['VulnSoftware'][0], 33 | 'EXPLOIT_NAME': self.RequiredOptions['VulnName'][0]} 34 | WritePath = str(filename) + str(location) 35 | with open(self.TemplatePath, 'r') as templateEmail: 36 | outputEmail = templateEmail.read() 37 | for dummy, value in replaceDict.iteritems(): 38 | outputEmail = outputEmail.replace(dummy, value) 39 | 40 | try: 41 | f = open(WritePath, 'w') 42 | f.write(outputEmail) 43 | f.close 44 | except Exception as e: 45 | print e 46 | 47 | def Render(self, Verbose = False): 48 | replaceDict = {'FROM_EMAIL': self.RequiredOptions['FromEmail'][0], 49 | 'FROM_NAME': self.RequiredOptions['FromName'][0], 50 | 'TARGET_COMPANY': self.RequiredOptions['TargetCompany'][0], 51 | 'TARGET_LINK': self.RequiredOptions['TargetLink'][0], 52 | 'CUR_DATE': self.RequiredOptions['CurrentDate'][0], 53 | 'CVE_NUMBER': self.RequiredOptions['CveNumber'][0], 54 | 'VULN_SOFTWARE': self.RequiredOptions['VulnSoftware'][0], 55 | 'EXPLOIT_NAME': self.RequiredOptions['VulnName'][0]} 56 | with open(self.TemplatePath, 'r') as templateEmail: 57 | outputEmail = templateEmail.read() 58 | for dummy, value in replaceDict.iteritems(): 59 | outputEmail = outputEmail.replace(dummy, value) 60 | 61 | return outputEmail 62 | -------------------------------------------------------------------------------- /Modules/External/Storage/GoogleSlideInvite.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "GoogleSlidesInvite.eml" 18 | self.RenderName = "GoogleSlidesInvite.eml" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Google Slides Invite to Edit." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A Google Slides invite to edit a presentation from a fellow Co-Worker.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/GoogleSlidesInvite.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/GoogleSlidesInvite.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetLink": ["%URL%", "The full path link"], 34 | "SlidesName": ["HackTheWorld", "The name of the Google Slides shared"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'SHARE_DOCUMENT': self.RequiredOptions["SlidesName"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'SHARE_DOCUMENT': self.RequiredOptions["SlidesName"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Modules/Internal/IT/MobileComputing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "MobileComputing.html" 18 | self.RenderName = "MobileComputing.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "Mangment move torwards providing portable computing solutions." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A template focusing on letting users to belive they will be issued a ipad template for mobile computing.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/MobileComputing.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/MobileComputing.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 34 | "TargetLink": ["%URL%", "The full path link"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Modules/Internal/IT/PhishingAlert.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "PhishingAlert.html" 18 | self.RenderName = "PhishingAlert.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "IT security alert regarding Phishing taking place." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A quick template that talks about the security team has detected several active phishing campaigns that are targeting internal staff.""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/PhishingAlert.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/PhishingAlert.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 34 | "TargetLink": ["%URL%", "The full path link"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Modules/Internal/Facilities/BuildingInspection.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "BuildingInspection.html" 18 | self.RenderName = "BuildingInspection.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "Facility testing for mold contamination." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A template that informs users about testing the facility for mold contamination, while asking the userbase for potential illiness.""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/BuildingInspection.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/BuildingInspection.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 34 | "TargetLink": ["%URL%", "The full path link"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/WellnessProgram.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "WellnessProgram.html" 18 | self.RenderName = "WellnessProgram.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "HR Email attempting to get users to to follow a link for Wellness Programs." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A quick template that entices users by a 10% discount for all employees who choose to participate in any of the activities listed.""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/WellnessProgram.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/WellnessProgram.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 34 | "TargetLink": ["%URL%", "The full path link"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Modules/Internal/IT/NoticeofMonitoring.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "NoticeofMonitoring.html" 18 | self.RenderName = "NoticeofMonitoring.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "IT Dev team alert on website updates." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A quick template that informs user that they will be monitored for past browsing history within their Company. This will try to get them to answer a few questions""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/NoticeofMonitoring.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/NoticeOfMonitoring.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 34 | "TargetLink": ["%URL%", "The full path link"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Helpers/Helpers.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import os 4 | import sys 5 | import types 6 | import string 7 | import textwrap 8 | import subprocess 9 | import re 10 | 11 | 12 | def color(string, status=True, warning=False, bold=True, blue=False, firewall=False, green=False): 13 | """ 14 | Change text color for the linux terminal, defaults to green. 15 | Set "warning=True" for red. 16 | stolen from Veil :) 17 | """ 18 | attr = [] 19 | if status: 20 | # green 21 | attr.append('34') 22 | if green: 23 | # green 24 | attr.append('32') 25 | if warning: 26 | # red 27 | attr.append('31') 28 | if bold: 29 | attr.append('1') 30 | if firewall: 31 | attr.append('33') 32 | if blue: 33 | # blue 34 | attr.append('34') 35 | return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string) 36 | 37 | 38 | def FormatLong(title, message, frontTab=True, spacing=16): 39 | """ 40 | Print a long title:message with our standardized formatting. 41 | Wraps multiple lines into a nice paragraph format. 42 | """ 43 | 44 | lines = textwrap.wrap(textwrap.dedent(message).strip(), width=50) 45 | returnString = "" 46 | 47 | i = 1 48 | if len(lines) > 0: 49 | if frontTab: 50 | returnString += "\t%s%s" % (('{0: <%s}' % 51 | spacing).format(title), lines[0]) 52 | else: 53 | returnString += " %s%s" % (('{0: <%s}' % 54 | (spacing-1)).format(title), lines[0]) 55 | while i < len(lines): 56 | if frontTab: 57 | returnString += "\n\t"+' '*spacing+lines[i] 58 | else: 59 | returnString += "\n"+' '*spacing+lines[i] 60 | i += 1 61 | return returnString 62 | 63 | 64 | def Reindent(s, numSpaces): 65 | # http://code.activestate.com/recipes/66055-changing-the-indentation-of-a-multi-line-string/ 66 | s = string.split(s, '\n') 67 | s = [(numSpaces * ' ') + string.lstrip(line) for line in s] 68 | s = string.join(s, '\n') 69 | return s 70 | 71 | 72 | def DirectoryListing(directory): 73 | # Returns a list of dir's of results 74 | dirs = [] 75 | for (dir, _, files) in os.walk(directory): 76 | for f in files: 77 | path = os.path.join(dir, f) 78 | if os.path.exists(path): 79 | dirs.append(path) 80 | return dirs 81 | 82 | 83 | def Exit(): 84 | p = " [!] SimplyTemplate now exiting..." 85 | print color(p, warning=True) 86 | raise SystemExit 87 | 88 | 89 | def SelfUpdate(): 90 | p = " [!] SimplyTemplate now Updating.." 91 | print color(p, firewall=True) 92 | try: 93 | val = subprocess.check_output(("sudo", "git", "pull")) 94 | print val 95 | except Exception as e: 96 | print e 97 | print "Are we root?..." 98 | try: 99 | val2 = subprocess.check_output(("sudo", "sh", "Setup.sh")) 100 | print val2 101 | except Exception as e: 102 | print e 103 | print "Are we root?.." 104 | p = " [!] Please restart SimplyTemplate.." 105 | print color(p, firewall=True) 106 | Exit() 107 | 108 | 109 | def GetWords(text): 110 | return re.compile('\w+').findall(text) 111 | -------------------------------------------------------------------------------- /Modules/Internal/IT/WebsiteDevelopmentTest.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "WebsiteDevelopmentTest.html" 18 | self.RenderName = "WebsiteDevelopmentTest.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "IT Dev team alert on website updates." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A quick template that entices users by a email from the IT Development team requesting that a group of internal users help test the website before it is placed in production.""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/WebsiteDevelopmentTest.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/WebsiteDevelopmentTest.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 34 | "TargetLink": ["%URL%", "The full path link"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Modules/Internal/Leadership/AppleEncryptionFBI.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "AppleEncryptionFBI.mht" 18 | self.RenderName = "AppleEncryptionFBI.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Apple FBI Encryption stance from leadership" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Text" 24 | self.Info = """This broad email explains Apples current issues faced with Encryption, while providing leadership insight into the issue. This will work well with Gov agency's as well as IT corps.""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/AppleEncryptionFBI.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/AppleEncryptionFBI.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "TargetCompany": ["IRS", "Set the Target Company Full Name"], 32 | "TargetLink": ["http://Target.com/site.pdf", "Set the target link"], 33 | "FromName": ["Jeff Manny", "Set the from name"], 34 | "FromEmail": ["noreply@agency.com", "From Email"], 35 | } 36 | 37 | def Generate(self, filename, location, Verbose=False): 38 | # Gen will get 39 | # Filename = the name of the output 40 | # Location = Where do you want to place the output 41 | # Verbose = Print all help data 42 | # adapted from Andy 43 | replaceDict = { 44 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 45 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 46 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 47 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 48 | } 49 | WritePath = str(filename) + str(location) 50 | 51 | with open(self.TemplatePath, 'r') as templateEmail: 52 | outputEmail = templateEmail.read() 53 | 54 | for dummy, value in replaceDict.iteritems(): 55 | outputEmail = outputEmail.replace(dummy, value) 56 | try: 57 | f = open(WritePath, 'w') 58 | f.write(outputEmail) 59 | f.close 60 | except Exception as e: 61 | print e 62 | 63 | def Render(self, Verbose=False): 64 | # Gen will get 65 | # Filename = the name of the output 66 | # Location = Where do you want to place the output 67 | # Verbose = Print all help data 68 | # adapted from Andy 69 | replaceDict = { 70 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 71 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 72 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 73 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 74 | } 75 | 76 | with open(self.TemplatePath, 'r') as templateEmail: 77 | outputEmail = templateEmail.read() 78 | 79 | for dummy, value in replaceDict.iteritems(): 80 | outputEmail = outputEmail.replace(dummy, value) 81 | return outputEmail 82 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/TelecommuteOpportunities.email: -------------------------------------------------------------------------------- 1 | Subject: URGENT - Increased Telecommuting Opportunities 2 | From: FROM_NAME 3 | Mime-version: 1.0 4 | Content-type: multipart/alternative; 5 | boundary="B_3539951594_1557289887" 6 | 7 | > This message is in MIME format. Since your mail reader does not understand 8 | this format, some or all of this message may not be legible. 9 | 10 | --B_3539951594_1557289887 11 | Content-type: text/plain; 12 | charset="UTF-8" 13 | Content-transfer-encoding: 7bit 14 | 15 | All, 16 | 17 | Beginning in CUR_QUATER of this year there will be significantly increased 18 | opportunities for employees to telecommute. To prepare for this shift in 19 | operations, we are conducting a series of pilot rtests to resolve issues 20 | prior to full rollout. 21 | 22 | Your position qualifies you to participate in the first round of pilot 23 | testing, which will allow up to 100% telecommute. To take part in this test 24 | you will need to meet a few additional requirements, such as: 25 | 26 | - Internet connection with at least 10 MBps down, 3 MBps up 27 | - Working area suitable to allow distraction-free work and phone calls 28 | - Ability to print as needed 29 | - Ability to securely shred documents with cross-cut shredder 30 | 31 | 32 | To sign up to be in the pilot test, please fill out the Telecommute 33 | Eligibility Form at the link below by the End-of-Business DUE_DATE. 34 | Please note that the pilot testing group is selected on a first-come, 35 | first-serve basis. 36 | TARGET_LINK 37 | 38 | The testing group will be contacted on NOTIFICATION_DATE to notify of 39 | acceptance and provide next steps. 40 | NOTIFICATION_DATE 41 | Thank you, 42 | FROM_NAME 43 | 44 | 45 | 46 | --B_3539951594_1557289887 47 | Content-type: text/html; 48 | charset="UTF-8" 49 | Content-transfer-encoding: quoted-printable 50 | 51 |
All,

Beginning in CUR_QUATER of this year there will be significa= 55 | ntly increased
opportunities for employees to telecommute. To prep= 56 | are for this shift in
operations, we are conducting a series of pi= 57 | lot tests to resolve issues
prior to full rollout.

<= 58 | /div>
Your position qualifies you to participate in the first round of p= 59 | ilot
testing, which will allow up to 100% telecommute. To take par= 60 | t in this test
you will need to meet a few additional requirements= 61 | , such as:

   - Internet connection with = 62 | at least 10 MBps down, 3 MBps up
   - Working area suita= 63 | ble to allow distraction-free work and phone calls
   - = 64 | Ability to print as needed
   - Ability to securely shre= 65 | d documents with cross-cut shredder


= 66 | To sign up to be in the pilot test, please fill out the Telecommute
Eligibility Form at the link below by the End-of-Business DUE_DATE.
<= 68 | div>Please note that the pilot testing group is selected on a first-come,
first-serve basis.
TARGET_LINK

The testing group will be contacted on NOTIFICATION_DATE to notify of
acceptance and provide next steps.

<= 71 | /div>
Thank you,
FROM_NAME

73 | 74 | --B_3539951594_1557289887-- 75 | 76 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/PayScaleBonusGuideline.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "PayScaleBonusGuideline.mht" 18 | self.RenderName = "PayScaleBonusGuideline.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Pay Scale and Bonus Guideline Basic Link" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Text" 24 | self.Info = """A very simple email template using a standard link from a user Asking them to check out the new Bonus and Pay standards from HR.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/BonusPayScale.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/PayScaleBonusGuideline.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "HrDirector": ["Ray Mongo", "The full name of the Director of HR"], 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "CurrentYear": ["2016", "Current Year"], 34 | "CurrentQuater": ["Q1", "Current Fiscal Quater"], 35 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 36 | "Url" : ["""%URL%""", "Link to payload or stat collection"], 37 | } 38 | 39 | def Generate(self, filename, location, Verbose=False): 40 | # Gen will get 41 | # Filename = the name of the output 42 | # Location = Where do you want to place the output 43 | # Verbose = Print all help data 44 | # adapted from Andy 45 | replaceDict = { 46 | 'TARGET_HR_DIR': self.RequiredOptions["HrDirector"][0], 47 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 48 | 'CUR_YEAR': self.RequiredOptions["CurrentYear"][0], 49 | 'CUR_QUATER': self.RequiredOptions["CurrentQuater"][0], 50 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 51 | 'TARGET_LINK': self.RequiredOptions["Url"][0], 52 | } 53 | WritePath = str(filename) + str(location) 54 | 55 | with open(self.TemplatePath, 'r') as templateEmail: 56 | outputEmail = templateEmail.read() 57 | 58 | for dummy, value in replaceDict.iteritems(): 59 | outputEmail = outputEmail.replace(dummy, value) 60 | try: 61 | f = open(WritePath, 'w') 62 | f.write(outputEmail) 63 | f.close 64 | except Exception as e: 65 | print e 66 | 67 | def Render(self, Verbose=False): 68 | # Gen will get 69 | # Filename = the name of the output 70 | # Location = Where do you want to place the output 71 | # Verbose = Print all help data 72 | # adapted from Andy 73 | replaceDict = { 74 | 'TARGET_HR_DIR': self.RequiredOptions["HrDirector"][0], 75 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 76 | 'CUR_YEAR': self.RequiredOptions["CurrentYear"][0], 77 | 'CUR_QUATER': self.RequiredOptions["CurrentQuater"][0], 78 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 79 | 'TARGET_LINK': self.RequiredOptions["Url"][0], 80 | } 81 | 82 | with open(self.TemplatePath, 'r') as templateEmail: 83 | outputEmail = templateEmail.read() 84 | 85 | for dummy, value in replaceDict.iteritems(): 86 | outputEmail = outputEmail.replace(dummy, value) 87 | 88 | return outputEmail 89 | -------------------------------------------------------------------------------- /Modules/Internal/IT/Office365Migration.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "Office365Migration.mht" 18 | self.RenderName = "Office365Migration.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Office 365 Migration email from IT" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Text" 24 | self.Info = """This Targeted email works great with the correct Domain Name, and primary research to ensure that the target is using Office365 MX Records of SPF TXT Records.""" 25 | self.Sophistication = "High" 26 | self.SampleImage = str('''Modules/Sample/Office365Migration.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/Office365Migration.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 32 | "TargetLocation": ["Las Vegas", "Set the Target Company State"], 33 | "TargetPhone": ["1-800-CD-FOUR", "Set the Target Toll Free line"], 34 | "TargetLogo": ["http://Target.com/logo.png", "Set the Target Logo"], 35 | "TargetLink": ["%URL%", "The full path link"], 36 | "FromEmail": ["noreply@agency.com", "From Email"], 37 | } 38 | 39 | def Generate(self, filename, location, Verbose=False): 40 | # Gen will get 41 | # Filename = the name of the output 42 | # Location = Where do you want to place the output 43 | # Verbose = Print all help data 44 | # adapted from Andy 45 | replaceDict = { 46 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 47 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 48 | 'TARGET_LOGO': self.RequiredOptions["TargetLogo"][0], 49 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 50 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 51 | 'TARGET_LOCATION': self.RequiredOptions["TargetLocation"][0], 52 | } 53 | WritePath = str(filename) + str(location) 54 | 55 | with open(self.TemplatePath, 'r') as templateEmail: 56 | outputEmail = templateEmail.read() 57 | 58 | for dummy, value in replaceDict.iteritems(): 59 | outputEmail = outputEmail.replace(dummy, value) 60 | try: 61 | f = open(WritePath, 'w') 62 | f.write(outputEmail) 63 | f.close 64 | except Exception as e: 65 | print e 66 | 67 | def Render(self, Verbose=False): 68 | # Gen will get 69 | # Filename = the name of the output 70 | # Location = Where do you want to place the output 71 | # Verbose = Print all help data 72 | # adapted from Andy 73 | replaceDict = { 74 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 75 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 76 | 'TARGET_LOGO': self.RequiredOptions["TargetLogo"][0], 77 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 78 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 79 | 'TARGET_LOCATION': self.RequiredOptions["TargetLocation"][0], 80 | } 81 | 82 | with open(self.TemplatePath, 'r') as templateEmail: 83 | outputEmail = templateEmail.read() 84 | 85 | for dummy, value in replaceDict.iteritems(): 86 | outputEmail = outputEmail.replace(dummy, value) 87 | return outputEmail 88 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/TelecommuteOpportunities.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "TelecommuteOpportunities.mht" 18 | self.RenderName = "TelecommuteOpportunities.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Increased on opportunities for employees to telecommute." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A very targeted email to corps that would support Telecommute options in the first place. Telling users the increased opportunities for employees to telecommute can be effective to entice users act fast.""" 25 | self.Sophistication = "High" 26 | self.SampleImage = str( 27 | '''Modules/Sample/TelecommuteOpportunities.png''') 28 | self.TemplatePath = str( 29 | '''Modules/EmailTemplates/TelecommuteOpportunities.email''') 30 | # Required options for itself: 31 | self.RequiredOptions = { 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "FromName": ["Alex Jason", "From Full Name"], 34 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 35 | "TargetLink": ["%URL%", "The full path link"], 36 | "CurrentQuater": ["Q1", "Current Fiscal Quater"], 37 | "DueDate": ["Sep 01, 2016", "The Due Date of the Form"], 38 | "NotificationDate": ["Sep 01, 2016", "Notify of acceptance"], 39 | 40 | } 41 | 42 | def Generate(self, filename, location, Verbose=False): 43 | # Gen will get 44 | # Filename = the name of the output 45 | # Location = Where do you want to place the output 46 | # Verbose = Print all help data 47 | # adapted from Andy 48 | replaceDict = { 49 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 50 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 51 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 52 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 53 | 'CUR_QUATER': self.RequiredOptions["CurrentQuater"][0], 54 | 'DUE_DATE': self.RequiredOptions["DueDate"][0], 55 | 'NOTIFICATION_DATE': self.RequiredOptions["NotificationDate"][0], 56 | } 57 | WritePath = str(filename) + str(location) 58 | 59 | with open(self.TemplatePath, 'r') as templateEmail: 60 | outputEmail = templateEmail.read() 61 | 62 | for dummy, value in replaceDict.iteritems(): 63 | outputEmail = outputEmail.replace(dummy, value) 64 | try: 65 | f = open(WritePath, 'w') 66 | f.write(outputEmail) 67 | f.close 68 | except Exception as e: 69 | print e 70 | 71 | def Render(self, Verbose=False): 72 | # Gen will get 73 | # Filename = the name of the output 74 | # Location = Where do you want to place the output 75 | # Verbose = Print all help data 76 | # adapted from Andy 77 | replaceDict = { 78 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 79 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 80 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 81 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 82 | 'CUR_QUATER': self.RequiredOptions["CurrentQuater"][0], 83 | 'DUE_DATE': self.RequiredOptions["DueDate"][0], 84 | 'NOTIFICATION_DATE': self.RequiredOptions["NotificationDate"][0], 85 | } 86 | 87 | with open(self.TemplatePath, 'r') as templateEmail: 88 | outputEmail = templateEmail.read() 89 | 90 | for dummy, value in replaceDict.iteritems(): 91 | outputEmail = outputEmail.replace(dummy, value) 92 | return outputEmail 93 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/HRNewsArticle.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "CyberNews.mht" 18 | self.RenderName = "CyberNews.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Cyber News Letter" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "HTML/Text" 24 | self.Sophistication = "Medium" 25 | self.Info = """Using a custom news letter is common by HR and other depts. By setting up a proper and common HTML email you can easily get clicks and less likely to be reported.""" 26 | self.SampleImage = str('''Modules/Sample/CyberNewsLetter.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/CyberNewsLetter.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromFullName": ["Jim Bob", "Contacts Full Name"], 32 | "FromFirstName": ["Jim", "Contacts First Name"], 33 | "FromProfileUrl": ["http://k.com", "Linkedin Full Profile URL"], 34 | "FromTitle": ["CEO, ATD", "Contacts Full Title"], 35 | "FromOrg": ["YourMom, LLC", "Contacts Company"], 36 | "GroupName": ["Cyber Cyber Cyber", "Requested Group to Join"], 37 | "GroupUrl" : ["""%URL%""", "Custom GroupURL or CS URL"], 38 | "ProfilePic": ["http://tinyurl.com/oewvyo7", "Custom GroupURL or CS URL"], 39 | } 40 | 41 | def Generate(self, filename, location, Verbose=False): 42 | # Gen will get 43 | # Filename = the name of the output 44 | # Location = Where do you want to place the output 45 | # Verbose = Print all help data 46 | # adapted from Andy 47 | replaceDict = { 48 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 49 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 50 | 'FROM_PROFILE_URL': self.RequiredOptions["FromProfileUrl"][0], 51 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 52 | 'FROM_ORGANIZATION': self.RequiredOptions["FromOrg"][0], 53 | 'GROUP_NAME': self.RequiredOptions["GroupName"][0], 54 | 'GROUP_URL': self.RequiredOptions["GroupUrl"][0], 55 | 'PROFILE_PIC_URL': self.RequiredOptions["ProfilePic"][0] 56 | } 57 | WritePath = str(filename) + str(location) 58 | 59 | with open(self.TemplatePath, 'r') as templateEmail: 60 | outputEmail = templateEmail.read() 61 | 62 | for dummy, value in replaceDict.iteritems(): 63 | outputEmail = outputEmail.replace(dummy, value) 64 | try: 65 | f = open(WritePath, 'w') 66 | f.write(outputEmail) 67 | f.close 68 | except Exception as e: 69 | print e 70 | 71 | def Render(self, Verbose=False): 72 | # Gen will get 73 | # Filename = the name of the output 74 | # Location = Where do you want to place the output 75 | # Verbose = Print all help data 76 | # adapted from Andy 77 | replaceDict = { 78 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 79 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 80 | 'FROM_PROFILE_URL': self.RequiredOptions["FromProfileUrl"][0], 81 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 82 | 'FROM_ORGANIZATION': self.RequiredOptions["FromOrg"][0], 83 | 'GROUP_NAME': self.RequiredOptions["GroupName"][0], 84 | 'GROUP_URL': self.RequiredOptions["GroupUrl"][0], 85 | 'PROFILE_PIC_URL': self.RequiredOptions["ProfilePic"][0] 86 | } 87 | 88 | with open(self.TemplatePath, 'r') as templateEmail: 89 | outputEmail = templateEmail.read() 90 | 91 | for dummy, value in replaceDict.iteritems(): 92 | outputEmail = outputEmail.replace(dummy, value) 93 | 94 | return outputEmail 95 | -------------------------------------------------------------------------------- /Modules/Internal/Marketing/CyberNews.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "CyberNews.mht" 18 | self.OutputName = "RenderNews.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Cyber News Letter" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "HTML/Text" 24 | self.Sophistication = "High" 25 | self.Info = """Using a custom news letter is common by HR and other depts. By setting up a proper and common HTML email you can easily get clicks and less likely to be reported.""" 26 | self.SampleImage = str('''Modules/Sample/CyberNewsLetter.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/CyberNewsLetter.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromFullName": ["Jim Bob", "Contacts Full Name"], 32 | "FromFirstName": ["Jim", "Contacts First Name"], 33 | "FromProfileUrl": ["http://k.com", "Linkedin Full Profile URL"], 34 | "FromTitle": ["CEO, ATD", "Contacts Full Title"], 35 | "FromOrg": ["YourMom", "LLC", "Contacts Company"], 36 | "GroupName": ["Cyber Cyber Cyber", "Requested Group to Join"], 37 | "GroupUrl" : ["""%URL%""", "Custom GroupURL or CS URL"], 38 | "ProfilePic": ["http://tinyurl.com/oewvyo7", "Custom GroupURL or CS URL"], 39 | } 40 | 41 | def Generate(self, filename, location, Verbose=False): 42 | # Gen will get 43 | # Filename = the name of the output 44 | # Location = Where do you want to place the output 45 | # Verbose = Print all help data 46 | # adapted from Andy 47 | replaceDict = { 48 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 49 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 50 | 'FROM_PROFILE_URL': self.RequiredOptions["FromProfileUrl"][0], 51 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 52 | 'FROM_ORGANIZATION': self.RequiredOptions["FromOrg"][0], 53 | 'GROUP_NAME': self.RequiredOptions["GroupName"][0], 54 | 'GROUP_URL': self.RequiredOptions["GroupUrl"][0], 55 | 'PROFILE_PIC_URL': self.RequiredOptions["ProfilePic"][0] 56 | } 57 | WritePath = str(filename) + str(location) 58 | 59 | with open(self.TemplatePath, 'r') as templateEmail: 60 | outputEmail = templateEmail.read() 61 | 62 | for dummy, value in replaceDict.iteritems(): 63 | outputEmail = outputEmail.replace(dummy, value) 64 | try: 65 | f = open(WritePath, 'w') 66 | f.write(outputEmail) 67 | f.close 68 | except Exception as e: 69 | print e 70 | 71 | def Render(self, Verbose=False): 72 | # Gen will get 73 | # Filename = the name of the output 74 | # Location = Where do you want to place the output 75 | # Verbose = Print all help data 76 | # adapted from Andy 77 | replaceDict = { 78 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 79 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 80 | 'FROM_PROFILE_URL': self.RequiredOptions["FromProfileUrl"][0], 81 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 82 | 'FROM_ORGANIZATION': self.RequiredOptions["FromOrg"][0], 83 | 'GROUP_NAME': self.RequiredOptions["GroupName"][0], 84 | 'GROUP_URL': self.RequiredOptions["GroupUrl"][0], 85 | 'PROFILE_PIC_URL': self.RequiredOptions["ProfilePic"][0] 86 | } 87 | 88 | with open(self.TemplatePath, 'r') as templateEmail: 89 | outputEmail = templateEmail.read() 90 | 91 | for dummy, value in replaceDict.iteritems(): 92 | outputEmail = outputEmail.replace(dummy, value) 93 | 94 | return outputEmail 95 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/EducationalPartnership.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "EducationalPartnership.mht" 18 | self.RenderName = "EducationalPartnership.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Educational Partnership with local school for free $$" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Text" 24 | self.Info = """A very simple email template using a standard link from a user Asking them to sign up for Educational Partnership benfits.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/EducationalPartnership.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/EducationalPartnership.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "HrDirector": ["Ray Mongo", "The full name of the Director of HR"], 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "StartYear": ["2017", "Start year of paperwork"], 34 | "StartMonth": ["September", "Start month of paperwork"], 35 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 36 | "Url" : ["""%URL%""", "Link to payload or stat collection"], 37 | "PartnerSchoolAck" : ["Penn State University", "3 Letter abr of school"], 38 | "PartnerSchool" : ["PSU", "Full name of the school"], 39 | } 40 | 41 | def Generate(self, filename, location, Verbose=False): 42 | # Gen will get 43 | # Filename = the name of the output 44 | # Location = Where do you want to place the output 45 | # Verbose = Print all help data 46 | # adapted from Andy 47 | replaceDict = { 48 | 'TARGET_HR_DIR': self.RequiredOptions["HrDirector"][0], 49 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 50 | 'START_YEAR': self.RequiredOptions["StartYear"][0], 51 | 'START_MONTH': self.RequiredOptions["StartMonth"][0], 52 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 53 | 'TARGET_LINK': self.RequiredOptions["Url"][0], 54 | 'PARTNER_SCHOOL_ACK': self.RequiredOptions["PartnerSchoolAck"][0], 55 | 'PARTNER_SCHOOL': self.RequiredOptions["PartnerSchool"][0], 56 | } 57 | WritePath = str(filename) + str(location) 58 | 59 | with open(self.TemplatePath, 'r') as templateEmail: 60 | outputEmail = templateEmail.read() 61 | 62 | for dummy, value in replaceDict.iteritems(): 63 | outputEmail = outputEmail.replace(dummy, value) 64 | try: 65 | f = open(WritePath, 'w') 66 | f.write(outputEmail) 67 | f.close 68 | except Exception as e: 69 | print e 70 | 71 | def Render(self, Verbose=False): 72 | # Gen will get 73 | # Filename = the name of the output 74 | # Location = Where do you want to place the output 75 | # Verbose = Print all help data 76 | # adapted from Andy 77 | replaceDict = { 78 | 'TARGET_HR_DIR': self.RequiredOptions["HrDirector"][0], 79 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 80 | 'START_YEAR': self.RequiredOptions["StartYear"][0], 81 | 'START_MONTH': self.RequiredOptions["StartMonth"][0], 82 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 83 | 'TARGET_LINK': self.RequiredOptions["Url"][0], 84 | 'PARTNER_SCHOOL_ACK': self.RequiredOptions["PartnerSchoolAck"][0], 85 | 'PARTNER_SCHOOL': self.RequiredOptions["PartnerSchool"][0], 86 | } 87 | 88 | with open(self.TemplatePath, 'r') as templateEmail: 89 | outputEmail = templateEmail.read() 90 | 91 | for dummy, value in replaceDict.iteritems(): 92 | outputEmail = outputEmail.replace(dummy, value) 93 | 94 | return outputEmail 95 | -------------------------------------------------------------------------------- /Modules/External/Social/LinkedinGroup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "LinkedinGroup.mht" 18 | self.RenderName = "LinkedinGroup.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Linkedin Group Invite" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "HTML/Text" 24 | self.Info = """Linkedin uses a very common setup for group and user invites. This template takes advantage of this and uses the Rich HTML from a real email. Places your data into the template and generates a Html/Text Template for you.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/LinkedinGroup.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/LinkedinGroupTemplate.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromFullName": ["Jim Bob", "Contacts Full Name"], 32 | "FromFirstName": ["Jim", "Contacts First Name"], 33 | "FromProfileUrl": ["http://k.com", "Linkedin Full Profile URL"], 34 | "FromTitle": ["CEO, ATD", "Contacts Full Title"], 35 | "FromOrg": ["YourMom, LLC", "Contacts Company"], 36 | "GroupName": ["Cyber Cyber Cyber", "Requested Group to Join"], 37 | "GroupUrl" : ["""%URL%""", "Custom GroupURL or CS URL"], 38 | "ProfilePic": ["http://tinyurl.com/oewvyo7", "Custom GroupURL or CS URL"], 39 | } 40 | 41 | def Generate(self, filename, location, Verbose=False): 42 | # Gen will get 43 | # Filename = the name of the output 44 | # Location = Where do you want to place the output 45 | # Verbose = Print all help data 46 | # adapted from Andy 47 | replaceDict = { 48 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 49 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 50 | 'FROM_PROFILE_URL': self.RequiredOptions["FromProfileUrl"][0], 51 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 52 | 'FROM_ORGANIZATION': self.RequiredOptions["FromOrg"][0], 53 | 'GROUP_NAME': self.RequiredOptions["GroupName"][0], 54 | 'GROUP_URL': self.RequiredOptions["GroupUrl"][0], 55 | 'PROFILE_PIC_URL': self.RequiredOptions["ProfilePic"][0] 56 | } 57 | WritePath = str(filename) + str(location) 58 | 59 | with open(self.TemplatePath, 'r') as templateEmail: 60 | outputEmail = templateEmail.read() 61 | 62 | for dummy, value in replaceDict.iteritems(): 63 | outputEmail = outputEmail.replace(dummy, value) 64 | try: 65 | f = open(WritePath, 'w') 66 | f.write(outputEmail) 67 | f.close 68 | except Exception as e: 69 | print e 70 | 71 | def Render(self, Verbose=False): 72 | # Gen will get 73 | # Filename = the name of the output 74 | # Location = Where do you want to place the output 75 | # Verbose = Print all help data 76 | # adapted from Andy 77 | replaceDict = { 78 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 79 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 80 | 'FROM_PROFILE_URL': self.RequiredOptions["FromProfileUrl"][0], 81 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 82 | 'FROM_ORGANIZATION': self.RequiredOptions["FromOrg"][0], 83 | 'GROUP_NAME': self.RequiredOptions["GroupName"][0], 84 | 'GROUP_URL': self.RequiredOptions["GroupUrl"][0], 85 | 'PROFILE_PIC_URL': self.RequiredOptions["ProfilePic"][0] 86 | } 87 | 88 | with open(self.TemplatePath, 'r') as templateEmail: 89 | outputEmail = templateEmail.read() 90 | 91 | for dummy, value in replaceDict.iteritems(): 92 | outputEmail = outputEmail.replace(dummy, value) 93 | 94 | return outputEmail 95 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/TelecommuteDecrease.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "TelecommuteDecrease.mht" 18 | self.RenderName = "TelecommuteDecrease.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Decrease in opportunities for employees to telecommute." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A very targeted email to corps that would support Telecommute options in the first place. Telling users the decrease in opportunities for employees to telecommute can be effective to entice users act fast.""" 25 | self.Sophistication = "High" 26 | self.SampleImage = str( 27 | '''Modules/Sample/TelecommuteDecrease.png''') 28 | self.TemplatePath = str( 29 | '''Modules/EmailTemplates/TelecommuteDecrease.email''') 30 | # Required options for itself: 31 | self.RequiredOptions = { 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "FromName": ["Alex Jason", "From Full Name"], 34 | "FromTitle": ["Really Important CEO", "From Name Title"], 35 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 36 | "TargetLink": ["%URL%", "The full path link"], 37 | "CurrentQuater": ["Q1", "Current Fiscal Quater"], 38 | "DueDate": ["Sep 01, 2016", "The Due Date of the Form"], 39 | "NotificationDate": ["Sep 01, 2016", "Notify of acceptance"], 40 | 41 | } 42 | 43 | def Generate(self, filename, location, Verbose=False): 44 | # Gen will get 45 | # Filename = the name of the output 46 | # Location = Where do you want to place the output 47 | # Verbose = Print all help data 48 | # adapted from Andy 49 | replaceDict = { 50 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 51 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 52 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 53 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 54 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 55 | 'CUR_QUATER': self.RequiredOptions["CurrentQuater"][0], 56 | 'DUE_DATE': self.RequiredOptions["DueDate"][0], 57 | 'NOTIFICATION_DATE': self.RequiredOptions["NotificationDate"][0], 58 | } 59 | WritePath = str(filename) + str(location) 60 | 61 | with open(self.TemplatePath, 'r') as templateEmail: 62 | outputEmail = templateEmail.read() 63 | 64 | for dummy, value in replaceDict.iteritems(): 65 | outputEmail = outputEmail.replace(dummy, value) 66 | try: 67 | f = open(WritePath, 'w') 68 | f.write(outputEmail) 69 | f.close 70 | except Exception as e: 71 | print e 72 | 73 | def Render(self, Verbose=False): 74 | # Gen will get 75 | # Filename = the name of the output 76 | # Location = Where do you want to place the output 77 | # Verbose = Print all help data 78 | # adapted from Andy 79 | replaceDict = { 80 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 81 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 82 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 83 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 84 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 85 | 'CUR_QUATER': self.RequiredOptions["CurrentQuater"][0], 86 | 'DUE_DATE': self.RequiredOptions["DueDate"][0], 87 | 'NOTIFICATION_DATE': self.RequiredOptions["NotificationDate"][0], 88 | } 89 | 90 | with open(self.TemplatePath, 'r') as templateEmail: 91 | outputEmail = templateEmail.read() 92 | 93 | for dummy, value in replaceDict.iteritems(): 94 | outputEmail = outputEmail.replace(dummy, value) 95 | return outputEmail 96 | -------------------------------------------------------------------------------- /Modules/Internal/Leadership/CFOBonusStructure.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "CFOBonusStructure.html" 18 | self.RenderName = "CFOBonusStructure.html" 19 | self.CoreOptions = "[Html, Attachment]" 20 | # Required for each class: 21 | self.Name = "CFO Policy update to bonus." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A very intergrated CFO bonus policy update to the target. This template requires a large ammount of data / OSINT to build.""" 25 | self.Sophistication = "High" 26 | self.SampleImage = str('''Modules/Sample/CFOBonusStructure.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/CFOBonusStructure.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromCFOName": ["Alex Jason", "The Target CFO Full Name"], 33 | "FromRealEmail": ["alex@target.com", "The Target CFO real email"], 34 | "FromTitle": ["Chief Financial Officer", "Set the OSINT name gathered title"], 35 | "TargetLogo": ["http://Target.com/logo.png", "Set the Target Logo"], 36 | "TargetWebLink": ["Target.com", "Set the real target web link"], 37 | "TargetPhone": ["1-800-CD-FOUR", "Set the Target Toll Free line"], 38 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 39 | "TargetAddress": ["123 Street Las Vegas, NV, 12345", "Set the Target Company Addr"], 40 | } 41 | 42 | def Generate(self, filename, location, Verbose=False): 43 | # Gen will get 44 | # Filename = the name of the output 45 | # Location = Where do you want to place the output 46 | # Verbose = Print all help data 47 | # adapted from Andy 48 | replaceDict = { 49 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 50 | 'FROM_CFO_NAME': self.RequiredOptions["FromCFOName"][0], 51 | 'FROM_REAL_EMAIL': self.RequiredOptions["FromRealEmail"][0], 52 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 53 | 'TARGET_LOGO': self.RequiredOptions["TargetLogo"][0], 54 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 55 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 56 | 'TARGET_ADDR': self.RequiredOptions["TargetAddress"][0], 57 | 'TARGET_WEB_LINK': self.RequiredOptions["TargetWebLink"][0], 58 | } 59 | WritePath = str(filename) + str(location) 60 | 61 | with open(self.TemplatePath, 'r') as templateEmail: 62 | outputEmail = templateEmail.read() 63 | 64 | for dummy, value in replaceDict.iteritems(): 65 | outputEmail = outputEmail.replace(dummy, value) 66 | try: 67 | f = open(WritePath, 'w') 68 | f.write(outputEmail) 69 | f.close 70 | except Exception as e: 71 | print e 72 | 73 | def Render(self, Verbose=False): 74 | # Gen will get 75 | # Filename = the name of the output 76 | # Location = Where do you want to place the output 77 | # Verbose = Print all help data 78 | # adapted from Andy 79 | replaceDict = { 80 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 81 | 'FROM_CFO_NAME': self.RequiredOptions["FromCFOName"][0], 82 | 'FROM_REAL_EMAIL': self.RequiredOptions["FromRealEmail"][0], 83 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 84 | 'TARGET_LOGO': self.RequiredOptions["TargetLogo"][0], 85 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 86 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 87 | 'TARGET_ADDR': self.RequiredOptions["TargetAddress"][0], 88 | 'TARGET_WEB_LINK': self.RequiredOptions["TargetWebLink"][0], 89 | } 90 | 91 | with open(self.TemplatePath, 'r') as templateEmail: 92 | outputEmail = templateEmail.read() 93 | 94 | for dummy, value in replaceDict.iteritems(): 95 | outputEmail = outputEmail.replace(dummy, value) 96 | return outputEmail 97 | -------------------------------------------------------------------------------- /Modules/External/News/BasicFoxNews.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "FoxNews.html" 18 | self.RenderName = "FoxNews.html" 19 | self.CoreOptions = "[Text, Link]" 20 | # Required for each class: 21 | self.Name = "Fox News Basic Link" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Text" 24 | self.Info = """A very simple email template using a standard link from a user Asking them to open a news article.""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/FoxNews.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/FoxNewsBasicTemplate.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromFullName": ["Jim Bob", "Full Name of sender"], 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "FromFirstName": ["Jim", "Contacts First Name"], 34 | "SubjectTitle": ["Interesting News Article", "Contacts Full Title"], 35 | } 36 | self.RequiredText = { 37 | "TextBlock1": ["Hey,", "Open Statment"], 38 | "TextBlock2": ["Check out this article from FoxNews...", "Main Body"], 39 | "TextBlock3": ["Article", "Secondary Paragraph"], 40 | "TextBlock4": ["Thanks,", "Closing Statment"], 41 | } 42 | 43 | def Generate(self, filename, location, Verbose=False): 44 | # Gen will get 45 | # Filename = the name of the output 46 | # Location = Where do you want to place the output 47 | # Verbose = Print all help data 48 | # adapted from Andy 49 | replaceDict = { 50 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 51 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 52 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 53 | 'SUBJECT_TITLE': self.RequiredOptions["SubjectTitle"][0] 54 | } 55 | 56 | replaceTextDict = { 57 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 58 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 59 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 60 | 'TEXT_BLOCK_4': self.RequiredText["TextBlock4"][0], 61 | } 62 | WritePath = str(filename) + str(location) 63 | 64 | with open(self.TemplatePath, 'r') as templateEmail: 65 | outputEmail = templateEmail.read() 66 | 67 | for dummy, value in replaceTextDict.iteritems(): 68 | outputEmail = outputEmail.replace(dummy, value) 69 | 70 | for dummy, value in replaceDict.iteritems(): 71 | outputEmail = outputEmail.replace(dummy, value) 72 | try: 73 | f = open(WritePath, 'w') 74 | f.write(outputEmail) 75 | f.close 76 | except Exception as e: 77 | print e 78 | 79 | def Render(self, Verbose=False): 80 | # Gen will get 81 | # Filename = the name of the output 82 | # Location = Where do you want to place the output 83 | # Verbose = Print all help data 84 | # adapted from Andy 85 | replaceDict = { 86 | 'FROM_FULL_NAME': self.RequiredOptions["FromFullName"][0], 87 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 88 | 'FROM_FIRST_NAME': self.RequiredOptions["FromFirstName"][0], 89 | 'SUBJECT_TITLE': self.RequiredOptions["SubjectTitle"][0] 90 | } 91 | 92 | replaceTextDict = { 93 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 94 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 95 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 96 | 'TEXT_BLOCK_4': self.RequiredText["TextBlock4"][0], 97 | } 98 | 99 | with open(self.TemplatePath, 'r') as templateEmail: 100 | outputEmail = templateEmail.read() 101 | 102 | for dummy, value in replaceTextDict.iteritems(): 103 | outputEmail = outputEmail.replace(dummy, value) 104 | 105 | for dummy, value in replaceDict.iteritems(): 106 | outputEmail = outputEmail.replace(dummy, value) 107 | 108 | return outputEmail 109 | -------------------------------------------------------------------------------- /Modules/External/Agency/IRS-CorrectedW2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | from Helpers import TemplateEdit 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "IRS-CorrectedW2.mht" 18 | self.RenderName = "IRS-CorrectedW2.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Simple IRS phish to inform user their W2 is wrong and the IRS has been reported a Corrected version" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A moderate template that is used to entice users to either download a file or click a link.""" 25 | self.Sophistication = "Low" 26 | self.SampleImage = str('''Modules/Sample/IRS-CorrectedW2.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/IRS-CorrectedW2.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromAgency": ["Internal Revenue Service", "From Agency"], 33 | "TaxYear": ["2015", "Previous year / Tax Seasson"], 34 | "TargetLink": ["%URL%", "The full path link"], 35 | 36 | } 37 | self.RequiredText = { 38 | "TextBlock1": ["Dear User,", "Open Statment"], 39 | "TextBlock2": ["Sir / Madam, the IRS just received an electronic notice from your employer of a W-2c (W-2 Corrected). This email is in correspondence to inform you that (change / update) may be needed for your TAX_YEAR tax return. Please follow the link to be informed of your rights and instructions to refile your return.", "Main Paragraph"], 40 | "TextBlock3": ["Sorry for any inconvenience this has caused.", "Secondary Paragraph"], 41 | } 42 | 43 | def Generate(self, filename, location, Verbose=False): 44 | # Gen will get 45 | # Filename = the name of the output 46 | # Location = Where do you want to place the output 47 | # Verbose = Print all help data 48 | # adapted from Andy 49 | replaceDict = { 50 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 51 | 'FROM_AGENCY': self.RequiredOptions["FromAgency"][0], 52 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 53 | 'TAX_YEAR': self.RequiredOptions["TaxYear"][0], 54 | } 55 | 56 | replaceTextDict = { 57 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 58 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 59 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 60 | } 61 | WritePath = str(filename) + str(location) 62 | 63 | with open(self.TemplatePath, 'r') as templateEmail: 64 | outputEmail = templateEmail.read() 65 | 66 | for dummy, value in replaceTextDict.iteritems(): 67 | outputEmail = outputEmail.replace(dummy, value) 68 | 69 | for dummy, value in replaceDict.iteritems(): 70 | outputEmail = outputEmail.replace(dummy, value) 71 | try: 72 | f = open(WritePath, 'w') 73 | f.write(outputEmail) 74 | f.close 75 | except Exception as e: 76 | print e 77 | 78 | def Render(self, Verbose=False): 79 | # Gen will get 80 | # Filename = the name of the output 81 | # Location = Where do you want to place the output 82 | # Verbose = Print all help data 83 | # adapted from Andy 84 | replaceDict = { 85 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 86 | 'FROM_AGENCY': self.RequiredOptions["FromAgency"][0], 87 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 88 | 'TAX_YEAR': self.RequiredOptions["TaxYear"][0], 89 | } 90 | replaceTextDict = { 91 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 92 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 93 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 94 | } 95 | with open(self.TemplatePath, 'r') as templateEmail: 96 | outputEmail = templateEmail.read() 97 | 98 | for dummy, value in replaceTextDict.iteritems(): 99 | outputEmail = outputEmail.replace(dummy, value) 100 | 101 | for dummy, value in replaceDict.iteritems(): 102 | outputEmail = outputEmail.replace(dummy, value) 103 | return outputEmail 104 | -------------------------------------------------------------------------------- /Modules/Internal/Hr/TelecommutePolicyUpdate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "TelecommutePolicyUpdate.mht" 18 | self.RenderName = "TelecommutePolicyUpdate.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "Policy Update for employees to telecommute." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A very targeted email to corps that would support Telecommute options in the first place. Telling users a Policy Update has taken place for employees.""" 25 | self.Sophistication = "High" 26 | self.SampleImage = str( 27 | '''Modules/Sample/TelecommutPolicyUpdate.png''') 28 | self.TemplatePath = str( 29 | '''Modules/EmailTemplates/TelecommutePolicyUpdate.email''') 30 | # Required options for itself: 31 | self.RequiredOptions = { 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "FromName": ["Alex Jason", "From Full Name"], 34 | "FromTitle": ["Really Important CEO", "From Name Title"], 35 | "SignaturePhone": ["215-215-0000", "Signature block phone #"], 36 | "SignatureEmail" : ["alex.jason@Jason.com ", "Signature email address"], 37 | "ParentOrg" : ["ORG", "Set the Target parent ORG or the target name"], 38 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 39 | "TargetLink": ["%URL%", "The full path link"], 40 | "NextQuater": ["Q1", "Next Fiscal Quater"], 41 | "CurrentYear": ["2016", "Current Year"], 42 | "DueDate": ["Sep 01, 2016", "The Due Date of the Form"], 43 | 44 | } 45 | 46 | def Generate(self, filename, location, Verbose=False): 47 | # Gen will get 48 | # Filename = the name of the output 49 | # Location = Where do you want to place the output 50 | # Verbose = Print all help data 51 | # adapted from Andy 52 | replaceDict = { 53 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 54 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 55 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 56 | 'FROM_PHONE': self.RequiredOptions["SignaturePhone"][0], 57 | 'SIG_EMAIL': self.RequiredOptions["SignatureEmail"][0], 58 | 'PARRENT_COMP_NAME': self.RequiredOptions["ParentOrg"][0], 59 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 60 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 61 | 'NEXT_QUATER': self.RequiredOptions["NextQuater"][0], 62 | 'CUR_YEAR': self.RequiredOptions["CurrentYear"][0], 63 | 'DUE_DATE': self.RequiredOptions["DueDate"][0], 64 | } 65 | WritePath = str(filename) + str(location) 66 | 67 | with open(self.TemplatePath, 'r') as templateEmail: 68 | outputEmail = templateEmail.read() 69 | 70 | for dummy, value in replaceDict.iteritems(): 71 | outputEmail = outputEmail.replace(dummy, value) 72 | try: 73 | f = open(WritePath, 'w') 74 | f.write(outputEmail) 75 | f.close 76 | except Exception as e: 77 | print e 78 | 79 | def Render(self, Verbose=False): 80 | # Gen will get 81 | # Filename = the name of the output 82 | # Location = Where do you want to place the output 83 | # Verbose = Print all help data 84 | # adapted from Andy 85 | replaceDict = { 86 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 87 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 88 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 89 | 'FROM_PHONE': self.RequiredOptions["SignaturePhone"][0], 90 | 'SIG_EMAIL': self.RequiredOptions["SignatureEmail"][0], 91 | 'PARRENT_COMP_NAME': self.RequiredOptions["ParentOrg"][0], 92 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 93 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 94 | 'NEXT_QUATER': self.RequiredOptions["NextQuater"][0], 95 | 'CUR_YEAR': self.RequiredOptions["CurrentYear"][0], 96 | 'DUE_DATE': self.RequiredOptions["DueDate"][0], 97 | } 98 | 99 | with open(self.TemplatePath, 'r') as templateEmail: 100 | outputEmail = templateEmail.read() 101 | 102 | for dummy, value in replaceDict.iteritems(): 103 | outputEmail = outputEmail.replace(dummy, value) 104 | return outputEmail 105 | -------------------------------------------------------------------------------- /Modules/Internal/Leadership/PTOPolicyUpdate.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "PTOPolicyUpdate.mht" 18 | self.RenderName = "PTOPolicyUpdate.mht" 19 | self.CoreOptions = "[Text, Html, Link]" 20 | # Required for each class: 21 | self.Name = "PTO Policy Update from manangment" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """This Highly targted email asks for the user base to read the updated PTO guidelines attached.""" 25 | self.Sophistication = "High" 26 | self.SampleImage = str('''Modules/Sample/PTOPolicyUpdate.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/PTOPolicyUpdate.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromName": ["Jeff Manny", "Set the from name"], 32 | "FromEmail": ["noreply@agency.com", "From Email"], 33 | "FromTitle": ["CEO, ATD", "Contacts Full Title"], 34 | "FromRealEmail": ["alex@target.com", "The Target CFO real email"], 35 | "FutureDate": ["Sep 1, 2016", "Set the future date to complete document"], 36 | "TargetWebLink": ["Target.com", "Set the real target web link"], 37 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 38 | "TargetAddress": ["123 Street Las Vegas, NV, 12345", "Set the Target Company Addr"], 39 | "TargetLocation": ["Las Vegas", "Set the Target Company State"], 40 | "TargetPhone": ["1-800-CD-FOUR", "Set the Target Toll Free line"], 41 | "TargetLogo": ["http://Target.com/logo.png", "Set the Target Logo"], 42 | } 43 | 44 | def Generate(self, filename, location, Verbose=False): 45 | # Gen will get 46 | # Filename = the name of the output 47 | # Location = Where do you want to place the output 48 | # Verbose = Print all help data 49 | # adapted from Andy 50 | replaceDict = { 51 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 52 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 53 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 54 | 'FROM_REAL_EMAIL': self.RequiredOptions["FromRealEmail"][0], 55 | 'FUTURE_DATE': self.RequiredOptions["FutureDate"][0], 56 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 57 | 'TARGET_ADDR': self.RequiredOptions["TargetAddress"][0], 58 | 'TARGET_LOGO': self.RequiredOptions["TargetLogo"][0], 59 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 60 | 'TARGET_LOCATION': self.RequiredOptions["TargetLocation"][0], 61 | 'TARGET_WEB_LINK': self.RequiredOptions["TargetWebLink"][0], 62 | } 63 | WritePath = str(filename) + str(location) 64 | 65 | with open(self.TemplatePath, 'r') as templateEmail: 66 | outputEmail = templateEmail.read() 67 | 68 | for dummy, value in replaceDict.iteritems(): 69 | outputEmail = outputEmail.replace(dummy, value) 70 | try: 71 | f = open(WritePath, 'w') 72 | f.write(outputEmail) 73 | f.close 74 | except Exception as e: 75 | print e 76 | 77 | def Render(self, Verbose=False): 78 | # Gen will get 79 | # Filename = the name of the output 80 | # Location = Where do you want to place the output 81 | # Verbose = Print all help data 82 | # adapted from Andy 83 | replaceDict = { 84 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 85 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 86 | 'FROM_TITLE': self.RequiredOptions["FromTitle"][0], 87 | 'FROM_REAL_EMAIL': self.RequiredOptions["FromRealEmail"][0], 88 | 'FUTURE_DATE': self.RequiredOptions["FutureDate"][0], 89 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 90 | 'TARGET_ADDR': self.RequiredOptions["TargetAddress"][0], 91 | 'TARGET_LOGO': self.RequiredOptions["TargetLogo"][0], 92 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 93 | 'TARGET_LOCATION': self.RequiredOptions["TargetLocation"][0], 94 | 'TARGET_WEB_LINK': self.RequiredOptions["TargetWebLink"][0], 95 | } 96 | 97 | with open(self.TemplatePath, 'r') as templateEmail: 98 | outputEmail = templateEmail.read() 99 | 100 | for dummy, value in replaceDict.iteritems(): 101 | outputEmail = outputEmail.replace(dummy, value) 102 | return outputEmail 103 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/GoogleSlidesInvite.email: -------------------------------------------------------------------------------- 1 | 2 | MIME-Version: 1.0 3 | Date: 4 | Subject: SHARE_DOCUMENT - Invitation to edit 5 | From: "FROM_NAME (via Google Slides)" 6 | To: 7 | Content-Type: multipart/alternative; boundary=001a11344dd8243c63052d14a723 8 | 9 | --001a11344dd8243c63052d14a723 10 | Content-Type: text/plain; charset=UTF-8; format=flowed; delsp=yes 11 | 12 | I've shared an item with you: 13 | 14 | SHARE_DOCUMENT 15 | TARGET_LINK 16 | 17 | It's not an attachment -- it's stored online. To open this item, just click 18 | the link above. 19 | 20 | --001a11344dd8243c63052d14a723 21 | Content-Type: text/html; charset=UTF-8 22 | Content-Transfer-Encoding: quoted-printable 23 | 24 |
FROM_NAME has invited you to edit the following presentation:
Google Slides: Create and edit presentations online.3D"Logo
25 | --001a11344dd8243c63052d14a723-- 26 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/PTOPolicyUpdate.email: -------------------------------------------------------------------------------- 1 | Date: 2 | Subject: ACTION REQUIRED - PTO Statement 3 | From: FROM_NAME 4 | To: 5 | Thread-Topic: ACTION REQUIRED - PTO Statement 6 | Mime-version: 1.0 7 | Content-type: multipart/alternative; 8 | boundary="B_3539891551_264172583" 9 | 10 | > This message is in MIME format. Since your mail reader does not understand 11 | this format, some or all of this message may not be legible. 12 | 13 | --B_3539891551_264172583 14 | Content-type: text/plain; 15 | charset="UTF-8" 16 | Content-transfer-encoding: 7bit 17 | 18 | Team, 19 | 20 | Please take the time to review the updated PTO guidelines. Effective immediately the standard PTO schedule will increase by .5 hours per pay period for TARGET_COMP_NAME employees. This will require all TARGET_COMP_NAME employees to sign the updated policy and upload via Sharepoint, as outline in the attached instructions. 21 | 22 | The current suspense date for all employees to complete: FUTURE_DATE 23 | 24 | V/R 25 | 26 | 27 | 28 | FROM_NAME 29 | FROM_TITLE, 30 | e: FROM_REAL_EMAIL 31 | p: TARGET_PHONE 32 | 33 | TARGET_ADDR 34 | TARGET_PHONE 35 | 36 | TARGET_WEB_LINK 37 | 38 | 39 | 40 | 41 | CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, is for the sole use of the intended recipient(s) and may contain confidential and privileged information or otherwise be protected by law. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply e-mail and destroy all copies of the original message. 42 | 43 | 44 | 45 | 46 | --B_3539891551_264172583 47 | Content-type: text/html; 48 | charset="UTF-8" 49 | Content-transfer-encoding: quoted-printable 50 | 51 |
Team, 

Please take the time to review the updated PTO guideline= 56 | s. Effective immediately the standard PTO schedule will increase by .5  = 57 | ;hours per pay period for TARGET_COMP_NAME  employees. This w= 58 | ill require all TARGET_COMP_NAME employees to sign the updated policy a= 59 | nd upload via Sharepoint, as outlined  in the attached instructions. = 60 | ;

The current suspense date for all employe= 63 | es to complete: FUTURE_DATE

V/R


3D"Logo"

FROM_NAME
FROM_TITLE, 
e: FROM_R= 78 | EAL_EMAIL
p: TARGET_PHONE

TARGET_ADDR
TARGET_PHONE= 80 |

TARGET_WEB_LINK

 

 

CONFIDE= 86 | NTIALITY NOTICE: This e-mail message, including any attachments, is for the = 87 | sole use of the intended recipient(s) and may contain confidential and privi= 88 | leged information or otherwise be protected by law. Any unauthorized review,= 89 | use, disclosure or distribution is prohibited. If you are not the intended = 90 | recipient, please contact the sender by reply e-mail and destroy all copies = 91 | of the original message.

&n= 93 | bsp;

94 | 95 | --B_3539891551_264172583-- 96 | 97 | -------------------------------------------------------------------------------- /Modules/Internal/IT/BlockedWebsite.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "BlockedWebsite.html" 18 | self.RenderName = "BlockedWebsite.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "=IT SOC Alert that you have visted a BlockedWebsite" 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Text" 24 | self.Info = """This targeted email informs the user that the requested site was blocked by the SOC. Than asking the user to answer a few simple questions""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/BlockedWebsite.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/BlockedWebsite.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "TargetCompany": ["IRS", "Set the Target Company Full Name"], 32 | "TargetLink": ["http://Target.com/site.pdf", "Set the target link"], 33 | "TargetPhone": ["1-800-CD-FOUR", "Set the Target Toll Free line"], 34 | "TodaysDate": ["Jan 1, 2016", "Set the proper phish date"], 35 | "FromEmail": ["noreply@agency.com", "From Email"], 36 | } 37 | self.RequiredText = { 38 | "TextBlock1": ["It has been determined that your workstation is attempting to browse multiple blocked websites and we need your verification.", "Notice Statment"], 39 | "TextBlock2": ["If you did not make these requests, it is possible that your system has been compromised. Starting TODAYS_DATE, the Client Services Implementation Team will be reviewing your answers to the verification poll below. If you did not make these requests, the TARGET_COMP_NAME Security Operations Center (SOC) will need to remotely review your system for anomalies. If you were the one attempting to access these sites, no action will be taken and you are only asked to respect IT security policies in the future.", "Subject Statment"], 40 | "TextBlock3": ["Please click the following link to answer a few simple questions:", "Remediation"], 41 | "TextBlock4": ["Please contact your TARGET_COMP_NAME Information Security Officer through the contact link at the website listed above.", "Contact"] 42 | } 43 | 44 | def Generate(self, filename, location, Verbose=False): 45 | # Gen will get 46 | # Filename = the name of the output 47 | # Location = Where do you want to place the output 48 | # Verbose = Print all help data 49 | # adapted from Andy 50 | replaceDict = { 51 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 52 | 'TODAYS_DATE': self.RequiredOptions["TodaysDate"][0], 53 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 54 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 55 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 56 | } 57 | replaceTextDict = { 58 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 59 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 60 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 61 | 'TEXT_BLOCK_4': self.RequiredText["TextBlock4"][0], 62 | } 63 | WritePath = str(filename) + str(location) 64 | 65 | with open(self.TemplatePath, 'r') as templateEmail: 66 | outputEmail = templateEmail.read() 67 | 68 | for dummy, value in replaceTextDict.iteritems(): 69 | outputEmail = outputEmail.replace(dummy, value) 70 | 71 | for dummy, value in replaceDict.iteritems(): 72 | outputEmail = outputEmail.replace(dummy, value) 73 | try: 74 | f = open(WritePath, 'w') 75 | f.write(outputEmail) 76 | f.close 77 | except Exception as e: 78 | print e 79 | 80 | def Render(self, Verbose=False): 81 | # Gen will get 82 | # Filename = the name of the output 83 | # Location = Where do you want to place the output 84 | # Verbose = Print all help data 85 | # adapted from Andy 86 | replaceDict = { 87 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 88 | 'TODAYS_DATE': self.RequiredOptions["TodaysDate"][0], 89 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 90 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 91 | 'TARGET_PHONE': self.RequiredOptions["TargetPhone"][0], 92 | } 93 | replaceTextDict = { 94 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 95 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 96 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 97 | 'TEXT_BLOCK_4': self.RequiredText["TextBlock4"][0], 98 | } 99 | 100 | with open(self.TemplatePath, 'r') as templateEmail: 101 | outputEmail = templateEmail.read() 102 | 103 | for dummy, value in replaceTextDict.iteritems(): 104 | outputEmail = outputEmail.replace(dummy, value) 105 | 106 | for dummy, value in replaceDict.iteritems(): 107 | outputEmail = outputEmail.replace(dummy, value) 108 | return outputEmail 109 | -------------------------------------------------------------------------------- /Modules/Internal/Agency/GovBudgetReduction.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | 4 | # Class funcs will have: 5 | # -Name 6 | # -Author 7 | # -Sophistication 8 | # -Info 9 | 10 | # Required Options for the class 11 | 12 | 13 | class TemplateModule: 14 | 15 | def __init__(self): 16 | # Meta Tags for file name and such: 17 | self.OutputName = "GovBudgetReduction.html" 18 | self.RenderName = "GovBudgetReduction.html" 19 | self.CoreOptions = "[Html, Link]" 20 | # Required for each class: 21 | self.Name = "Mangment email on sequestration of the Gov." 22 | self.Author = "Killswitch-GUI" 23 | self.Type = "Html" 24 | self.Info = """A template focusing on long term financial issues and how to avoid sequestration. This template will be a good fit for must State/Gov orgs.""" 25 | self.Sophistication = "Medium" 26 | self.SampleImage = str('''Modules/Sample/GovBudgetReduction.png''') 27 | self.TemplatePath = str( 28 | '''Modules/EmailTemplates/GovBudgetReduction.email''') 29 | # Required options for itself: 30 | self.RequiredOptions = { 31 | "FromEmail": ["noreply@agency.com", "From Email"], 32 | "FromName": ["Alex Jason", "From Full Name"], 33 | "TodaysDate": ["Jan 1, 2016", "Set the proper phish date"], 34 | "TargetCompany": ["Cyber Power", "Set the Target Company Full Name"], 35 | "TargetLink": ["%URL%", "The full path link"], 36 | } 37 | self.RequiredText = { 38 | "TextBlock1" : ["""In the coming weeks our nations leadership will be working to draft a plan to prevent long term financial issues and how to avoid the "sequestration" that we have all heard about for the past few months. All departments within the US Government are being directed to draft plans to help meet the projected budget shortfalls and find ways to reducing spending within the US Government.""", "Paragraph one"], 39 | "TextBlock2": ["As a result the TARGET_COMP_NAME has developed a plan that will reduce the Information Technology budget by 25% over the next 18 months. This budget will include a reduction of current staff levels and also place a hiring freeze on new hires for the next 2 years. Current contractor staff will also be reduced by 20% to help drive a more lean workforce.", "Paragraph two"], 40 | "TextBlock3": ["The country has asked us all to learn to work more efficiently and do more with less. As a result many budgets and programs are also facing significant reductions. The senior management within TARGET_COMP_NAME will work with their teams to ensure a smooth transition process and will do all they can to help reduce the stress and uncertainties that come with any significant changes such as this.", "Paragraph three"], 41 | "TextBlock4": ["To read more about the budget plan for TODAYS_DATE please see the following page which outlines how this plan will be implemented and the projected time frames for the transitions.", "Ending Paragraph"], 42 | "TextBlock5": ["TARGET_COMP_NAME Management Team", "Signature Block"] 43 | } 44 | 45 | def Generate(self, filename, location, Verbose=False): 46 | # Gen will get 47 | # Filename = the name of the output 48 | # Location = Where do you want to place the output 49 | # Verbose = Print all help data 50 | # adapted from Andy 51 | replaceDict = { 52 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 53 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 54 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 55 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 56 | 'TODAYS_DATE': self.RequiredOptions["TodaysDate"][0], 57 | } 58 | replaceTextDict = { 59 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 60 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 61 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 62 | 'TEXT_BLOCK_4': self.RequiredText["TextBlock4"][0], 63 | 'TEXT_BLOCK_5': self.RequiredText["TextBlock5"][0], 64 | } 65 | WritePath = str(filename) + str(location) 66 | 67 | with open(self.TemplatePath, 'r') as templateEmail: 68 | outputEmail = templateEmail.read() 69 | 70 | for dummy, value in replaceTextDict.iteritems(): 71 | outputEmail = outputEmail.replace(dummy, value) 72 | 73 | for dummy, value in replaceDict.iteritems(): 74 | outputEmail = outputEmail.replace(dummy, value) 75 | try: 76 | f = open(WritePath, 'w') 77 | f.write(outputEmail) 78 | f.close 79 | except Exception as e: 80 | print e 81 | 82 | def Render(self, Verbose=False): 83 | # Gen will get 84 | # Filename = the name of the output 85 | # Location = Where do you want to place the output 86 | # Verbose = Print all help data 87 | # adapted from Andy 88 | replaceDict = { 89 | 'FROM_EMAIL': self.RequiredOptions["FromEmail"][0], 90 | 'FROM_NAME': self.RequiredOptions["FromName"][0], 91 | 'TARGET_LINK': self.RequiredOptions["TargetLink"][0], 92 | 'TARGET_COMP_NAME': self.RequiredOptions["TargetCompany"][0], 93 | 'TODAYS_DATE': self.RequiredOptions["TodaysDate"][0], 94 | } 95 | replaceTextDict = { 96 | 'TEXT_BLOCK_1': self.RequiredText["TextBlock1"][0], 97 | 'TEXT_BLOCK_2': self.RequiredText["TextBlock2"][0], 98 | 'TEXT_BLOCK_3': self.RequiredText["TextBlock3"][0], 99 | 'TEXT_BLOCK_4': self.RequiredText["TextBlock4"][0], 100 | 'TEXT_BLOCK_5': self.RequiredText["TextBlock5"][0], 101 | } 102 | with open(self.TemplatePath, 'r') as templateEmail: 103 | outputEmail = templateEmail.read() 104 | 105 | for dummy, value in replaceTextDict.iteritems(): 106 | outputEmail = outputEmail.replace(dummy, value) 107 | 108 | for dummy, value in replaceDict.iteritems(): 109 | outputEmail = outputEmail.replace(dummy, value) 110 | return outputEmail 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/killswitch-GUI/SimplyTemplate.svg?branch=master)](https://travis-ci.org/killswitch-GUI/SimplyTemplate) 2 | [![Code Health](https://landscape.io/github/SimplySecurity/SimplyTemplate/master/landscape.svg?style=flat)](https://landscape.io/github/SimplySecurity/SimplyTemplate/master) 3 | [![Coverage Status](https://coveralls.io/repos/github/killswitch-GUI/SimplyTemplate/badge.svg?branch=master)](https://coveralls.io/github/killswitch-GUI/SimplyTemplate?branch=master) 4 | # SimplyTemplate 5 | 6 | Phishing Template Generation Made Easy. The goal of this project was to hopefully speed up Phishing 7 | Template Gen as well as an easy way to ensure accuracy of your templates. Currently my standard Method 8 | of delivering emails is the Spear Phish in Cobalt strike so you will see proper settings for that by default. 9 | 10 | 11 | Current Platforms Supported: 12 | * Kali Linux 2.0 13 | * Kali Linux 1.0 14 | * Debian (deb8u3) 15 | 16 | Work Conducted by: 17 | ---------------------------------------------- 18 | * Alexander Rymdeko-Harvey [Twitter] @Killswitch-GUI -- [Web] [CyberSydicates.com](http://cybersyndicates.com) 19 | 20 | Major Call Outs!: 21 | ---------------------------------------------- 22 | * Chris Ross [@xorrior] 23 | * Steve Borosh [@rvrsh3ll] -- [web] [www.rvrsh3ll.net](http://www.rvrsh3ll.net/blog/) 24 | 25 | 26 | A few small benefits: 27 | - Easy for you to write modules (All you need is 1 required Class option and you're up and running) 28 | - Simple integration of Email Templates 29 | - Also the ability to change major settings fast without diving into the code (Coming) 30 | 31 | ## Understanding Module Types 32 | All templates will provide you with a small meta tag. This tag will help you quickly identify the 33 | capabilities of the module, also what the "content" supports. 34 | 35 | Sophistication Levels: 36 | - High == Requires proper OSINT / SE to build and effectively deploy the template. These are generally internal based templates with specific themes. 37 | - Medium == Requires a decent amount of modifications or settings, and are more general of a template external based template. 38 | - Low == Requires little to no modifications of the template and are generally not effective. 39 | 40 | Core Options: 41 | - Text == Text based option or output. 42 | - Html == Rich Html Supported for output (generally multipart Email Html/Text). 43 | - Link == Template supports a major link for stats or potential web download of document/Drive-by. 44 | - Attachment == Can support text that tells users to open or use the supplied attachment. 45 | 46 | Email Rendering: 47 | - Html == This was used by some to view the HTML markup but CSS does not render correctly (Basic Templates) 48 | - eml == Files can be outputed via .EML to open them directly in Icedove or Outlook 49 | - mht == MHTML is the Mail Html Markup used and can directly rendered in Word/IE or Iceweasel via plugin 50 | 51 | # Tips, Tricks, Notes 52 | The following is a collection trips and tricks to get your email in! 53 | 54 | ## Get Started 55 | Please RUN the simple Setup Bash script!!! 56 | ```Bash 57 | root@kali:~/Desktop/SimplyTemplate# sh Setup.sh 58 | or 59 | root@kali:~/Desktop/Simplytemplate# ./Setup.sh 60 | ``` 61 | ## Standard Commands 62 | ``` 63 | [>] help 64 | Availiable Commands: 65 | ----------------------------------------- 66 | [use] Select a template for use 67 | [list] List loaded Templates 68 | [info] Display metadata about a module 69 | [search] Search by Core Options / Sophistication 70 | [update] Update SimplyTemplate from Github 71 | [help] Display this menu 72 | [exit] Exit SimplyTemplate 73 | 74 | Availiable Template Commands: 75 | ----------------------------------------- 76 | [set] Set a option for the Template 77 | [info] Info about loaded Templates 78 | [gen] Generate Template 79 | [view] View Sample Template 80 | [render] Render Html of Email 81 | [back] Go back to main Menu 82 | [exit] Exit SimplyTemplate 83 | [>] 84 | ``` 85 | 86 | ## Standard Startup 87 | ``` 88 | ============================================================ 89 | Current: v0.1 | SimplyTemplate | [Web]: CyberSyndicates.com 90 | ============================================================ 91 | [Twitter]: @real_slacker007 | [Twitter]: @Killswitch_gui 92 | ============================================================ 93 | Main Selection Menu 94 | 95 | 6 Email Templates Loaded 96 | 97 | Commands: 98 | 99 | [use] Select a template for use 100 | [list] List loaded Templates 101 | [info] Display metadata about a module 102 | [search] Search by Core Options / Sophistication 103 | [update] Update SimplyTemplate from Github 104 | [help] Display this menu 105 | [exit] Exit SimplyTemplate 106 | [>] 107 | ``` 108 | ## List Modules 109 | ``` 110 | ============================================================ 111 | Current: v0.1 | SimplyTemplate | [Web]: CyberSyndicates.com 112 | ============================================================ 113 | [Twitter]: @real_slacker007 | [Twitter]: @Killswitch_gui 114 | ============================================================ 115 | 116 | [*] Available Modules are: Core Options: Sophistication: 117 | ------------------------- ------------- --------------- 118 | 1) Modules/Internal/Leadership/AppleEncryptionFBI.py [Text, Html, Link] [Low] 119 | 2) Modules/Internal/Leadership/CFOBonusStructure.py [Html, Attachment] [High] 120 | 3) Modules/Internal/IT/NoticeofMonitoring.py [Html, Link] [Low] 121 | 4) Modules/Internal/IT/BlockedWebsite.py [Html, Link] [Medium] 122 | 5) Modules/Internal/IT/WebsiteDevelopmentTest.py [Html, Link] [Low] 123 | 6) Modules/Internal/IT/PhishingAlert.py [Html, Link] [Low] 124 | 7) Modules/Internal/IT/Office365Migration.py [Text, Html, Link] [High] 125 | 8) Modules/Internal/Facilities/BuildingInspection.py [Html, Link] [Low] 126 | 9) Modules/Internal/Agency/GovBudgetReduction.py [Html, Link] [Medium] 127 | 10) Modules/Internal/Hr/TelecommuteOpportunities.py [Text, Html, Link] [High] 128 | 11) Modules/Internal/Hr/SocialMediaPolicy.py [Text, Html, Attachment] [Medium] 129 | 12) Modules/Internal/Hr/PayScaleBonusGuideline.py [Text, Html, Link] [Medium] 130 | 13) Modules/Internal/Hr/HRTaxCorectionW2.py [Text, Html, Link] [Medium] 131 | 14) Modules/Internal/Hr/WellnessProgram.py [Html, Link] [Low] 132 | 15) Modules/Internal/Hr/HRNewsArticle.py [Text, Html, Link] [Medium] 133 | 16) Modules/Internal/Marketing/CyberNews.py [Text, Html, Link] [High] 134 | 17) Modules/External/Social/LinkedinGroup.py [Text, Html, Link] [Medium] 135 | 18) Modules/External/News/BasicFoxNews.py [Text, Link] [Low] 136 | 19) Modules/External/Agency/OPMSalaryGuidelines.py [Html, Link] [Medium] 137 | 20) Modules/External/Agency/IRS-CorrectedW2.py [Text, Html, Link] [Low] 138 | ``` 139 | ## Use a module 140 | ``` 141 | ============================================================ 142 | Current: v0.1 | SimplyTemplate | [Web]: CyberSyndicates.com 143 | ============================================================ 144 | [Twitter]: @real_slacker007 | [Twitter]: @Killswitch_gui 145 | ============================================================ 146 | 147 | Template Loaded: CFO Policy update to bonus. 148 | 149 | 150 | 151 | Template Required Options: 152 | 153 | Setting Value Set Description of Setting 154 | ------- --------- ---------------------- 155 | FromCFOName Alex Jason The Target CFO Full Name 156 | FromEmail noreply@agency.com From Email 157 | FromRealEmail alex@target.com The Target CFO real email 158 | FromTitle Chief Financial Officer Set the OSINT name gathered title 159 | TargetAddress 123 Street Las Vegas, NV, 12345 Set the Target Company Addr 160 | TargetCompany Cyber Power Set the Target Company Full Name 161 | TargetLogo http://Target.com/logo.png Set the Target Logo 162 | TargetPhone 1-800-CD-FOUR Set the Target Toll Free line 163 | TargetWebLink Target.com Set the real target web link 164 | 165 | Availiable Template Commands: 166 | 167 | Command Description 168 | ------- ----------- 169 | [set] Set a option for the Template 170 | [info] Info about loaded Templates 171 | [gen] Generate Template 172 | [view] View Sample Template 173 | [render] Render Html of Email 174 | [back] Go back to main Menu 175 | [exit] Exit SimplyTemplate 176 | [>] 177 | ``` 178 | ## Simply Use Set and Gen 179 | ``` 180 | ============================================================ 181 | Current: v0.1 | SimplyTemplate | [Web]: CyberSyndicates.com 182 | ============================================================ 183 | [Twitter]: @real_slacker007 | [Twitter]: @Killswitch_gui 184 | ============================================================ 185 | 186 | Template Information: 187 | 188 | Name: Cyber News Letter 189 | Author Killswitch-GUI 190 | Type: HTML/Text 191 | Sophistication: Medium 192 | SampleImage: Modules/Sample/CyberNewsLetter.png 193 | Info: Using a custom news letter is common by HR and 194 | other depts. By setting up a 195 | proper and common HTML email you can easily 196 | get clicks and less likely to be reported. 197 | 198 | Template Required Options: 199 | 200 | Setting Value Set Description of Setting 201 | ------- --------- ---------------------- 202 | FromFirstName Jim Contacts First Name 203 | FromFullName Jim Bob Contacts Full Name 204 | FromOrg MOM, LLC Contacts Company 205 | FromProfileUrl http://k.com Linkedin Full Profile URL 206 | FromTitle CEO, ATD Contacts Full Title 207 | GroupName Cyber Cyber Cyber Requested Group to Join 208 | GroupUrl %URL% Custom GroupURL or CS URL 209 | ProfilePic http://tinyurl.com/oewvyo7 Custom GroupURL or CS URL 210 | 211 | [>] set FromOrg James Brown, LLC 212 | [>] gen 213 | ``` 214 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | 341 | -------------------------------------------------------------------------------- /Modules/EmailTemplates/LinkedinGroupTemplate.email: -------------------------------------------------------------------------------- 1 | From: FROM_FULL_NAME via LinkedIn 2 | Subject: FROM_FIRST_NAME invites you to join GROUP_NAME on LinkedIn 3 | MIME-Version: 1.0 4 | Content-Type: multipart/alternative; 5 | boundary="----=_Part_135285_1900035605.1443750258382" 6 | 7 | ------=_Part_135285_1900035605.1443750258382 8 | Content-Type: text/plain;charset=UTF-8 9 | Content-Transfer-Encoding: quoted-printable 10 | Content-ID: text-body 11 | 12 | I would like to invite you to join GROUP_NAME on LinkedIn Groups. 13 | 14 | - FROM_FULL_NAME 15 | 16 | View Group: GROUP_URL 17 | 18 | View FROM_FULL_NAME's profile: FROM_PROFILE_URL 19 | 20 | You received an invitation to connect. LinkedIn will use your email address to make suggestions to our members in features like People You May Know. Unsubscribe here: GROUP_URL Learn why we included this at the following link: GROUP_URL 21 | © 2015, LinkedIn Corporation. 2029 Stierlin Ct. Mountain View, CA 94043, USA 22 | ------=_Part_135285_1900035605.1443750258382 23 | Content-Type: text/html;charset=UTF-8 24 | Content-Transfer-Encoding: quoted-printable 25 | Content-ID: html-body 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 53 | 54 | 55 | 385 | 386 | 387 |
43 | 44 | 45 | 46 | 50 | 51 | 52 |
47 |
48 |   49 |
56 | 57 | 58 | 59 | 382 | 383 | 384 |
60 | 61 | 62 | 63 | 310 | 311 | 312 |
64 | 65 | 66 | 67 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 |
81 | 82 | 83 | 84 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 105 | 116 | 127 | 128 | 129 |
95 | 96 | 97 | 98 | 102 | 103 | 104 | 106 | 107 | 108 | 109 | 113 | 114 | 115 |
110 |
111 |   112 |
117 | 118 | 119 | 120 | 124 | 125 | 126 |
130 | 131 | 132 | 133 | 144 | 296 | 307 | 308 | 309 |
134 | 135 | 136 | 137 | 141 | 142 | 143 | 145 | 146 | 147 | 148 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 170 | 181 | 182 | 183 |
FROM_FULL_NAME 160 | 161 | 162 | 163 | 167 | 168 | 169 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 |
FROM_FULL_NAME
FROM_TITLE at FROM_ORGANIZATION
184 | 185 | 186 | 187 | 198 | 199 | 200 | 211 | 212 | 213 | 234 | 235 | 236 | 280 | 281 | 282 | 293 | 294 | 295 |
188 | 189 | 190 | 191 | 195 | 196 | 197 |
201 | 202 | 203 | 204 | 208 | 209 | 210 |
214 | 215 | 216 | 217 | 218 | 219 | 220 | 231 | 232 | 233 |
I would like to invite you to join GROUP_NAME on LinkedIn Groups.

- FROM_FULL_NAME
221 | 222 | 223 | 224 | 228 | 229 | 230 |
237 | 238 | 239 | 240 | 277 | 278 | 279 |
241 | 242 | 243 | 244 | 274 | 275 | 276 |
245 | 246 | 247 | 248 | 259 | 260 | 271 | 272 | 273 |
249 | 250 | 251 | 252 | 256 | 257 | 258 | View Group 261 | 262 | 263 | 264 | 268 | 269 | 270 |
283 | 284 | 285 | 286 | 290 | 291 | 292 |
297 | 298 | 299 | 300 | 304 | 305 | 306 |
313 | 314 | 315 | 316 | 379 | 380 | 381 |
317 | 318 | 319 | 320 | 331 | 332 | 333 | 363 | 364 | 365 | 376 | 377 | 378 |
321 | 322 | 323 | 324 | 328 | 329 | 330 |
334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 357 | 358 | 359 | 360 | 361 | 362 |
You received an invitation to connect. LinkedIn will use your email address to make suggestions to our members in features like People You May Know. Unsubscribe
Learn why we included this.
If you need assistance or have questions, please contact LinkedIn Customer Service.
347 | 348 | 349 | 350 | 354 | 355 | 356 |
© 2015, LinkedIn Corporation. 2029 Stierlin Ct. Mountain View, CA 94043, USA
366 | 367 | 368 | 369 | 373 | 374 | 375 |
388 | 389 | 390 | 391 | ------=_Part_135285_1900035605.1443750258382-- --------------------------------------------------------------------------------