Example #1
0
 def __init__(self, config_filename, from_string=False):
     self._logger = logging.getLogger(__name__)
     self._programs = []
     try:
         if not from_string:
             self._tree = ET.parse(config_filename)
             self._root = self._tree.getroot()
         else:
             self._root = ET.fromstring(config_filename)
         self._node_name = self._root.attrib['name']
         self._node_net_mode = self._root.attrib['net_mode']
         self._node_op_mode = self._root.attrib['op_mode']
         self._reboot_time = int(self._root.attrib['reboot_time'])
         if self._node_net_mode == "net":
             beacon = self._root.find("beacon")
             reporting = self._root.find("reporting")
             listener = self._root.find("listener")
             self._beacon_server = beacon.attrib['server']
             self._beacon_port = int(beacon.attrib['port'])
             self._beacon_interval = int(beacon.attrib['interval'])
             self._report_server = reporting.attrib['server']
             self._report_port = reporting.attrib['port']
             self._listener_port = int(listener.attrib['port'])
         elif self._node_net_mode != "single":
             raise ValueError(
                 "Only net and single are available modes for node!")
         programs = self._root.find("programs")
         sleep_times = []
         for prog in programs:
             sleep_times.append(prog.attrib['sleep_time'])
             self._programs.append(prog.attrib)
         # self._program_path = self._root.find("program").attrib['path']
         # self._program_dbg_child = bool(self._root.find("program").attrib['dbg_child'])
         self._sleep_time = max(sleep_times)
         if self._node_op_mode == 'fuzzing':
             fuzzer = self._root.find("fuzzer")
             self._fuzzer_type = fuzzer.attrib['type']
             self._fuzz_config = []
             if self._fuzzer_type not in FUZZERS.keys():
                 raise ValueError("Unsupported fuzzing type")
             for elem in FUZZERS[self._fuzzer_type][0]:
                 self._fuzz_config.append(fuzzer.attrib[elem])
             self._file_type = fuzzer.attrib['file_type']
         elif self._node_op_mode == 'reducing':
             reducer = self._root.find('reducer')
             self._reducer_type = reducer.attrib['type']
             self._reducer_config = []
             if self._reducer_type not in REDUCERS.keys():
                 raise ValueError('Unsupported reducing type')
             for elem in REDUCERS[self._reducer_type][0]:
                 self._reducer_config.append(reducer.attrib[elem])
             self._file_type = reducer.attrib['file_type']
         else:
             raise ValueError('Unsupported Operation Mode!')
     except ValueError as ex:
         self._logger.error(
             "General error occurred while parsing config: " +
             str(ex.message) + str(ex.args))
         quit()
Example #2
0
 def __init__(self, config_filename, from_string=False):
     self._logger = logging.getLogger(__name__)
     self._programs = []
     try:
         if not from_string:
             self._tree = ET.parse(config_filename)
             self._root = self._tree.getroot()
         else:
             self._root = ET.fromstring(config_filename)
         self._node_name = self._root.attrib['name']
         self._node_net_mode = self._root.attrib['net_mode']
         self._node_op_mode = self._root.attrib['op_mode']
         self._reboot_time = int(self._root.attrib['reboot_time'])
         if self._node_net_mode == "net":
             beacon = self._root.find("beacon")
             reporting = self._root.find("reporting")
             listener = self._root.find("listener")
             self._beacon_server = beacon.attrib['server']
             self._beacon_port = int(beacon.attrib['port'])
             self._beacon_interval = int(beacon.attrib['interval'])
             self._report_server = reporting.attrib['server']
             self._report_port = reporting.attrib['port']
             self._listener_port = int(listener.attrib['port'])
         elif self._node_net_mode != "single":
             raise ValueError("Only net and single are available modes for node!")
         programs = self._root.find("programs")
         sleep_times = []
         for prog in programs:
             sleep_times.append(prog.attrib['sleep_time'])
             self._programs.append(prog.attrib)
         # self._program_path = self._root.find("program").attrib['path']
         # self._program_dbg_child = bool(self._root.find("program").attrib['dbg_child'])
         self._sleep_time = max(sleep_times)
         if self._node_op_mode == 'fuzzing':
             fuzzer = self._root.find("fuzzer")
             self._fuzzer_type = fuzzer.attrib['type']
             self._fuzz_config = []
             if self._fuzzer_type not in FUZZERS.keys():
                 raise ValueError("Unsupported fuzzing type")
             for elem in FUZZERS[self._fuzzer_type][0]:
                 self._fuzz_config.append(fuzzer.attrib[elem])
             self._file_type = fuzzer.attrib['file_type']
         elif self._node_op_mode == 'reducing':
             reducer = self._root.find('reducer')
             self._reducer_type = reducer.attrib['type']
             self._reducer_config = []
             if self._reducer_type not in REDUCERS.keys():
                 raise ValueError('Unsupported reducing type')
             for elem in REDUCERS[self._reducer_type][0]:
                 self._reducer_config.append(reducer.attrib[elem])
             self._file_type = reducer.attrib['file_type']
         else:
             raise ValueError('Unsupported Operation Mode!')
     except ValueError as ex:
         self._logger.error("General error occurred while parsing config: " + str(ex.message) + str(ex.args))
         quit()
