#!/usr/bin/python # # Simple proxy for SET, note will show up in history # import sys import getpass import os import subprocess import re import src.core.setcore as core # Py2/3 compatibility # Python3 renamed raw_input to input try: input = raw_input except NameError: pass # grab the operating system operating_system = core.check_os() # if windows then do some stuff if operating_system == "posix": definepath = os.getcwd() print("\n[*] Welcome to the SET-Proxy Configuration Utility") print("\nEnter the proxy setting information below.\n\nExample: http://10.3.1.1:8080\n") try: proxy = input("Enter the proxy server: ") username = input("Enter the username for the proxy (hit enter for none): ") password = getpass.getpass("Enter the password for the proxy (hit enter for none): ") except KeyboardInterrupt: print("\n[!] Exiting the Social-Engineer Toolkit.") sys.exit() if username != "": proxy_string = "export http_proxy='http://{0}:{1}@{2}'".format(username, password, proxy) else: proxy_string = "export http_proxy='http://{0}'".format(proxy) with open(os.path.join(core.setdir + "/proxy.config"), "w") as filewrite: filewrite.write(proxy_string) def kill_proc(port, flag): proc = subprocess.Popen("netstat -antp | grep '{0}'".format(port), shell=True, stdout=subprocess.PIPE) stdout_value = proc.communicate()[0] a = re.search("\d+/{0}".format(flag), stdout_value) if a: b = a.group() b = b.replace("/{0}".format(flag), "") subprocess.Popen("kill -9 {0} 1> /dev/null 2> /dev/null".format(b), shell=True).wait() # 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") # handle errors except Exception as error: core.log(error) else: print("[!] Sorry, this only works on posix (nix) based systems and is not compatible with this operating system.")