mirror of
https://github.com/trustedsec/social-engineer-toolkit
synced 2024-11-28 07:20:25 +00:00
229 lines
7.6 KiB
Python
Executable file
229 lines
7.6 KiB
Python
Executable file
#!/usr/bin/python
|
|
import os
|
|
import sys
|
|
|
|
# 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
|
|
import subprocess
|
|
import shutil
|
|
import 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 bleeding edge
|
|
bleeding_edge()
|
|
|
|
# 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 = 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 bcolors.ENDC + "[!] 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 set
|
|
if main_menu_choice == '4':
|
|
update_set()
|
|
|
|
# credits
|
|
if main_menu_choice == '5':
|
|
update_config()
|
|
|
|
# update config
|
|
if main_menu_choice == '6':
|
|
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)
|
|
print "\n\n[!] Something went wrong, printing the error: "+ str(error)
|
|
|
|
# cleanup routine
|
|
cleanup_routine()
|