Example #3
0
 def node_detail(self, node):
     node_config = node.info
     op_mode_conf = ""
     programs = None
     if node.config is not None:
         add_config, programs, op_mode_conf = ConfigParser(node.config, True).dump_additional_information()
         node_config += add_config
     node_detail_html = self._html_template
     node_detail_html = node_detail_html.replace("SECTION_TITLE", node.name)
     node_conf_table = "<form action=\"/index.py?func=home&node=" + node.address + \
                       "&submit=1\" method=\"post\">\r\n" + "<table>\r\n"
     node_conf_table += "<tr><th/>GENERAL CONFIG<th/></tr>\r\n"
     # ------------------------------------------------------------------------------------------------------------
     # General config settings
     for i in range(4):
         node_conf_table += html.node_detail_table_entry(node_config[i][0], node_config[i][1])
     del node_config[0:4]
     for elem in node_config:
         node_conf_table += html.node_detail_table_entry_editable(elem[0], elem[1])
     node_conf_table += "</table>\r\n<table id=\"programs_table\">\r\n"
     # ------------------------------------------------------------------------------------------------------------
     # Program settings
     if programs is not None:
         for i, prog in enumerate(programs):
             node_conf_table += "<tr><th>PROGRAM " + str(i) + "</th><th/></tr>\r\n"
             single_prog = ""
             for key, val in prog.items():
                 single_prog += html.node_detail_table_entry_editable(key, val, "prog-" + str(i) + " " + key)
             node_conf_table += single_prog
     node_conf_table += "</table>\r\n"
     # ------------------------------------------------------------------------------------------------------------
     # Fuzzer settings
     if op_mode_conf != "":
         node_conf_table += "<table id=\"fuzz_table\" >\r\n<tr><th>FUZZER SETTINGS</th><th/></tr>\r\n"
         fuzz_types_options = ""
         for key in FUZZERS.keys():
             fuzz_types_options += "<option>"+key+"</option>\r\n"
         node_conf_table += "<tr>\r\n<td><b>Fuzzer Type</b></td>\r\n<td><select id=\"fuzzers\" " + \
                            "onLoad=\"set_select_value('" + op_mode_conf["fuzzer_type"] + "')\" " + \
                            " name=\"fuzzer_type\" onChange=\"changeFuzzer()\">\r\n" + \
                            fuzz_types_options+"</select>\r\n</td>\r\n</tr>\r\n"
         for key in FUZZERS[op_mode_conf["fuzzer_type"]][0]:
             node_conf_table += html.node_detail_table_entry_editable(key, op_mode_conf['fuzz_conf'][key])
         node_conf_table += "</table>\r\n"
     else:
         node_conf_table += "<br><br><b>No additional information received by now</b>\r\n"
     node_conf_table += "<br>\r\n"
     node_conf_table += "<input type=\"submit\" value=\"Submit\" >\r\n</form>\r\n"
     node_conf_table += html.action_button("Reboot node", "/index.py?func=home&reboot=" + node.address,
                                           "post")
     node_conf_table += html.action_button("Delete node", "/index.py?func=home&del=" + node.address,
                                           "post")
     node_detail_html = node_detail_html.replace("REPLACE_ME", node_conf_table)
     return self._statuses[200], self._header_html, node_detail_html
