Merge pull request #1748 from guardicore/1675-remove-32bit-from-hadoop

Remove 32-bit references from Hadoop
This commit is contained in:
Mike Salvatore 2022-02-28 09:52:21 -05:00 committed by GitHub
commit 54715df43d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 72 deletions

View File

@ -1,4 +1,5 @@
import logging
from pathlib import Path
logger = logging.getLogger(__name__)
@ -16,27 +17,21 @@ def get_target_monkey(host):
from infection_monkey.control import ControlClient
if host.monkey_exe:
return host.monkey_exe
if not host.os.get("type"):
return None
monkey_path = ControlClient.download_monkey_exe(host)
if host.os.get("type") == platform.system().lower():
try:
# When running from source, sys.executable will be "python", not an agent.
if "monkey" in Path(sys.executable).name:
return sys.executable
except Exception as ex:
logger.warning(
"Unable to retrieve this executable's path, downloading executable from the island "
f"instead: {ex}"
)
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 exe not found, and we have the same arch or arch is unknown and we are 32bit,
# use our exe
if (not host.os.get("machine") and sys.maxsize < 2 ** 32) or host.os.get(
"machine", ""
).lower() == platform.machine().lower():
monkey_path = sys.executable
return monkey_path
return ControlClient.download_monkey_exe(host)
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):
"""
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
"""
from infection_monkey.config import WormConfiguration

View File

@ -274,7 +274,7 @@ class WebRCE(HostExploiter):
"monkey_path": dest_path,
"http_path": http_path,
}
self.telemetry_messenger.send_telemtry(
self.telemetry_messenger.send_telemetry(
T1197Telem(ScanStatus.USED, self.host, BITS_UPLOAD_STRING)
)
resp = self.exploit(url, backup_command)
@ -334,10 +334,10 @@ class WebRCE(HostExploiter):
command = CHMOD_MONKEY % {"monkey_path": path}
try:
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:
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
# If exploiter returns True / False
if isinstance(resp, bool):
@ -432,8 +432,7 @@ class WebRCE(HostExploiter):
except KeyError:
logger.error(
'Unknown key was found. Please use "linux" and "win64" keys to '
"initialize "
"custom dict of monkey's destination paths"
"initialize custom dict of monkey's destination paths"
)
return False

View File

@ -8,7 +8,6 @@ class VictimHost(object):
self.os = {}
self.services = {}
self.icmp = False
self.monkey_exe = None
self.default_tunnel = None
self.default_server = None
@ -42,7 +41,6 @@ class VictimHost(object):
for k, v in list(self.services.items()):
victim += "%s-%s " % (k, v)
victim += "] ICMP: %s " % (self.icmp)
victim += "target monkey: %s" % self.monkey_exe
return victim
def set_island_address(self, ip: str, port: Optional[str]):

View File

@ -11,61 +11,23 @@ from monkey_island.cc.server_utils.consts import MONKEY_ISLAND_ABS_PATH
logger = logging.getLogger(__name__)
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",
"filename": "monkey-linux-64",
},
{
"type": "windows",
"machine": "x86",
"filename": "monkey-windows-32.exe",
},
{
"type": "windows",
"machine": "amd64",
"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:
if host_os == download.get("type") and machine == download.get("machine"):
logger.info("Monkey exec found for os: {0} and machine: {1}".format(host_os, machine))
if host_os == download.get("type"):
logger.info(f"Monkey exec found for os: {host_os}")
return download
logger.warning(
"No monkey executables could be found for the host os or machine or both: host_os: {"
"0}, machine: {1}".format(host_os, machine)
)
logger.warning(f"No monkey executables could be found for the host os: {host_os}")
return None
@ -80,7 +42,7 @@ class MonkeyDownload(flask_restful.Resource):
host_json = json.loads(request.data)
host_os = host_json.get("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:
# change resulting from new base path

View File

@ -25,7 +25,7 @@ class LocalMonkeyRunService:
@staticmethod
def run_local_monkey():
# 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:
return False, "OS Type not found"

View File

@ -16,7 +16,6 @@ HOST_AS_DICT = {
"os": {},
"services": {},
"icmp": False,
"monkey_exe": None,
"default_tunnel": None,
"default_server": None,
}
@ -37,7 +36,13 @@ ERROR_MSG = "failed because yolo"
@pytest.fixture
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):

View File

@ -14,7 +14,6 @@ HOST_AS_DICT = {
"os": {},
"services": {},
"icmp": False,
"monkey_exe": None,
"default_tunnel": None,
"default_server": None,
}