After deciding what your module should do, take this template and edit it for your needs.
Template
"""
This module requires HatSploit: https://hatsploit.com
Current source: https://github.com/EntySec/HatSploit
"""
from hatsploit.lib.module.basic import *
class HatSploitModule(Module):
def __init__(self):
super().__init__()
self.details.update({
'Category': "category",
'Name': "full name",
'Module': "name",
'Authors': [
'Your name (your nickname) - module developer',
],
'Description': "description.",
'Platform': Platform,
'Rank': "rank level",
'Payload': {
'Value': "default payload",
'Platforms': [Platform, Platform, ...],
'Arches': [Arch, Arch, ...],
'Types': ['type 1', 'type 2', ...]
}
})
def run(self):
pass
NOTE: All modules should inherit from Module
, otherwise module won’t be imported.
Let’s go through all the necessary methods:
self.details
- Is a dictionary containing all necessary information (Full name
,name
,description
,authors
, etc.)self.run()
- Method, which is called onrun
.
Module platform (Platform
)
For now, HatSploit does accept these platforms:
- Platforms: OS_LINUX, OS_MACOS, OS_ANDROID, OS_WINDOWS, OS_IPHONE, OS_UNIX.
Module rank (Rank
)
Module rank is an approximate level of risk that can be caused by the module. These levels can be set for the module:
low
- No serious impact at all or a low impact.- e.g. scanners, auxiliary modules
medium
- Medium impact.- e.g. path traversal, LFI, aggressive scanners
high
- High impact.- e.g. RCE, command injection, DoS exploits
Module payload (Payload
)
A default payload or a compatible payload that can be used with the module. If no default payload provided, user will be prompted to select one. Only payloads that have platforms, architectures and types same as ones that are selected in the Payload
will be valid.
This field should be used in modules, that are exploit RCE flaws for example.
NOTE: This field is optional, you can omit it.
Module commands
You can easily add commands to the HatSploit interface from the module.
self.commands = {
'command1': {
'Description': "description",
'Usage': "command1",
'MinArgs': 0,
},
'command2': {
'Description': "description",
'Usage': "command2",
'MinArgs': 0,
},
}
Description
- Command description.Usage
- Usage which is displayed ifMinArgs
condition is not achieved.MinArgs
- Minimum necessary arguments. (e.g. if your command requires one mandatory argument, thenMinArgs
should be1
)
NOTE: If your command has specific list of arguments that should be displayed if MinArgs
condition is not achieved, add Options
like this:
'Options': {
'-e': ['<arg>', 'Example'],
}
Moreover, commands are implemented within methods which have the same names as their commands from self.commands
. For example (for previous dictionary):
def command1(self, argc, argv):
... snip ...
def command2(self, argc, argv):
... snip ...
argc
- Number or arguments. (including command name)argv
- List of arguments. (including command name, which isargv[0]
)
Module options
You can add options to the module, read about them here.
Examples
You can always refer to the main repository which contains some modules and rely on them. We will be glad if you first explore already existing modules before writing new ones.