0% found this document useful (0 votes)
14 views6 pages

Se Toolkit

The document is a Python script for the Social-Engineer Toolkit (SET), which includes checks for the operating system, root access, and configuration files. It sets up necessary directories, logs, and permissions while also handling user agreements and menu options for the toolkit. The script incorporates error handling and cleanup routines to ensure smooth operation and user experience.

Uploaded by

David Armstrong
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views6 pages

Se Toolkit

The document is a Python script for the Social-Engineer Toolkit (SET), which includes checks for the operating system, root access, and configuration files. It sets up necessary directories, logs, and permissions while also handling user agreements and menu options for the toolkit. The script incorporates error handling and cleanup routines to ensure smooth operation and user experience.

Uploaded by

David Armstrong
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

#!

/usr/bin/env python3
# coding=utf-8
import os
import re
import shutil
import subprocess
import sys

# Py2/3 compatibility
# Python3 renamed raw_input to input
try:
input = raw_input
except NameError:
pass

# import main core functionality into SET


import src.core.setcore as core

# check which operating system


operating_system = core.check_os()

if operating_system == "posix":

#
# ROOT CHECK
#

if os.geteuid() != 0:
print("\n The Social-Engineer Toolkit (SET) - by David Kennedy (ReL1K)")
print("\n Not running as root. \n\nExiting the Social-Engineer Toolkit
(SET).\n")
core.exit_set()

# if we are running in the path no need to change


if os.path.isfile("setoolkit"):
pass

# check where we are and load default directory


elif os.path.isdir("/usr/local/share/setoolkit"):
if not os.path.isfile("setoolkit"):
os.chdir("/usr/local/share/setoolkit")
sys.path.append("/usr/local/share/setoolkit")

# check where we are and load default directory


elif os.path.isdir("/usr/local/share/set"):
if not os.path.isfile("setoolkit"):
os.chdir("/usr/local/share/set")
sys.path.append("/usr/local/share/set")

# make sure the config file is located in /etc/setoolkit


if not os.path.isdir("/etc/setoolkit/"):
os.makedirs("/etc/setoolkit/")
shutil.copyfile("src/core/config.baseline", "/etc/setoolkit/set.config")

if not os.path.isfile("/etc/setoolkit/set.config"):
shutil.copyfile("src/core/config.baseline", "/etc/setoolkit/set.config")

# here we check to ensure we have the latest version


with open("/etc/setoolkit/set.config") as fileopen:
data = fileopen.read()

if "CONFIG_VERSION=7.7.9" not in data:


print("[*] Overwriting old config for updates to SET. Backing up your old one
in /etc/setoolkit/")
shutil.move("/etc/setoolkit/set.config", "/etc/setoolkit/set.config.bak")
shutil.copyfile("src/core/config.baseline", "/etc/setoolkit/set.config")

# import after config checks have been properly created


from src.core.menu import text
from src.core.update_config import update_config

if os.path.isfile(os.path.join(core.userconfigpath, "version.lock")):
os.remove(os.path.join(core.userconfigpath, "version.lock"))

# check directory and make it


if not os.path.isdir("src/logs/"):
os.makedirs("src/logs/")

# check set logfile


if not os.path.isfile("src/logs/set_logfile.log"):
# create new log
with open("src/logs/set_logfile.log", "w") as filewrite:
filewrite.write("")

# use ~/.set
if operating_system == "posix":
if not os.path.isdir(core.userconfigpath):
# create the set variables
os.makedirs(core.userconfigpath)
# if for some reason it failed to pull the path
userdir = os.path.join(os.path.expanduser('~'), '.set')
if not os.path.isdir(userdir):
os.makedirs(userdir)

if not os.path.isdir(os.path.join(core.userconfigpath, "reports")):


os.makedirs(os.path.join(core.userconfigpath, "reports"))

# check to see if we have python-pycrypto


try:
from Crypto.Cipher import AES
except ImportError:
print("[!] The python-pycrypto python module not installed. You will lose the
ability to use multi-pyinjector.")
pass

#
# The Social-Engineer Toolkit (SET) #
# Written by: David Kennedy (ReL1K) #
#
#
# this is the main menu structure for SET

# main menu

# update the main config per load


update_config()
# chmod routine
if operating_system == "posix":
# change permissions if nix
subprocess.Popen("chmod +x seautomate;"
"chmod +x set-update;"
"chmod +x setup.py;"
"chmod +x set-proxy;"
"chmod +x src/payloads/ratte/ratteserver;"
"chmod +x src/payloads/set_payloads/listener.py",
stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

dns = core.check_config("DNS_SERVER=")
if dns.lower() == "on":
import src.core.minifakedns
from src.core.setcore import detect_public_ip
src.core.minifakedns.start_dns_server(detect_public_ip())

# remove old files


for root, dirs, files in os.walk(core.userconfigpath):
for f in files:
try:
match = re.search(".svn|entries|all-wcprops|props|text-base|prop-base|
tmp", f)
if not match:
os.unlink(os.path.join(root, f))

# if they are being used then ignore


except:
pass
# loop through all the directories
for d in dirs:
try:
match = re.search(".svn|entries|all-wcprops|props|text-base|prop-base|
tmp", d)
if not match:
shutil.rmtree(os.path.join(root, d))
except:
pass

# if there isn't a set_config.py file yet, create one


if not os.path.isfile("/etc/setoolkit/set_config.py"):
update_config()

define_version = core.get_version()

# create the set.options routine


with open(os.path.join(core.userconfigpath, "set.options"), "w") as filewrite:
filewrite.write("{This is the main SET configuration file for all options used
in SET}\n")

try:
# Remove old Signed_Updates
if os.path.isfile(os.path.join(core.userconfigpath, "Signed_Update.jar")):
os.remove(os.path.join(core.userconfigpath, "Signed_Update.jar"))

# initial user menu


if not os.path.isfile("src/agreement4"):
with open("readme/LICENSE") as fileopen:
for line in fileopen:
print((line.rstrip()))

print("{0}The Social-Engineer Toolkit is designed purely"


" for good and not evil. If you are planning on "
"using this tool for malicious purposes that are "
"not authorized by the company you are performing "
"assessments for, you are violating the terms of "
"service and license of this toolset. By hitting "
"yes (only one time), you agree to the terms of "
"service and that you will only use this tool for "
"lawful purposes only.{1}".format(core.bcolors.RED,
core.bcolors.ENDC))
print(core.bcolors.GREEN)
choice = input("\nDo you agree to the terms of service [y/n]: ")
choice += " " # b/c method below
if choice[0].lower() == "y":
with open("src/agreement4", "w") as filewrite:
filewrite.write("user accepted")
print(core.bcolors.ENDC)
else:
print(core.bcolors.ENDC + "[!] Exiting the Social-Engineer Toolkit,
have a nice day." + core.bcolors.ENDC)
sys.exit()

while True:
core.show_banner(define_version, '1')
show_main_menu = core.create_menu(text.main_text, text.main_menu)

# special case of list item 99


print('\n 99) Exit the Social-Engineer Toolkit\n')

# main core menu


main_menu_choice = (input(core.setprompt("0", "")))

# funny
if main_menu_choice == "hugs":
core.print_warning("Have you given someone a hug today? Remember a hug
can change the world.")
pause = input("\nPlease give someone a hug then press {return} to
continue.")

# funny2
if main_menu_choice == "freehugs":
core.print_warning("HUGS ARE ALWAYS FREE! NEVER CHARGE! ALWAYS HUG.")
pause = input("\nDo not press return until giving someone a hug.")

# funny3
if main_menu_choice == "derbycon":
core.print_warning(core.bcolors.BOLD + "YAYYYYYYYYYYYYYYYYYYYYYY
DerbyCon.\n\nDerbyCon 7.0 'Legacy' -- September 22th - 24th 2017" +
core.bcolors.ENDC)
pause = input(core.bcolors.BOLD + "\nDon't miss it! Sep 23 - Sep 25th!
Press {return} to continue." + core.bcolors.ENDC)

# rance
if main_menu_choice == "rance":
core.print_warning(core.bcolors.BOLD + "We miss you buddy. David Jones
(Rance) changed a lot of us and you'll always be apart of our lives (and SET). Fuck
Cancer." + core.bcolors.ENDC)
pause = input("Press {return} to continue.")

# cavs
if main_menu_choice == "cavs":
core.print_warning(core.bcolors.BOLD + "2015-2016 CHAMPS BABY!!! C l e
e e e e e v eeee l a a n n d d d d d d d d d d d " + core.bcolors.ENDC)
pause = input("Press {return} to continue.")

# quit out
if main_menu_choice == 'exit' or main_menu_choice == "99" or
main_menu_choice == "quit":
core.exit_set()
# cleans up stale processes from SET
try:
# kill anything python running on 80
core.kill_proc("80", "python")
# kill anything on 443 ruby which is generally a rogue listener
core.kill_proc("443", "ruby")
except:
pass

# load set
if main_menu_choice == '1':
try:
core.module_reload(src.core.set)
except:
import src.core.set

# load fasttrack
if main_menu_choice == '2':
try:
core.module_reload(src.core.fasttrack)
except:
import src.core.fasttrack

# third party modules


if main_menu_choice == '3':
try:
core.module_reload(src.core.module_handler)
except:
import src.core.module_handler

# update set
if main_menu_choice == '4':
core.update_set()

# credits
if main_menu_choice == '5':
update_config()

# update config
if main_menu_choice == '6':
core.help_menu()

# handle keyboard interrupts


except KeyboardInterrupt:
print(("\n\nThank you for {0}shopping{1} with the Social-Engineer Toolkit."
"\n\nHack the Gibson...and remember...hugs are worth more "
"than handshakes.\n".format(core.bcolors.RED, core.bcolors.ENDC)))
# handle exceptions
except Exception as error:
core.log(error)
print("\n\n[!] Something went wrong, printing the error: " + str(error))

# cleanup routine
core.cleanup_routine()

You might also like