expliot.core.tests.test¶
Plugin/test details.
Attributes¶
Classes¶
Representation of Test Category. |
|
Representation of Test Target class. |
|
Representation of a test result. |
|
Representation of a Test Log. |
|
Representation of Test. |
Module Contents¶
- expliot.core.tests.test.LOGNO = 0¶
- expliot.core.tests.test.LOGPRETTY = 1¶
- expliot.core.tests.test.LOGNORMAL = 2¶
- class expliot.core.tests.test.TCategory(tech, iface, action)¶
Bases:
namedtuple
('TCategory'
,'tech
,iface
,action'
)Representation of Test Category.
The class that defines the category of the test case. It is part of the Test class member _category. It can be used to identify the type of test or search for a specific category. It is a namedtuple that defines three attributes (for categorizing test cases).
tech: What technology does the test use
iface: Interface of the test i.e. whether it is for software or hardware
- action: What action does the test perform i.e. is it an exploit or a
recon test for example.
- COAP = 'coap'¶
- DICOM = 'dicom'¶
- HTTP = 'http'¶
- MDNS = 'mdns'¶
- MODBUS = 'modbus'¶
- MQTT = 'mqtt'¶
- TCP = 'tcp'¶
- TLS = 'tls'¶
- UDP = 'udp'¶
- UPNP = 'upnp'¶
- BLE = 'ble'¶
- IEEE802154 = '802154'¶
- ZIGBEE = 'zigbee'¶
- CAN = 'can'¶
- I2C = 'i2c'¶
- JTAG = 'jtag'¶
- SPI = 'spi'¶
- UART = 'uart'¶
- CRYPTO = 'crypto'¶
- FW = 'firmware'¶
- DISCLOSURE = 'disclosure'¶
- ZB_AUDITOR = 'zbauditor'¶
- BUS_AUDITOR = 'busauditor'¶
- FW_AUDITOR = 'fwauditor'¶
- NMAP = 'nmap'¶
- _tech¶
- HW = 'hardware'¶
- RD = 'radio'¶
- SW = 'software'¶
- _interfaces¶
- ANALYSIS = 'analysis'¶
- COMPLIANCE = 'compliance'¶
- DISCOVERY = 'discovery'¶
- EXPLOIT = 'exploit'¶
- FUZZ = 'fuzz'¶
- RECON = 'recon'¶
- _actions¶
- class expliot.core.tests.test.TTarget(name, version, vendor)¶
Bases:
namedtuple
('TTarget'
,'name
,version
,vendor'
)Representation of Test Target class.
Class that hold details about the target of the test. It is a namedtuple and holds the below details:
name - Target/product name
version - Version of the product
vendor - Vendor that owns the product
Please note, in case it is a generic test case that can be used for multiple products use Target.GENERIC for all attributes.
- GENERIC = 'generic'¶
- LINUX = 'linux'¶
- AWS = 'aws'¶
- TP_LINK_IOT = 'tpliot'¶
- _name¶
- AMAZON = 'amazon'¶
- TP_LINK = 'tplink'¶
- _vendor¶
- class expliot.core.tests.test.TResult¶
Representation of a test result.
self.output is a list of dict. This is populated by the plugin when it needs to push results during the execution. To make it standardized, the plugin pushes a block of info in a dict object as and when it has certain info. For ex. when enumerating on something, each item identified will be push as a dict considering there is more than one data point to be stored for that item and once the plugin execution finishes we get a list of dicts containing same/similar data for each of the items.
- defaultrsn = 'No reason specified'¶
- passed = True¶
- reason = None¶
- output = []¶
- setstatus(passed=True, reason=None)¶
Set the Test result status.
- Parameters:
passed – True or False
reason – Reason for failure if any
- Returns:
- exception()¶
Set passed to False and reason to the exception message.
- Returns:
Nothing
- getresult()¶
Returns a dict with result data.
Caller needs to make sure plugin execution (run()) is done before calling this.
- Returns:
dict: the result data including status and output
NOTE: This is the standard dict format that will be used by EXPLIoT for returning the plugin execution results. The dict keys and their meaning: status(int) - The execution status of the plugin. 0 if the test passed
1 otherwise.
- reason(str) - The reason the test failed. If it was successful, this
will be None.
- output(list) - The actual plugin execution output. This is a list of
dicts and the plugins MUST adhere to this format and document their output format clearly in the plugin class.
- class expliot.core.tests.test.TLog¶
Representation of a Test Log.
Logger class for logging test case output. By default log to sys.stdout Must not instantiate. Use class methods. The logger needs to be initialized with the output file using init() class method
- SUCCESS = 0¶
- FAIL = 1¶
- TRYDO = 2¶
- GENERIC = 3¶
- _prefix = ['[+]', '[-]', '[?]', '[*]']¶
- _errprefix = '[.]'¶
- _file¶
- classmethod init(file=None)¶
Initialize the file object.
This method should be called in the beginning of the application to open the log output file.
- Parameters:
file – The file where to log the test output
- Returns:
- classmethod close()¶
Close the file object if it is not sys.stdout.
- Returns:
- classmethod print(prefixtype, message)¶
The actual print methods.
Write the formatted message to the _file file.
- Args:
prefixtype(int): the prefix type to be used for the message (defined above) message(str): The actual message from the Test object
- Returns:
Nothing
- classmethod success(message)¶
Write a message with success prefix to the file.
- Parameters:
message – The message to be written
- Returns:
- classmethod fail(message)¶
Write a message with fail prefix to the file.
- Parameters:
message – The message to be written
- Returns:
- classmethod trydo(message)¶
Write a message with try prefix to the file.
- Parameters:
message – The message to be written
- Returns:
void
- classmethod generic(message)¶
Write a message with success prefix to the file.
- Parameters:
message – The message to be written
- Returns:
void
- class expliot.core.tests.test.Test(**kwargs)¶
Representation of Test.
The Base class for test cases (plugins). It defines the basic interface and basic implementation for the test cases. All test case plugins need to inherit from a test class derived from this class or this class itself depending on the purpose of the test case.
- name¶
- summary¶
- descr¶
- author¶
- email¶
- ref¶
- category¶
- target¶
- needroot = False¶
- argparser¶
- result¶
- args = None¶
- pre()¶
Action to take before the test.
- post()¶
Action to take after the test.
- execute()¶
Execute the test.
- intro()¶
Show the intro for test.
- output_dict_iter(cblog, robj, rlevel, key=None, value=None)¶
Callback method for recurse_list_dict().
- It iterates over the dict
output passed from a plugin to output_handler(). It performs two operations on the dict
If the output data is to be TLog(ged) (LOGPRETTY) on the console, then log the data recursively from the dict.
Convert any bytes or bytearray objects in the dict to binary string and update the original dict object itself.
- Args:
- cblog (dict): Contains logging information i.e. to log the data or not?
and the Log prefix type.
- robj (list or dict): The list or dict object at the specified recursion
level. This is updated by this callback i.e. bytes and bytearray objects found are converted to binary strings.
- rlevel (int): The current recursion level at which this callback
instance is called.
key (str): The key if the robj is a dict. value (can be any type): 1. The value of the key if robj is a dict or
A value from the robj if it is a list
- Returns:
Nothing
- output_handler(tlogtype=TLog.SUCCESS, msg=None, logkwargs=LOGPRETTY, **kwargs)¶
Handle the Test execution output data.
Add(append) data (dict) as an item in the TResult output (list).
And/or Log (print) the output
- Args:
- tlogtype (int): TLog prefix type to use i.e. Success, fail etc.
Check TLog class for prefix details.
- msg (str): Specify a message to be logged, if any, apart from
output data.
- logkwargs=LOGPRETTY(int): There are three options for kwargs logging
LOGPRETTY(0) - formatted logging for dict or list. LOGNORMAL(1) - Direct print of dict or list as is. LOGNO(2) - Do not log kwargs.
**kwargs: plugin output keyword arguments (or a **dictObject)
- Returns:
Nothing.
- run(arglist)¶
Run the test.
- Args:
arglist (list): The argument list of the plugin.
- Returns:
- dict: The plugin result (status and output) on success,
or an empty dict in case of any error.
- _assertpriv()¶
Raise an exception if the plugin needs root privileges.
Only if program is not executing as root.
- Args:
None
- Returns:
Nothing
- _setid()¶
Set the Unique Test ID.
The ID is the plugin class name in lowercase.
- Args:
None
- Returns:
Nothing
- _logstatus()¶
Handle the log status.
- Args:
None
- Returns:
Nothing