Example #4
0
 def node_detail(self, node):
     node_config = node.info
     op_mode_conf = ""
     programs = None
     if node.config is not None:
         add_config, programs, op_mode_conf = ConfigParser(node.config, True).dump_additional_information()
         node_config += add_config
     node_detail_html = self._html_template
     node_detail_html = node_detail_html.replace("SECTION_TITLE", node.name)
     node_conf_table = "<form action=\"/index.py?func=home&node=" + node.address + \
                       "&submit=1\" method=\"post\">\r\n" + "<table>\r\n"
     node_conf_table += "<tr><th/>GENERAL CONFIG<th/></tr>\r\n"
     # ------------------------------------------------------------------------------------------------------------
     # General config settings
     for i in range(4):
         node_conf_table += html.node_detail_table_entry(node_config[i][0], node_config[i][1])
     del node_config[0:4]
     for elem in node_config:
         node_conf_table += html.node_detail_table_entry_editable(elem[0], elem[1])
     node_conf_table += "</table>\r\n<table id=\"programs_table\">\r\n"
     # ------------------------------------------------------------------------------------------------------------
     # Program settings
     if programs is not None:
         for i, prog in enumerate(programs):
             node_conf_table += "<tr><th>PROGRAM " + str(i) + "</th><th/></tr>\r\n"
             single_prog = ""
             for key, val in prog.items():
                 single_prog += html.node_detail_table_entry_editable(key, val, "prog-" + str(i) + " " + key)
             node_conf_table += single_prog
     node_conf_table += "</table>\r\n"
     # ------------------------------------------------------------------------------------------------------------
     # Fuzzer settings
     if op_mode_conf != "":
         node_conf_table += "<table id=\"fuzz_table\" >\r\n<tr><th>FUZZER SETTINGS</th><th/></tr>\r\n"
         fuzz_types_options = ""
         for key in FUZZERS.keys():
             fuzz_types_options += "<option>"+key+"</option>\r\n"
         node_conf_table += "<tr>\r\n<td><b>Fuzzer Type</b></td>\r\n<td><select id=\"fuzzers\" " + \
                            "onLoad=\"set_select_value('" + op_mode_conf["fuzzer_type"] + "')\" " + \
                            " name=\"fuzzer_type\" onChange=\"changeFuzzer()\">\r\n" + \
                            fuzz_types_options+"</select>\r\n</td>\r\n</tr>\r\n"
         for key in FUZZERS[op_mode_conf["fuzzer_type"]][0]:
             node_conf_table += html.node_detail_table_entry_editable(key, op_mode_conf['fuzz_conf'][key])
         node_conf_table += "</table>\r\n"
     else:
         node_conf_table += "<br><br><b>No additional information received by now</b>\r\n"
     node_conf_table += "<br>\r\n"
     node_conf_table += "<input type=\"submit\" value=\"Submit\" >\r\n</form>\r\n"
     node_conf_table += html.action_button("Reboot node", "/index.py?func=home&reboot=" + node.address,
                                           "post")
     node_conf_table += html.action_button("Delete node", "/index.py?func=home&del=" + node.address,
                                           "post")
     node_detail_html = node_detail_html.replace("REPLACE_ME", node_conf_table)
     return self._statuses[200], self._header_html, node_detail_html
Example #5
0
 def get_scripts(self):
     scripts = self.__get_file("web/scripts.js")
     fuzzers = "var fuzzers = [ "
     for key in FUZZERS.keys():
         fuzzers += "'" + key + "', [ "
         for elem in FUZZERS[key][0]:
             fuzzers += "'" + elem + "',"
         fuzzers = fuzzers[:-1]
         fuzzers += "],"
     fuzzers = fuzzers[:-1]
     fuzzers +="];\r\n"
     scripts = scripts.replace('FUZZERS', fuzzers)
     return self._statuses[200], self._header_js, scripts
