forked from p15670423/monkey
Merge pull request #1748 from guardicore/1675-remove-32bit-from-hadoop
Remove 32-bit references from Hadoop
This commit is contained in:
commit
54715df43d
|
@ -1,4 +1,5 @@
|
||||||
import logging
|
import logging
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -16,27 +17,21 @@ def get_target_monkey(host):
|
||||||
|
|
||||||
from infection_monkey.control import ControlClient
|
from infection_monkey.control import ControlClient
|
||||||
|
|
||||||
if host.monkey_exe:
|
|
||||||
return host.monkey_exe
|
|
||||||
|
|
||||||
if not host.os.get("type"):
|
if not host.os.get("type"):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
monkey_path = ControlClient.download_monkey_exe(host)
|
|
||||||
|
|
||||||
if host.os.get("machine") and monkey_path:
|
|
||||||
host.monkey_exe = monkey_path
|
|
||||||
|
|
||||||
if not monkey_path:
|
|
||||||
if host.os.get("type") == platform.system().lower():
|
if host.os.get("type") == platform.system().lower():
|
||||||
# if exe not found, and we have the same arch or arch is unknown and we are 32bit,
|
try:
|
||||||
# use our exe
|
# When running from source, sys.executable will be "python", not an agent.
|
||||||
if (not host.os.get("machine") and sys.maxsize < 2 ** 32) or host.os.get(
|
if "monkey" in Path(sys.executable).name:
|
||||||
"machine", ""
|
return sys.executable
|
||||||
).lower() == platform.machine().lower():
|
except Exception as ex:
|
||||||
monkey_path = sys.executable
|
logger.warning(
|
||||||
|
"Unable to retrieve this executable's path, downloading executable from the island "
|
||||||
|
f"instead: {ex}"
|
||||||
|
)
|
||||||
|
|
||||||
return monkey_path
|
return ControlClient.download_monkey_exe(host)
|
||||||
|
|
||||||
|
|
||||||
def get_target_monkey_by_os(is_windows, is_32bit):
|
def get_target_monkey_by_os(is_windows, is_32bit):
|
||||||
|
@ -54,7 +49,7 @@ def get_monkey_depth():
|
||||||
def get_monkey_dest_path(url_to_monkey):
|
def get_monkey_dest_path(url_to_monkey):
|
||||||
"""
|
"""
|
||||||
Gets destination path from monkey's source url.
|
Gets destination path from monkey's source url.
|
||||||
:param url_to_monkey: Hosted monkey's url. egz : http://localserver:9999/monkey/windows-32.exe
|
:param url_to_monkey: Hosted monkey's url. egz : http://localserver:9999/monkey/windows-64.exe
|
||||||
:return: Corresponding monkey path from configuration
|
:return: Corresponding monkey path from configuration
|
||||||
"""
|
"""
|
||||||
from infection_monkey.config import WormConfiguration
|
from infection_monkey.config import WormConfiguration
|
||||||
|
|
|
@ -274,7 +274,7 @@ class WebRCE(HostExploiter):
|
||||||
"monkey_path": dest_path,
|
"monkey_path": dest_path,
|
||||||
"http_path": http_path,
|
"http_path": http_path,
|
||||||
}
|
}
|
||||||
self.telemetry_messenger.send_telemtry(
|
self.telemetry_messenger.send_telemetry(
|
||||||
T1197Telem(ScanStatus.USED, self.host, BITS_UPLOAD_STRING)
|
T1197Telem(ScanStatus.USED, self.host, BITS_UPLOAD_STRING)
|
||||||
)
|
)
|
||||||
resp = self.exploit(url, backup_command)
|
resp = self.exploit(url, backup_command)
|
||||||
|
@ -334,10 +334,10 @@ class WebRCE(HostExploiter):
|
||||||
command = CHMOD_MONKEY % {"monkey_path": path}
|
command = CHMOD_MONKEY % {"monkey_path": path}
|
||||||
try:
|
try:
|
||||||
resp = self.exploit(url, command)
|
resp = self.exploit(url, command)
|
||||||
self.telemetry_messenger.send_telemtry(T1222Telem(ScanStatus.USED, command, self.host))
|
self.telemetry_messenger.send_telemetry(T1222Telem(ScanStatus.USED, command, self.host))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Something went wrong while trying to change permission: %s" % e)
|
logger.error("Something went wrong while trying to change permission: %s" % e)
|
||||||
self.telemetry_messenger.send_telemtry(T1222Telem(ScanStatus.SCANNED, "", self.host))
|
self.telemetry_messenger.send_telemetry(T1222Telem(ScanStatus.SCANNED, "", self.host))
|
||||||
return False
|
return False
|
||||||
# If exploiter returns True / False
|
# If exploiter returns True / False
|
||||||
if isinstance(resp, bool):
|
if isinstance(resp, bool):
|
||||||
|
@ -432,8 +432,7 @@ class WebRCE(HostExploiter):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
logger.error(
|
logger.error(
|
||||||
'Unknown key was found. Please use "linux" and "win64" keys to '
|
'Unknown key was found. Please use "linux" and "win64" keys to '
|
||||||
"initialize "
|
"initialize custom dict of monkey's destination paths"
|
||||||
"custom dict of monkey's destination paths"
|
|
||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ class VictimHost(object):
|
||||||
self.os = {}
|
self.os = {}
|
||||||
self.services = {}
|
self.services = {}
|
||||||
self.icmp = False
|
self.icmp = False
|
||||||
self.monkey_exe = None
|
|
||||||
self.default_tunnel = None
|
self.default_tunnel = None
|
||||||
self.default_server = None
|
self.default_server = None
|
||||||
|
|
||||||
|
@ -42,7 +41,6 @@ class VictimHost(object):
|
||||||
for k, v in list(self.services.items()):
|
for k, v in list(self.services.items()):
|
||||||
victim += "%s-%s " % (k, v)
|
victim += "%s-%s " % (k, v)
|
||||||
victim += "] ICMP: %s " % (self.icmp)
|
victim += "] ICMP: %s " % (self.icmp)
|
||||||
victim += "target monkey: %s" % self.monkey_exe
|
|
||||||
return victim
|
return victim
|
||||||
|
|
||||||
def set_island_address(self, ip: str, port: Optional[str]):
|
def set_island_address(self, ip: str, port: Optional[str]):
|
||||||
|
|
|
@ -11,61 +11,23 @@ from monkey_island.cc.server_utils.consts import MONKEY_ISLAND_ABS_PATH
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
MONKEY_DOWNLOADS = [
|
MONKEY_DOWNLOADS = [
|
||||||
{
|
|
||||||
"type": "linux",
|
|
||||||
"machine": "x86_64",
|
|
||||||
"filename": "monkey-linux-64",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "linux",
|
|
||||||
"machine": "i686",
|
|
||||||
"filename": "monkey-linux-32",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "linux",
|
|
||||||
"machine": "i386",
|
|
||||||
"filename": "monkey-linux-32",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "linux",
|
"type": "linux",
|
||||||
"filename": "monkey-linux-64",
|
"filename": "monkey-linux-64",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "windows",
|
"type": "windows",
|
||||||
"machine": "x86",
|
|
||||||
"filename": "monkey-windows-32.exe",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "windows",
|
|
||||||
"machine": "amd64",
|
|
||||||
"filename": "monkey-windows-64.exe",
|
"filename": "monkey-windows-64.exe",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "windows",
|
|
||||||
"machine": "64",
|
|
||||||
"filename": "monkey-windows-64.exe",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "windows",
|
|
||||||
"machine": "32",
|
|
||||||
"filename": "monkey-windows-32.exe",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "windows",
|
|
||||||
"filename": "monkey-windows-32.exe",
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def get_monkey_executable(host_os, machine):
|
def get_monkey_executable(host_os):
|
||||||
for download in MONKEY_DOWNLOADS:
|
for download in MONKEY_DOWNLOADS:
|
||||||
if host_os == download.get("type") and machine == download.get("machine"):
|
if host_os == download.get("type"):
|
||||||
logger.info("Monkey exec found for os: {0} and machine: {1}".format(host_os, machine))
|
logger.info(f"Monkey exec found for os: {host_os}")
|
||||||
return download
|
return download
|
||||||
logger.warning(
|
logger.warning(f"No monkey executables could be found for the host os: {host_os}")
|
||||||
"No monkey executables could be found for the host os or machine or both: host_os: {"
|
|
||||||
"0}, machine: {1}".format(host_os, machine)
|
|
||||||
)
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,7 +42,7 @@ class MonkeyDownload(flask_restful.Resource):
|
||||||
host_json = json.loads(request.data)
|
host_json = json.loads(request.data)
|
||||||
host_os = host_json.get("os")
|
host_os = host_json.get("os")
|
||||||
if host_os:
|
if host_os:
|
||||||
result = get_monkey_executable(host_os.get("type"), host_os.get("machine"))
|
result = get_monkey_executable(host_os.get("type"))
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
# change resulting from new base path
|
# change resulting from new base path
|
||||||
|
|
|
@ -25,7 +25,7 @@ class LocalMonkeyRunService:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_local_monkey():
|
def run_local_monkey():
|
||||||
# get the monkey executable suitable to run on the server
|
# get the monkey executable suitable to run on the server
|
||||||
result = get_monkey_executable(platform.system().lower(), platform.machine().lower())
|
result = get_monkey_executable(platform.system().lower())
|
||||||
if not result:
|
if not result:
|
||||||
return False, "OS Type not found"
|
return False, "OS Type not found"
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@ HOST_AS_DICT = {
|
||||||
"os": {},
|
"os": {},
|
||||||
"services": {},
|
"services": {},
|
||||||
"icmp": False,
|
"icmp": False,
|
||||||
"monkey_exe": None,
|
|
||||||
"default_tunnel": None,
|
"default_tunnel": None,
|
||||||
"default_server": None,
|
"default_server": None,
|
||||||
}
|
}
|
||||||
|
@ -37,7 +36,13 @@ ERROR_MSG = "failed because yolo"
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def exploit_telem_test_instance():
|
def exploit_telem_test_instance():
|
||||||
return ExploitTelem(EXPLOITER_NAME, HOST, ExploiterResultData(RESULT, RESULT, OS_LINUX, EXPLOITER_INFO, EXPLOITER_ATTEMPTS, ERROR_MSG))
|
return ExploitTelem(
|
||||||
|
EXPLOITER_NAME,
|
||||||
|
HOST,
|
||||||
|
ExploiterResultData(
|
||||||
|
RESULT, RESULT, OS_LINUX, EXPLOITER_INFO, EXPLOITER_ATTEMPTS, ERROR_MSG
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_exploit_telem_send(exploit_telem_test_instance, spy_send_telemetry):
|
def test_exploit_telem_send(exploit_telem_test_instance, spy_send_telemetry):
|
||||||
|
|
|
@ -14,7 +14,6 @@ HOST_AS_DICT = {
|
||||||
"os": {},
|
"os": {},
|
||||||
"services": {},
|
"services": {},
|
||||||
"icmp": False,
|
"icmp": False,
|
||||||
"monkey_exe": None,
|
|
||||||
"default_tunnel": None,
|
"default_tunnel": None,
|
||||||
"default_server": None,
|
"default_server": None,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue