mirror of
https://github.com/EmpireProject/EmPyre
synced 2026-06-08 10:57:53 +00:00
bb01701b36
changed reexport_library path and recompiled dylib templates changed CreateHijacker module to generate dylib at module runtime changed launchdaemonexecutable module to generate macho at module runtime updated RemoveDaemon module updated module output in HijackScanner module corrected default user-agent in setup_database.py
97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
from lib.common import helpers
|
|
|
|
class Module:
|
|
|
|
def __init__(self, mainMenu, params=[]):
|
|
|
|
# metadata info about the module, not modified during runtime
|
|
self.info = {
|
|
# name for the module that will appear in module menus
|
|
'Name': 'RemoveLaunchDaemon',
|
|
|
|
# list of one or more authors for the module
|
|
'Author': ['@xorrior'],
|
|
|
|
# more verbose multi-line description of the module
|
|
'Description': ('Remove an EmPyre Launch Daemon.'),
|
|
|
|
# True if the module needs to run in the background
|
|
'Background' : False,
|
|
|
|
# File extension to save the file as
|
|
'OutputExtension' : None,
|
|
|
|
# if the module needs administrative privileges
|
|
'NeedsAdmin' : True,
|
|
|
|
# True if the method doesn't touch disk/is reasonably opsec safe
|
|
'OpsecSafe' : True,
|
|
|
|
# list of any references/other comments
|
|
'Comments': []
|
|
}
|
|
|
|
# any options needed by the module, settable during runtime
|
|
self.options = {
|
|
# format:
|
|
# value_name : {description, required, default_value}
|
|
'Agent' : {
|
|
# The 'Agent' option is the only one that MUST be in a module
|
|
'Description' : 'Agent to execute module on.',
|
|
'Required' : True,
|
|
'Value' : ''
|
|
},
|
|
'PlistPath' : {
|
|
'Description' : 'Full path to the plist file to remove.',
|
|
'Required' : True,
|
|
'Value' : ''
|
|
},
|
|
'ProgramPath' : {
|
|
'Description' : 'Full path to the bash script/ binary file to remove.',
|
|
'Required' : True,
|
|
'Value' : ''
|
|
}
|
|
|
|
}
|
|
|
|
# save off a copy of the mainMenu object to access external functionality
|
|
# like listeners/agent handlers/etc.
|
|
self.mainMenu = mainMenu
|
|
|
|
# During instantiation, any settable option parameters
|
|
# are passed as an object set to the module and the
|
|
# options dictionary is automatically set. This is mostly
|
|
# in case options are passed on the command line
|
|
if params:
|
|
for param in params:
|
|
# parameter format is [Name, Value]
|
|
option, value = param
|
|
if option in self.options:
|
|
self.options[option]['Value'] = value
|
|
|
|
|
|
def generate(self):
|
|
|
|
plistpath = self.options['PlistPath']['Value']
|
|
programpath = self.options['ProgramPath']['Value']
|
|
|
|
|
|
|
|
script = """
|
|
import subprocess
|
|
|
|
process = subprocess.Popen('launchctl unload %s', stdout=subprocess.PIPE, shell=True)
|
|
process.communicate()
|
|
|
|
process = subprocess.Popen('rm %s', stdout=subprocess.PIPE, shell=True)
|
|
process.communicate()
|
|
|
|
process = subprocess.Popen('rm %s', stdout=subprocess.PIPE, shell=True)
|
|
process.communicate()
|
|
|
|
print "\\n [+] %s has been removed"
|
|
print "\\n [+] %s has been removed"
|
|
""" %(plistpath,plistpath,programpath,plistpath,programpath)
|
|
|
|
return script
|