forked from p15670423/monkey
seperate the wakeup and server lookup processes
This commit is contained in:
parent
8509eef48e
commit
355a75feef
|
@ -24,10 +24,10 @@ class ControlClient(object):
|
||||||
proxies = {}
|
proxies = {}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def wakeup(parent=None, default_tunnel=None, has_internet_access=None):
|
def wakeup(parent=None, has_internet_access=None):
|
||||||
LOG.debug("Trying to wake up with Monkey Island servers list: %r" % WormConfiguration.command_servers)
|
if parent:
|
||||||
if parent or default_tunnel:
|
LOG.debug("parent: %s" % (parent,))
|
||||||
LOG.debug("parent: %s, default_tunnel: %s" % (parent, default_tunnel))
|
|
||||||
hostname = gethostname()
|
hostname = gethostname()
|
||||||
if not parent:
|
if not parent:
|
||||||
parent = GUID
|
parent = GUID
|
||||||
|
@ -35,31 +35,43 @@ class ControlClient(object):
|
||||||
if has_internet_access is None:
|
if has_internet_access is None:
|
||||||
has_internet_access = check_internet_access(WormConfiguration.internet_services)
|
has_internet_access = check_internet_access(WormConfiguration.internet_services)
|
||||||
|
|
||||||
|
monkey = {'guid': GUID,
|
||||||
|
'hostname': hostname,
|
||||||
|
'ip_addresses': local_ips(),
|
||||||
|
'description': " ".join(platform.uname()),
|
||||||
|
'internet_access': has_internet_access,
|
||||||
|
'config': WormConfiguration.as_dict(),
|
||||||
|
'parent': parent}
|
||||||
|
|
||||||
|
if ControlClient.proxies:
|
||||||
|
monkey['tunnel'] = ControlClient.proxies.get('https')
|
||||||
|
|
||||||
|
requests.post("https://%s/api/monkey" % (WormConfiguration.current_server,),
|
||||||
|
data=json.dumps(monkey),
|
||||||
|
headers={'content-type': 'application/json'},
|
||||||
|
verify=False,
|
||||||
|
proxies=ControlClient.proxies,
|
||||||
|
timeout=20)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def find_server(default_tunnel=None):
|
||||||
|
LOG.debug("Trying to wake up with Monkey Island servers list: %r" % WormConfiguration.command_servers)
|
||||||
|
if default_tunnel:
|
||||||
|
LOG.debug("default_tunnel: %s" % (default_tunnel,))
|
||||||
|
|
||||||
for server in WormConfiguration.command_servers:
|
for server in WormConfiguration.command_servers:
|
||||||
try:
|
try:
|
||||||
WormConfiguration.current_server = server
|
WormConfiguration.current_server = server
|
||||||
|
|
||||||
monkey = {'guid': GUID,
|
|
||||||
'hostname': hostname,
|
|
||||||
'ip_addresses': local_ips(),
|
|
||||||
'description': " ".join(platform.uname()),
|
|
||||||
'internet_access': has_internet_access,
|
|
||||||
'config': WormConfiguration.as_dict(),
|
|
||||||
'parent': parent}
|
|
||||||
|
|
||||||
if ControlClient.proxies:
|
|
||||||
monkey['tunnel'] = ControlClient.proxies.get('https')
|
|
||||||
|
|
||||||
debug_message = "Trying to connect to server: %s" % server
|
debug_message = "Trying to connect to server: %s" % server
|
||||||
if ControlClient.proxies:
|
if ControlClient.proxies:
|
||||||
debug_message += " through proxies: %s" % ControlClient.proxies
|
debug_message += " through proxies: %s" % ControlClient.proxies
|
||||||
LOG.debug(debug_message)
|
LOG.debug(debug_message)
|
||||||
reply = requests.post("https://%s/api/monkey" % (server,),
|
# TODO: use different api call to check connectivity.
|
||||||
data=json.dumps(monkey),
|
requests.get("https://%s/api/monkey" % (server,),
|
||||||
headers={'content-type': 'application/json'},
|
verify=False,
|
||||||
verify=False,
|
proxies=ControlClient.proxies)
|
||||||
proxies=ControlClient.proxies,
|
|
||||||
timeout=20)
|
|
||||||
break
|
break
|
||||||
|
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
@ -74,7 +86,7 @@ class ControlClient(object):
|
||||||
proxy_address, proxy_port = proxy_find
|
proxy_address, proxy_port = proxy_find
|
||||||
LOG.info("Found tunnel at %s:%s" % (proxy_address, proxy_port))
|
LOG.info("Found tunnel at %s:%s" % (proxy_address, proxy_port))
|
||||||
ControlClient.proxies['https'] = 'https://%s:%s' % (proxy_address, proxy_port)
|
ControlClient.proxies['https'] = 'https://%s:%s' % (proxy_address, proxy_port)
|
||||||
ControlClient.wakeup(parent=parent, has_internet_access=has_internet_access)
|
ControlClient.find_server()
|
||||||
else:
|
else:
|
||||||
LOG.info("No tunnel found")
|
LOG.info("No tunnel found")
|
||||||
|
|
||||||
|
@ -234,7 +246,6 @@ class ControlClient(object):
|
||||||
data=json.dumps(host_dict),
|
data=json.dumps(host_dict),
|
||||||
headers={'content-type': 'application/json'},
|
headers={'content-type': 'application/json'},
|
||||||
verify=False, proxies=ControlClient.proxies)
|
verify=False, proxies=ControlClient.proxies)
|
||||||
|
|
||||||
if 200 == reply.status_code:
|
if 200 == reply.status_code:
|
||||||
result_json = reply.json()
|
result_json = reply.json()
|
||||||
filename = result_json.get('filename')
|
filename = result_json.get('filename')
|
||||||
|
|
|
@ -76,7 +76,8 @@ class InfectionMonkey(object):
|
||||||
|
|
||||||
if firewall.is_enabled():
|
if firewall.is_enabled():
|
||||||
firewall.add_firewall_rule()
|
firewall.add_firewall_rule()
|
||||||
ControlClient.wakeup(parent=self._parent, default_tunnel=self._default_tunnel)
|
ControlClient.find_server(default_tunnel=self._default_tunnel)
|
||||||
|
ControlClient.wakeup(parent=self._parent)
|
||||||
ControlClient.load_control_config()
|
ControlClient.load_control_config()
|
||||||
|
|
||||||
if not WormConfiguration.alive:
|
if not WormConfiguration.alive:
|
||||||
|
|
Loading…
Reference in New Issue