Example #6
0
 def get_scripts(self):
     scripts = self.__get_file("web/scripts.js")
     fuzzers = "var fuzzers = [ "
     for key in FUZZERS.keys():
         fuzzers += "'" + key + "', [ "
         for elem in FUZZERS[key][0]:
             fuzzers += "'" + elem + "',"
         fuzzers = fuzzers[:-1]
         fuzzers += "],"
     fuzzers = fuzzers[:-1]
     fuzzers += "];\r\n"
     scripts = scripts.replace('FUZZERS', fuzzers)
     return self._statuses[200], self._header_js, scripts
Example #7
0
 def node_detail(self, node):
     node_config = node.info
     fuzzer_conf = ""
     if node.config != "":
         from_conf_file = ConfigParser(node.config)
         add_config, fuzzer_conf = from_conf_file.dump_additional_information()
         node_config += add_config
     node_detail_html = self._html_template
     node_detail_html = node_detail_html.replace("SECTION_TITLE", node.name)
     node_conf_table = "<form action=\"/index.py?func=home&node=" + node.address + \
                       "&submit=1\" method=\"post\">\r\n" + "<table>\r\n"
     node_conf_table += "<tr><th/><th/></tr>\r\n"
     # General config settings
     for i in range(4):
         node_conf_table += "<tr>\r\n<td><b>" + node_config[i][0] + "</b></td>\r\n" + \
                            "<td>" + node_config[i][1] + "</td>\r\n</tr>\r\n"
     del node_config[0:4]
     for elem in node_config:
         single_node = "<td><b>" + elem[0] + "</b></td>\r\n" + \
                       "<td><input type=\"text\" name=\"" + elem[0].lower() + "\" value=\"" + \
                       elem[1] + "\" size=\"60\"></td>\r\n"
         node_conf_table += "<tr>\r\n" + single_node + "</tr>\r\n"
     node_conf_table += "</table>\r\n"
     if fuzzer_conf != "":
         node_conf_table += "<table id=\"fuzz_table\" >\r\n<tr><th/><th/></tr>\r\n"
         # fuzzer settings
         fuzz_types_options = ""
         for key in FUZZERS.keys():
             fuzz_types_options += "<option>"+key+"</option>\r\n"
         node_conf_table += "<tr>\r\n<td><b>Fuzzer Type</b></td>\r\n<td><select id=\"fuzzers\" " + \
                            "onLoad=\"set_select_value('" + fuzzer_conf["fuzzer_type"] + "')\" " + \
                            " name=\"fuzzer_type\" onChange=\"changeFuzzer()\">\r\n" + \
                            fuzz_types_options+"</select>\r\n</td>\r\n</tr>\r\n"
         node_conf_table += "<div id=\"fuzz_config\">\r\n"
         for key in FUZZERS[fuzzer_conf["fuzzer_type"]][0]:
             node_conf_table += "<tr>\r\n<td><b>" + key + "</b></td>\r\n" + \
                                "<td><input type=\"text\" value=\"" + fuzzer_conf["fuzz_conf"][key] + "\" name=\"" + \
                                key + "\" >"
         # table end
         node_conf_table += "\r\n</div>\r\n"
         node_conf_table += "</table>\r\n"
     else:
         node_conf_table += "<br><br><b>No additional information received by now</b>\r\n"
     node_conf_table += "<br>\r\n"
     node_conf_table += "<input type=\"submit\" value=\"Submit\">\r\n</form>\r\n"
     node_conf_table += "<form action=\"/index.py?func=home&reboot=" + node.address + "\" method=\"post\">\r\n" + \
                        "<input type=\"submit\" value=\"Reboot node\">\r\n</form>\r\n"
     node_conf_table += "<form action=\"/index.py?func=home&del=" + node.address + "\" method=\"post\">\r\n" + \
                        "<input type=\"submit\" value=\"Delete node\">\r\n</form>\r\n"
     node_detail_html = node_detail_html.replace("REPLACE_ME", node_conf_table)
     return self._statuses[200], self._header_html, node_detail_html