2012-12-31 22:11:37 +00:00
|
|
|
#!/usr/bin/python
|
|
|
|
|
|
|
|
"""
|
|
|
|
update_config.py:
|
|
|
|
|
|
|
|
This module converts the user-editable set_config text file
|
|
|
|
into a python module file. This allows the user to edit
|
|
|
|
the configuration with easily understandable values such
|
|
|
|
as "ON" or "OFF", but yet SET operates with a module from
|
|
|
|
which variables can be imported and boolean values operated
|
|
|
|
upon.
|
|
|
|
"""
|
|
|
|
import os
|
|
|
|
from src.core.setcore import print_status, print_info, print_error, return_continue
|
|
|
|
import datetime
|
|
|
|
from time import sleep
|
|
|
|
|
|
|
|
definepath = os.getcwd()
|
|
|
|
|
|
|
|
# TODO
|
|
|
|
# * integers should not have quotes
|
|
|
|
# * paths should be double-quoted
|
|
|
|
# * Booleans should not be quoted
|
|
|
|
|
|
|
|
def value_type(value):
|
2013-03-16 19:47:25 +00:00
|
|
|
|
2012-12-31 22:11:37 +00:00
|
|
|
""" Determines whether the setting parameter should be quoted. """
|
2013-03-16 19:47:25 +00:00
|
|
|
|
2012-12-31 22:11:37 +00:00
|
|
|
return {
|
|
|
|
'METASPLOIT_PATH':True,
|
|
|
|
'METASPLOIT_DATABASE':True,
|
|
|
|
'ENCOUNT':False,
|
|
|
|
'AUTO_MIGRATE':False,
|
|
|
|
'CUSTOM_EXE':True,
|
|
|
|
'BACKDOOR_EXECUTION':False,
|
|
|
|
'METERPRETER_MULTI_SCRIPT':False,
|
|
|
|
'LINUX_METERPRETER_MULTI_SCRIPT':False,
|
|
|
|
'METERPRETER_MULTI_COMMANDS':True,
|
|
|
|
'LINUX_METERPRETER_MULTI_COMMANDS':True,
|
|
|
|
'METASPLOIT_IFRAME_PORT':False,
|
|
|
|
'ETTERCAP':False,
|
|
|
|
'ETTERCAP_PATH':True,
|
|
|
|
'ETTERCAP_DSNIFF_INTERFACE':True,
|
|
|
|
'DSNIFF':False,
|
|
|
|
'AUTO_DETECT':False,
|
|
|
|
'SENDMAIL':False,
|
|
|
|
'EMAIL_PROVIDER':True,
|
|
|
|
'WEBATTACK_EMAIL':False,
|
|
|
|
'APACHE_SERVER':False,
|
|
|
|
'APACHE_DIRECTORY':True,
|
|
|
|
'WEB_PORT':False,
|
|
|
|
'JAVA_ID_PARAM':True,
|
|
|
|
'JAVA_REPEATER':False,
|
|
|
|
'JAVA_TIME':True,
|
|
|
|
'WEBATTACK_SSL':False,
|
|
|
|
'SELF_SIGNED_CERT':False,
|
|
|
|
'PEM_CLIENT':True,
|
|
|
|
'PEM_SERVER':True,
|
|
|
|
'WEBJACKING_TIME':False,
|
|
|
|
'COMMAND_CENTER_INTERFACE':True,
|
|
|
|
'COMMAND_CENTER_PORT':False,
|
|
|
|
'SET_INTERACTIVE_SHELL':False,
|
|
|
|
'TERMINAL':True,
|
|
|
|
'DIGITAL_SIGNATURE_STEAL':False,
|
|
|
|
'UPX_ENCODE':False,
|
|
|
|
'UPX_PATH':True,
|
|
|
|
'AUTO_REDIRECT':False,
|
|
|
|
'HARVESTER_REDIRECT':False,
|
|
|
|
'HARVESTER_URL':True,
|
|
|
|
'UNC_EMBED':False,
|
|
|
|
'ACCESS_POINT_SSID':True,
|
|
|
|
'AIRBASE_NG_PATH':True,
|
|
|
|
'DNSSPOOF_PATH':True,
|
|
|
|
'AP_CHANNEL':False,
|
|
|
|
'POWERSHELL_INJECTION':False,
|
|
|
|
'POWERSHELL_VERBOSE':False,
|
|
|
|
'WEB_PROFILER':False,
|
|
|
|
'OSX_REVERSE_PORT':False,
|
|
|
|
'LINUX_REVERSE_PORT':False,
|
|
|
|
'USER_AGENT_STRING':True,
|
|
|
|
'SET_SHELL_STAGER':False,
|
|
|
|
'AUTOMATIC_LISTENER':False,
|
2013-05-01 01:43:44 +00:00
|
|
|
'METASPLOIT_MODE':False,
|
|
|
|
'HARVESTER_LOG':True,
|
2013-10-30 20:50:24 +00:00
|
|
|
'STAGE_ENCODING':False,
|
2013-05-01 01:43:44 +00:00
|
|
|
'TRACK_EMAIL_ADDRESSES':False
|
2012-12-31 22:11:37 +00:00
|
|
|
}.get(value,"ERROR")
|
|
|
|
|
|
|
|
def update_config():
|
2013-03-16 19:47:25 +00:00
|
|
|
|
2012-12-31 22:11:37 +00:00
|
|
|
init_file = file("%s/config/set_config" % (definepath), "r")
|
|
|
|
new_config = file("%s/config/set_config.py" % (definepath), "w")
|
|
|
|
timestamp = str(datetime.datetime.now())
|
2013-03-16 19:47:25 +00:00
|
|
|
|
2012-12-31 22:11:37 +00:00
|
|
|
new_config.write("""#!/usr/bin/python\n
|
|
|
|
#######################################################################
|
|
|
|
## DO NOT MODIFY THIS FILE ##
|
|
|
|
#######################################################################
|
|
|
|
# This file is generated by a routine inside SET, for use by SET. #
|
2013-03-16 19:47:25 +00:00
|
|
|
# #
|
2012-12-31 22:11:37 +00:00
|
|
|
# Settings should be modified in the set_config file, and then #
|
|
|
|
# SET updated using the 'Update SET Configuration' menu item in #
|
|
|
|
# the main menu. This file will be updated with the new settings. #
|
|
|
|
# #
|
|
|
|
# set_config.py generated: """ + timestamp + """ #
|
|
|
|
# #
|
|
|
|
#######################################################################
|
|
|
|
CONFIG_DATE='"""+timestamp+"""'\n""")
|
|
|
|
for line in init_file:
|
|
|
|
if not line.startswith("#"):
|
|
|
|
line = line.rstrip()
|
|
|
|
line = line.split("=")
|
|
|
|
setting = line[0]
|
|
|
|
value = line[1]
|
|
|
|
if value == "ON":
|
|
|
|
value = "True"
|
|
|
|
elif value == "OFF":
|
|
|
|
value = "False"
|
|
|
|
else:
|
|
|
|
pass
|
2013-03-16 19:47:25 +00:00
|
|
|
|
2012-12-31 22:11:37 +00:00
|
|
|
quoted = value_type(setting)
|
2013-03-16 19:47:25 +00:00
|
|
|
|
2012-12-31 22:11:37 +00:00
|
|
|
if quoted:
|
|
|
|
new_config.write(setting + '="' + value + '"\n')
|
|
|
|
else:
|
|
|
|
new_config.write(setting + '=' + value + '\n')
|
|
|
|
|
|
|
|
init_file.close()
|
|
|
|
new_config.close()
|
|
|
|
sleep(1)
|
|
|
|
from set_config import CONFIG_DATE as verify
|
|
|
|
print_info("New set_config.py file generated on: %s" % timestamp)
|
|
|
|
print_info("Verifying configuration update...")
|
|
|
|
if verify == timestamp:
|
|
|
|
print_status("Update verified, config timestamp is: %s" % timestamp)
|
|
|
|
else:
|
|
|
|
print_error("Update failed? Timestamp on config file is: %s" % verify)
|
|
|
|
print_status("SET is using the new config, no need to restart")
|
|
|
|
# return_continue()
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
update_config()
|