Exemple #1
0
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Set The Meter\'s I.D.'
     self.detailed_description = 'This module will over write the Smart Meter\'s device ID with the new value specified in METER_ID.'
     self.options.add_string('METER_ID', 'value to set the meter id to',
                             True)
Exemple #2
0
    def __init__(self, *args, **kwargs):
        TermineterModuleOptical.__init__(self, *args, **kwargs)
        self.author = ['Spencer McIntyre']
        self.description = 'Brute Force Credentials'
        self.detailed_description = 'This module is used for brute forcing credentials on the smart meter.  Passwords are not limited to ASCII values and in order to test the entire character space the user will have to provide a dictionary of hex strings and set USE_HEX to true.'
        self.options.add_boolean('USE_HEX',
                                 'values in word list are in hex',
                                 default=True)
        self.options.add_rfile('DICTIONARY',
                               'dictionary of passwords to try',
                               required=False,
                               default='$DATA_PATH smeter_passwords.txt')
        self.options.add_string('USERNAME',
                                'user name to attempt to log in as',
                                default='0000')
        self.options.add_integer('USER_ID',
                                 'user id to attempt to log in as',
                                 default=1)

        self.advanced_options.add_boolean('PURE_BRUTEFORCE',
                                          'perform a pure bruteforce',
                                          default=False)
        self.advanced_options.add_boolean(
            'STOP_ON_SUCCESS',
            'stop after the first successful login',
            default=True)
        self.advanced_options.add_float(
            'DELAY', 'time in seconds to wait between attempts', default=0.20)
Exemple #3
0
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Initiate A Reset Procedure'
		self.detailed_description = 'Initiate a remote reset procedure. Despite the name, this module is used locally through the optical interface.'
		self.options.add_boolean('DEMAND', 'perform a demand reset', default=False)
		self.options.add_boolean('SELF_READ', 'perform a self read', default=False)
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Write Readable C12.19 Tables To A CSV File'
		self.detailed_description = 'This module will enumerate the readable tables on the smart meter and write them out to a CSV formated file for analysis. The format is table id, table name, table data length, table data.  The table data is represented in hex.'
		self.options.add_integer('LOWER', 'table id to start reading from', default=0)
		self.options.add_integer('UPPER', 'table id to stop reading from', default=256)
		self.options.add_string('FILE', 'file to write the csv data into', default='smart_meter_tables.csv')
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Initiate A Custom Procedure'
		self.detailed_description = 'This module executes a user defined procedure and returns the response. This is achieved by writing to the Procedure Initiate Table (#7) and then reading the result from the Procedure Response Table (#8).'
		self.options.add_integer('PROC_NUMBER', 'procedure number to execute')
		self.options.add_string('PARAMS', 'parameters to pass to the executed procedure', default='')
		self.options.add_boolean('USE_HEX', 'specifies that the \'PARAMS\' option is represented in hex', default=True)
		self.advanced_options.add_boolean('STD_VS_MFG', 'if true, specifies that this procedure is defined by the manufacturer', default=False)
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Enumerate Valid User IDs From The Device'
		self.detailed_description = 'This module will enumerate existing user IDs from the device.'
		self.options.add_string('USERNAME', 'user name to attempt to log in as', default='0000')
		self.options.add_integer('LOWER', 'user id to start enumerating from', default=0)
		self.options.add_integer('UPPER', 'user id to stop enumerating from', default=50)
		self.advanced_options.add_float('DELAY', 'time in seconds to wait between attempts', default=0.20)
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Enumerate Readable C12.19 Tables From The Device'
		self.detailed_description = """\
		This module will enumerate the readable tables on the smart meter by attempting to transfer each one. Tables are
		grouped into decades.
		"""
		self.options.add_integer('LOWER', 'table id to start reading from', default=0)
		self.options.add_integer('UPPER', 'table id to stop reading from', default=256)
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Brute Force Credentials'
		self.detailed_description = 'This module is used for brute forcing credentials on the smart meter.  Passwords are not limited to ASCII values and in order to test the entire character space the user will have to provide a dictionary of hex strings and set USE_HEX to true.'
		self.options.add_boolean('USE_HEX', 'values in word list are in hex', default=True)
		self.options.add_rfile('DICTIONARY', 'dictionary of passwords to try', required=False, default='$DATA_PATH smeter_passwords.txt')
		self.options.add_string('USERNAME', 'user name to attempt to log in as', default='0000')
		self.options.add_integer('USER_ID', 'user id to attempt to log in as', default=1)

		self.advanced_options.add_boolean('PURE_BRUTEFORCE', 'perform a pure bruteforce', default=False)
		self.advanced_options.add_boolean('STOP_ON_SUCCESS', 'stop after the first successful login', default=True)
		self.advanced_options.add_float('DELAY', 'time in seconds to wait between attempts', default=0.20)
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Write Data To A C12.19 Table'
		self.detailed_description = '''\
		This will over write the data in a write able table on the smart meter. If USE_HEX is set to true then the DATA
		option is expected to be represented as a string of hex characters.
		'''
		self.options.add_integer('TABLE_ID', 'table to read from', True)
		self.options.add_string('DATA', 'data to write to the table', True)
		self.options.add_boolean('USE_HEX', 'specifies that the \'DATA\' option is represented in hex', default=True)
		self.options.add_integer('OFFSET', 'offset to start writing data at', required=False, default=0)
		self.advanced_options.add_boolean('VERIFY', 'verify that the data was written with a read request', default=True)
