mirror of
https://github.com/trustedsec/social-engineer-toolkit
synced 2024-11-24 21:43:04 +00:00
237 lines
7.7 KiB
Python
Executable file
237 lines
7.7 KiB
Python
Executable file
#!/usr/bin/python
|
|
import os
|
|
import sys
|
|
import traceback
|
|
|
|
# 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/share/setoolkit"):
|
|
if not os.path.isfile("setoolkit"):
|
|
os.chdir("/usr/share/setoolkit")
|
|
sys.path.append("/usr/share/setoolkit")
|
|
|
|
# check where we are and load default directory
|
|
elif os.path.isdir("/usr/share/set"):
|
|
if not os.path.isfile("setoolkit"):
|
|
os.chdir("/usr/share/set")
|
|
sys.path.append("/usr/share/set")
|
|
|
|
# if we can't see our config then something didn't go good..
|
|
if not os.path.isfile("config/set_config"):
|
|
print_error("Cannot locate SET executable. Try running from the local directory.")
|
|
print_error("If this does not work, please run the setup.py install file.")
|
|
sys.exit()
|
|
|
|
from src.core.setcore import *
|
|
from src.core.menu import text
|
|
from config.update_config import update_config
|
|
try: import subprocess
|
|
except: reload(subprocess)
|
|
try: import shutil
|
|
except: reload(shutil)
|
|
try: import re
|
|
except: reload(re)
|
|
|
|
# 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
|
|
filewrite = file("src/logs/set_logfile.log", "w")
|
|
filewrite.write("")
|
|
filewrite.close()
|
|
|
|
# grab the operating system
|
|
operating_system = check_os()
|
|
|
|
# use ~/.set
|
|
if operating_system == "posix":
|
|
if not os.path.isdir(setdir):
|
|
# create the set variables
|
|
os.makedirs(setdir)
|
|
# 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(setdir + "/reports/"):
|
|
os.makedirs(setdir + "/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 loose 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 = check_config("DNS_SERVER=")
|
|
if dns == "ON" or dns == "on": start_dns()
|
|
|
|
# remove old files
|
|
for root, dirs, files in os.walk(setdir):
|
|
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 windows then do some stuff
|
|
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"
|
|
exit_set()
|
|
|
|
# if there isn't a set_config.py file yet, create one
|
|
if not os.path.isfile("config/set_config.py"):
|
|
update_config()
|
|
|
|
define_version = get_version()
|
|
cleanup_routine()
|
|
|
|
# create the set.options routine
|
|
filewrite = file(setdir + "/set.options", "w")
|
|
filewrite.write("{This is the main SET configuration file for all options used in SET}\n")
|
|
filewrite.close()
|
|
|
|
try:
|
|
# Remove old Signed_Updates
|
|
if os.path.isfile(setdir + "/Signed_Update.jar"):
|
|
os.remove(setdir + "/Signed_Update.jar")
|
|
|
|
# intitial user menu
|
|
if not os.path.isfile("src/agreement4"):
|
|
fileopen = file("readme/LICENSE", "r")
|
|
for line in fileopen:
|
|
print line.rstrip()
|
|
|
|
print bcolors.RED + """
|
|
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.""" + bcolors.GREEN
|
|
choice = raw_input("\nDo you agree to the terms of service [y/n]: ")
|
|
if choice == "yes" or choice == "y":
|
|
filewrite = file("src/agreement4", "w")
|
|
filewrite.write("user accepted")
|
|
filewrite.close()
|
|
print bcolors.ENDC
|
|
else:
|
|
print "[!] Exiting the Social-Engineer Toolkit, have a nice day." + bcolors.ENDC
|
|
sys.exit()
|
|
|
|
while 1:
|
|
show_banner(define_version,'1')
|
|
show_main_menu = 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 = (raw_input(setprompt("0", "")))
|
|
|
|
# funny
|
|
if main_menu_choice == "hugs":
|
|
print_warning("Have you given someone a hug today? Remember a hug can change the world.")
|
|
pause = raw_input("\nPlease give someone a hug then press {return} to continue.")
|
|
|
|
# funny2
|
|
if main_menu_choice == "derbycon":
|
|
print_warning(bcolors.BOLD + "YAYYYYYYYYYYYYYYYYYYYYYY DerbyCon.\n\nDerbyCon 4.0 -- September 24th - 28th 2014" + bcolors.ENDC)
|
|
pause = raw_input(bcolors.BOLD + "\nDon't miss it! Sep 24 - Sep 28th! Press {return} to continue." + bcolors.ENDC)
|
|
|
|
# quit out
|
|
if main_menu_choice == 'exit' or main_menu_choice == "99" or main_menu_choice == "quit":
|
|
exit_set()
|
|
# cleans up stale processes from SET
|
|
try:
|
|
# kill anything python running on 80
|
|
kill_proc("80","python")
|
|
# kill anything on 443 ruby which is generally a rogue listener
|
|
kill_proc("443", "ruby")
|
|
except: pass
|
|
|
|
# load set
|
|
if main_menu_choice == '1':
|
|
try:
|
|
reload(src.core.set)
|
|
except:
|
|
import src.core.set
|
|
|
|
# load fasttrack
|
|
if main_menu_choice == '2':
|
|
try: reload(src.core.fasttrack)
|
|
except: import src.core.fasttrack
|
|
|
|
# third party modules
|
|
if main_menu_choice == '3':
|
|
try: reload(src.core.module_handler)
|
|
except: import src.core.module_handler
|
|
|
|
# update metasploit
|
|
if main_menu_choice == '4':
|
|
update_metasploit()
|
|
|
|
# update set
|
|
if main_menu_choice == '5':
|
|
update_set()
|
|
|
|
# credits
|
|
if main_menu_choice == '6':
|
|
update_config()
|
|
|
|
# update config
|
|
if main_menu_choice == '7':
|
|
help_menu()
|
|
|
|
# handle keyboard interrupts
|
|
except KeyboardInterrupt:
|
|
print "\n\nThank you for " + bcolors.RED+"shopping" + bcolors.ENDC+" with the Social-Engineer Toolkit.\n\nHack the Gibson...and remember...hugs are worth more than handshakes.\n"
|
|
|
|
# handle exceptions
|
|
except Exception, error:
|
|
log(error)
|
|
log(traceback.format_exc())
|
|
print "\n\n[!] Something went wrong, printing the error: "+ str(error)
|
|
|
|
# cleanup routine
|
|
cleanup_routine()
|