Fixed agent result caching bug (again)

Fixed multiple agent-interaction bug that causes results to be displayed simultaneously
1.6
Harmj0y 2015-11-24 00:41:16 -05:00
parent 79400a329f
commit 3817385bb2
2 changed files with 55 additions and 42 deletions

View File

@ -1159,22 +1159,28 @@ class Agents:
counter = responsePackets[-1][1]
results = False
# validate the counter in the packet in the setcode.replace
if counter and packets.validate_counter(counter):
# signal that this agent returned results
name = self.get_agent_name(sessionID)
dispatcher.send("[*] Agent "+str(name)+" returned results.", sender="Agents")
results = True
# process each result packet
for responsePacket in responsePackets:
(responseName, counter, length, data) = responsePacket
# process the agent's response
self.handle_agent_response(sessionID, responseName, data)
if results:
# signal that this agent returned results
name = self.get_agent_name(sessionID)
dispatcher.send("[*] Agent "+str(name)+" returned results.", sender="Agents")
# return a 200/valid
return (200, "")
else:
dispatcher.send("[!] Invalid counter value from "+str(sessionID), sender="Agents")
return (404, "")

View File

@ -168,10 +168,8 @@ class MainMenu(cmd.Cmd):
try:
if self.menu_state == "Agents":
self.do_agents("")
self.menu_state = "Main"
elif self.menu_state == "Listeners":
self.do_listeners("")
self.menu_state = "Main"
else:
# display the main title
messages.title(VERSION)
@ -217,17 +215,14 @@ class MainMenu(cmd.Cmd):
# exception used to signal jumping to "Main" menu
except NavMain as e:
self.menu_state = "Main"
continue
# exception used to signal jumping to "Agents" menu
except NavAgents as e:
self.menu_state = "Agents"
continue
# exception used to signal jumping to "Listeners" menu
except NavListeners as e:
self.menu_state = "Listeners"
continue
# print a nicely formatted help menu
@ -300,47 +295,58 @@ class MainMenu(cmd.Cmd):
def do_agents(self, line):
"Jump to the Agents menu."
a = AgentsMenu(self)
a.cmdloop()
try:
a = AgentsMenu(self)
a.cmdloop()
except Exception as e:
raise e
def do_listeners(self, line):
"Interact with active listeners."
l = ListenerMenu(self)
l.cmdloop()
try:
l = ListenerMenu(self)
l.cmdloop()
except Exception as e:
raise e
def do_usestager(self, line):
"Use an Empire stager."
parts = line.split(" ")
try:
parts = line.split(" ")
if parts[0] not in self.stagers.stagers:
print helpers.color("[!] Error: invalid stager module")
if parts[0] not in self.stagers.stagers:
print helpers.color("[!] Error: invalid stager module")
elif len(parts) == 1:
l = StagerMenu(self, parts[0])
l.cmdloop()
elif len(parts) == 2:
listener = parts[1]
if not self.listeners.is_listener_valid(listener):
print helpers.color("[!] Please enter a valid listener name or ID")
else:
self.stagers.set_stager_option('Listener', listener)
elif len(parts) == 1:
l = StagerMenu(self, parts[0])
l.cmdloop()
else:
print helpers.color("[!] Error in MainMenu's do_userstager()")
elif len(parts) == 2:
listener = parts[1]
if not self.listeners.is_listener_valid(listener):
print helpers.color("[!] Please enter a valid listener name or ID")
else:
self.stagers.set_stager_option('Listener', listener)
l = StagerMenu(self, parts[0])
l.cmdloop()
else:
print helpers.color("[!] Error in MainMenu's do_userstager()")
except Exception as e:
raise e
def do_usemodule(self, line):
"Use an Empire module."
if line not in self.modules.modules:
print helpers.color("[!] Error: invalid module")
else:
l = ModuleMenu(self, line)
l.cmdloop()
try:
l = ModuleMenu(self, line)
l.cmdloop()
except Exception as e:
raise e
def do_searchmodule(self, line):
"Search Empire module names/descriptions."
@ -1259,6 +1265,16 @@ class AgentMenu(cmd.Cmd):
raise NavMain()
def do_listeners(self, line):
"Jump to the listeners menu."
raise NavListeners()
def do_agents(self, line):
"Jump to the Agents menu."
raise NavAgents()
def do_help(self, *args):
"Displays the help menu or syntax for particular commands."
@ -1363,6 +1379,7 @@ class AgentMenu(cmd.Cmd):
msg = "Tasked agent to delay sleep/jitter " + str(delay) + "/" + str(jitter)
self.mainMenu.agents.save_agent_log(self.sessionID, msg)
def do_lostlimit(self, line):
"Task an agent to change the limit on lost agent detection"
@ -1843,16 +1860,6 @@ class AgentMenu(cmd.Cmd):
self.mainMenu.do_creds(line)
def do_listeners(self, line):
"Jump to the listeners menu."
raise NavListeners()
def do_agents(self, line):
"Jump to the Agents menu."
raise NavAgents()
def complete_psinject(self, text, line, begidx, endidx):
"Tab-complete psinject option values."