#!/usr/bin/python import pexpect import sys import os import time import subprocess import re # check where we are and load default directory if os.path.isdir("/usr/share/setoolkit"): if not os.path.isfile("se-toolkit"): os.chdir("/usr/share/setoolkit") sys.path.append("/usr/share/setoolkit") # 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() # # Simple client mode for SET # # # try to import pexpect try: import pexpect # if pexpect fails except ImportError: print "\n[*] PEXPECT is required, please download and install before running this..." print "[*] Exiting SET-AUTOMATE mode..." sys.exit() # try to define filename through argument specified during command line mode try: filename=sys.argv[1] # if we through an exception spit out the command line syntax except IndexError: print "\nThe Social-Engineer Toolkit Automate - Automatation for SET" print "\nSimply create a file that has each option you want from menu mode." print "For example your file should look something like this:" print "\n2\n2\n2\nhttps://gmail.com\n2\n2\n443\netc.\n" print "Usage: ./set-automate <filename>" sys.exit() # if the filename doesnt exist throw an error if not os.path.isfile(filename): print "\n[*] Sorry hoss, unable to locate that filename, try again.\n" sys.exit() password="false" # if the path is around if os.path.isfile(filename): try: print "[*] Spawning SET in a threaded process..." child=pexpect.spawn("python set") #child.delaybeforesend = 0 fileopen=file(filename,"r") for line in fileopen: line=line.rstrip() # if we just use enter send default if line == "": line="default" match1=re.search("OMGPASSWORDHERE", line) if match1: line=line.replace(" OMGPASSWORDHERE", "") password="true" if password == "false": print "[*] Sending command %s to the interface..." % (line) if password == "true": print "[*] Sending command [**********] (password masked) to the interface..." password="false" if line == "default": line="" if line == "CONTROL-C-HERE": try: print "[*] This may take a few seconds while SET catches up..." child.expect("Next line of the body:") time.sleep(2) child.sendline("\n") child.sendcontrol('c') # if the user is using pexpect < 2.3 except AttributeError: print "[-] Error: You are running pexpect < 2.3 which is needed for this function" choice=raw_input("Would you like to install it now yes or no: ") if choice == "yes" or choice == "y": subprocess.Popen("wget http://sourceforge.net/projects/pexpect/files/pexpect/Release%202.3/pexpect-2.3.tar.gz;tar -zxvf pexpect-2.3.tar.gz;cd pexpect-2.3;python setup.py install;cd ..;rm -rf pexpect-2*", shell=True).wait() try: reload(pexpect) child.sendcontrol('c') except: print "[*] Relaunch the Social-Engineer Toolkit for changes to apply." sys.exit() if line != "CONTROL-C-HERE": child.sendline(line) print "[*] Finished sending commands, interacting with the interface.." child.interact() # sometimes pexpect can throw errors upon exit this handles them except OSError: sys.exit() # handle keyboardinterrupts (controlc) except KeyboardInterrupt: print "[*] Control-C detected, exiting the Social-Engineer Toolkit.." sys.exit() # handle everything else except Exception,e: print "[*] Something went wrong, printing error: %s" % str(e)