Exemple #10
0
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Write Data To A C12.19 Table'
		self.detailed_description = '''\
		This will over write the data in a write able table on the smart meter. If USE_HEX is set to true then the DATA
		option is expected to be represented as a string of hex characters.
		'''
		self.options.add_integer('TABLE_ID', 'table to read from', True)
		self.options.add_string('DATA', 'data to write to the table', True)
		self.options.add_boolean('USE_HEX', 'specifies that the \'DATA\' option is represented in hex', default=True)
		self.options.add_integer('OFFSET', 'offset to start writing data at', required=False, default=0)
		self.advanced_options.add_boolean('VERIFY', 'verify that the data was written with a read request', default=True)
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Write Readable C12.19 Tables To A CSV File'
     self.detailed_description = 'This module will enumerate the readable tables on the smart meter and write them out to a CSV formated file for analysis. The format is table id, table name, table data length, table data.  The table data is represented in hex.'
     self.options.add_integer('LOWER',
                              'table id to start reading from',
                              default=0)
     self.options.add_integer('UPPER',
                              'table id to stop reading from',
                              default=256)
     self.options.add_string('FILE',
                             'file to write the csv data into',
                             default='smart_meter_tables.csv')
    def __init__(self, *args, **kwargs):
        TermineterModuleOptical.__init__(self, *args, **kwargs)
        self.author = ['Spencer McIntyre']
        self.description = 'Enumerate Readable C12.19 Tables From The Device'
        self.detailed_description = """\
		This module will enumerate the readable tables on the smart meter by attempting to transfer each one. Tables are
		grouped into decades.
		"""
        self.options.add_integer('LOWER',
                                 'table id to start reading from',
                                 default=0)
        self.options.add_integer('UPPER',
                                 'table id to stop reading from',
                                 default=256)
Exemple #13
0
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Initiate A Custom Procedure'
     self.detailed_description = 'This module executes a user defined procedure and returns the response. This is achieved by writing to the Procedure Initiate Table (#7) and then reading the result from the Procedure Response Table (#8).'
     self.options.add_integer('PROC_NUMBER', 'procedure number to execute')
     self.options.add_string('PARAMS',
                             'parameters to pass to the executed procedure',
                             default='')
     self.options.add_boolean(
         'USE_HEX',
         'specifies that the \'PARAMS\' option is represented in hex',
         default=True)
     self.advanced_options.add_boolean(
         'STD_VS_MFG',
         'if true, specifies that this procedure is defined by the manufacturer',
         default=False)
Exemple #14
0
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Get Basic Meter Information By Reading Tables'
		self.detailed_description = 'This module retreives some basic meter information and displays it in a human-readable way.'
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Set The Meter\'s I.D.'
		self.detailed_description = 'This module will over write the Smart Meter\'s device ID with the new value specified in METER_ID.'
		self.options.add_string('METER_ID', 'value to set the meter id to', True)
Exemple #16
0
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Get Information About The Meter\'s Access Control'
     self.detailed_description = 'This module reads various tables from 40 to gather information regarding access control. Password constraints, and access permissions to procedures and tables can be gathered with this module.'
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Get Information About The Meter\'s Access Control'
		self.detailed_description = 'This module reads various tables from 40 to gather information regarding access control. Password constraints, and access permissions to procedures and tables can be gathered with this module.'
Exemple #18
0
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Read And Parse The Identification Information'
     self.detailed_description = 'This module reads and parses the information from the C12.18 identification service.'
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Get Information About The Meter\'s Logs'
		self.detailed_description = """\
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Change the Meter\'s Operating Mode'
		self.detailed_description = 'Change the operating mode of the meter. Accepted values for MODE are METERING, TEST, METERSHOP, and FACTORY.'
		self.options.add_string('MODE', 'the mode to set the meter to', True)
Exemple #21
0
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Get Basic Meter Information By Reading Tables'
     self.detailed_description = 'This module retreives some basic meter information and displays it in a human-readable way.'
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Read Data From A C12.19 Table'
     self.detailed_description = 'This module allows individual tables to be read from the smart meter.'
     self.options.add_integer('TABLE_ID', 'table to read from', True)
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Get Information From The Local Display Tables'
		self.detailed_description = '''\
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Get Information About The Meter\'s Logs'
     self.detailed_description = """\
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Get Information From The Local Display Tables'
     self.detailed_description = '''\
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Read And Parse The Identification Information'
		self.detailed_description = 'This module reads and parses the information from the C12.18 identification service.'
Exemple #27
0
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Read Data From A C12.19 Table'
		self.detailed_description = 'This module allows individual tables to be read from the smart meter.'
		self.options.add_integer('TABLE_ID', 'table to read from', True)
Exemple #28
0
 def __init__(self, *args, **kwargs):
     TermineterModuleOptical.__init__(self, *args, **kwargs)
     self.author = ['Spencer McIntyre']
     self.description = 'Change the Meter\'s Operating Mode'
     self.detailed_description = 'Change the operating mode of the meter. Accepted values for MODE are METERING, TEST, METERSHOP, and FACTORY.'
     self.options.add_string('MODE', 'the mode to set the meter to', True)
	def __init__(self, *args, **kwargs):
		TermineterModuleOptical.__init__(self, *args, **kwargs)
		self.author = ['Spencer McIntyre']
		self.description = 'Get Information About The Integrated Modem'
		self.detailed_description = 'This module reads various C12.19 tables from decade 90 to gather information about the integrated modem. If successfully parsed, useful information will be displayed.'