def do_execute(self,args): """ execute command on agents""" arg_parser = argparse.ArgumentParser(prog='execute',description="execute command's on agents") arg_parser.add_argument('-c', '--cmd',dest='cmd',metavar='"cmd"', help='execute command on bot') arg_parser.add_argument('-j', '--job',dest='jobs', action='store_true', help='running command as job') try: args=arg_parser.parse_args(shlex.split(args)) except: return if args.cmd and not args.jobs: for agent in self.settings['agents'].keys(): if self.settings['agents'][int(agent)]['tunel']: if not self.settings['agents'][int(agent)]['tunel'].jobs['Running']: if self.settings['agents'][agent]['tunel'].activated: color.display_messages('HOST::{}'.format(self.settings['agents'] [agent]['creds']['Host']), info=True, sublime=True) self.stdout.write(self.settings['agents'][agent]['tunel'].send_command(args.cmd)) else: color.display_messages('Status: Unable to process request,' ' agent:: [{}] is busy in Jobs'.format( self.settings['agents'][agent]['creds']['Host']),error=True) elif args.cmd and args.jobs: for agent in self.settings['agents'].keys(): if self.settings['agents'][int(agent)]['tunel'].activated: self.settings['agents'][int(agent)]['tunel'].job_start(args.cmd) else: arg_parser.print_help()
def info(self): print display_messages('System Informations:', sublime=True, info=True) print('Host :: {}'.format(self.settings['Host'])) print('PID :: {}'.format(self.session.pid)) print('timeout :: {}'.format(self.session.timeout)) print('Shell :: {}'.format(self.session.name)) kernelversion = self.send_command('uname -r') print('Kernel :: {}\n'.format(kernelversion.split()))
def interactive(self): signal.signal(signal.SIGINT, self.signal_handler) print display_messages('Remote Shell:', sublime=True, info=True) self.session.PROMPT_SET_SH = "PS1='{}@{}\$ '".format( self.settings['Host'], self.settings['User']) self.session.auto_prompt_reset = False self.session.set_unique_prompt() self.session.interact() print display_messages('Session closed {}'.format(self.session.name), info=True)
def do_check(self,args): """ test all agents login ssh """ agentsCount = 0 self.settings['check'] = [] for agent in self.db.execute(C.selectAllBots): agent = list(agent) agent.insert(len(agent),self.sshConnect.ssh(agent[1],agent[2],agent[3],agent[4],checkconnect=True).status) self.settings['check'].append(agent) color.display_messages('Available Bots:', info=True, sublime=True) print tabulate(self.settings['check'], headers=C.headersCheck) for items in self.settings['check']: if search('ON',items[6]):agentsCount +=1 color.linefeed() color.display_messages('Online Agents: {}'.format(color.setcolor(str(agentsCount), color='blue')), info=True)
def job_start(self, cmd): self.thread_jobs = Thread_Jobs(cmd, self.session) self.thread_jobs.setDaemon(True) self.thread_jobs.start() self.jobs['Running'] = True self.jobs['Command'] = cmd display_messages('Started Job::{} from command:: {}'.format( self.settings['Host'], cmd), sucess=True) self.jobs['Packets'] = [ self.settings['Host'], self.jobs['Command'], str( datetime.fromtimestamp(int( time.time())).strftime("%Y-%m-%d %H:%M:%S")) ]
def do_agents(self,args): """ list all agents in interacting """ list_agents = [] # get all session activated if self.settings['agents'].keys() != {}: for agent in self.settings['agents'].keys(): if self.settings['agents'][agent]['tunel'] != None: if self.settings['agents'][agent]['tunel'].activated: list_agents.append([agent,self.settings['agents'][agent]['creds']['Host'], self.settings['agents'][agent]['creds']['Port'], self.settings['agents'][agent]['tunel'].session.name, self.settings['agents'][agent]['tunel'].session.pid]) if list_agents != []: color.display_messages('Session Agents:', info=True, sublime=True) print tabulate(list_agents,headers=C.headersAgents) color.linefeed() return color.display_messages('Online Agents: {}'.format(color.setcolor(str(len(list_agents)), color='blue')), info=True) color.display_messages('No agents in interacting', info=True)
def do_help(self,args): """ show this help """ names = self.get_names() cmds_doc = [] names.sort() pname = '' color.display_messages('Available Commands:', info=True, sublime=True) for name in names: if name[:3] == 'do_': pname = name cmd = name[3:] if getattr(self, name).__doc__: cmds_doc.append((cmd, getattr(self, name).__doc__)) else: cmds_doc.append((cmd, "")) #self.stdout.write('%s\n'%str(self.doc_header)) self.stdout.write(' {} {}\n'.format('Commands', 'Description')) self.stdout.write(' {} {}\n'.format('--------', '-----------')) for command,doc in cmds_doc: self.stdout.write(' {:<10} {}\n'.format(command, doc)) color.linefeed()
def do_jobs(self,args): """ list/kill jobs running on agents """ arg_parser = argparse.ArgumentParser(prog='jobs',description='list/kill jobs running on agents') arg_parser.add_argument('-i', '--id', dest='id',type=int,metavar='<id>', help='kill agent by id') arg_parser.add_argument('-k', '--kill',dest='kill', action='store_true', help='kill jobs by id/all') arg_parser.add_argument('-l', '--list',dest='list', action='store_true', help='list all jobs') try: args=arg_parser.parse_args(shlex.split(args)) except: return self.settings['all'] = {} jobs = [] for agent in self.db.execute(C.selectAllBots):self.settings['all'][agent[0]] = agent if self.settings['all'] == {}: return color.display_messages('No Agents registered', info=True) if args.list: for agent in self.settings['agents'].keys(): if self.settings['agents'][int(agent)]['tunel'] != None: if self.settings['agents'][int(agent)]['tunel'].jobs['Running']: color.display_messages('Jobs:', info=True, sublime=True) listjobs = self.settings['agents'][int(agent)]['tunel'].jobs['Packets'] listjobs.insert(0,int(agent)) jobs.append(listjobs) if jobs != []: print tabulate(jobs, headers=C.headersJobs) return color.display_messages('not command jobs activated', info=True) elif args.id and args.kill: if args.id in self.settings['agents'].keys(): if self.settings['agents'][args.id]['tunel'] != None: return self.settings['agents'][args.id]['tunel'].job_stop() color.display_messages('Job:: From Id {} not found'.format(args.id), info=True) elif args.kill: for agent in self.settings['agents'].keys(): if self.settings['agents'][int(agent)]['tunel'] != None: self.settings['agents'][int(agent)]['tunel'].job_stop() else: arg_parser.print_help()
def stop(self,host): display_messages('Jobs:{} Stoped Command:: {}' .format(host,self.command),error=True) self.session.close()
def do_update(self,args): """ find newer versions """ color.display_messages('checking updates...', info=True) color.display_messages(check_output(['git', 'pull']), info=True)
def do_list(self,args): """ list/check/filter list agents on database """ arg_parser = argparse.ArgumentParser(prog='list',description='interact with one/all agents') arg_parser.add_argument('-i', '--id', dest='id',type=int,metavar='<id>', help='list agent by id') arg_parser.add_argument('-c', '--check',dest='check', action='store_true', help='check credentials by agent Available') arg_parser.add_argument('-d', '--db',dest='database', action='store_true', help='list all agents on database') try: args=arg_parser.parse_args(shlex.split(args)) except: return self.settings['all'] = {} self.listbotsprint = [] for agent in self.db.execute(C.selectAllBots):self.settings['all'][agent[0]] = agent if self.settings['all'] == {}: return color.display_messages('No Agents registered',info=True) if args.database: if args.id and not args.check: if not args.id in self.settings['all'].keys(): return color.display_messages('ID not registered',info=True) color.display_messages('Agents:', info=True, sublime=True) agent = list(self.settings['all'][args.id]) self.listbotsprint += list([agent]) print tabulate(self.listbotsprint, headers=C.headersCheck) elif args.check and args.id: if not args.id in self.settings['all'].keys(): return color.display_messages('ID not registered', info=True) color.display_messages('Agents:', info=True, sublime=True) agent = list(self.settings['all'][args.id]) agent.insert(len(agent),self.sshConnect.ssh(agent[1],agent[2],agent[3],agent[4],checkconnect=True).status) self.listbotsprint += list([agent]) print tabulate(self.listbotsprint, headers=C.headersCheck) elif args.database and not args.check: color.display_messages('Agents:', info=True, sublime=True) for bots in self.settings['all'].items():self.listbotsprint += list([bots[1]]) print tabulate(self.listbotsprint, headers=C.headers) return color.linefeed() elif args.database and not args.id: color.display_messages('Agents:', info=True, sublime=True) for agent in self.settings['all'].items(): agent = list(agent[1]) agent.insert(len(agent),self.sshConnect.ssh(agent[1],agent[2],agent[3],agent[4],checkconnect=True).status) self.listbotsprint += list([agent]) print tabulate(self.listbotsprint, headers=C.headersCheck) color.linefeed() else: arg_parser.print_help()
def do_del(self,args): """ delete bot using <id>/all """ arg_parser = argparse.ArgumentParser(prog='del',description='delete an bot registered') arg_parser.add_argument('-i', '--id', dest='id',metavar='<id>',type=int, help='delete by ID bot') arg_parser.add_argument('-a', '--all',dest='all', action='store_true', help='delete all bot registered') try: args=arg_parser.parse_args(shlex.split(args)) except: return if args.id: self.search_all_agents() if not args.id in self.settings['all'].keys(): color.display_messages('ID not found', info=True) return items = self.settings['all'][args.id] color.display_messages('Found ID:', sublime=True, info=True) color.display_messages('Search query for finding a particular id', info=True) color.display_messages('Section DELETE FROM statement.', info=True) color.display_messages('ID:{} Host:{} Port:{} User:{} Password:{})'.format(items[0], items[1], items[2], items[3], items[4]), info=True) C.deleteID(self.con, self.db, args.id) if C.lengthDB(self.db) < 1: self.db.execute(C.zeraids) self.con.commit() elif args.all: self.db.execute(C.delete_all) self.db.execute(C.createTables) color.display_messages('All data has been removed.',info=True) self.con.commit() else: arg_parser.print_help()
def do_register(self,args): """ add bot on database """ arg_parser = argparse.ArgumentParser(prog='register',description='add bot on database clients') arg_parser.add_argument('--host', dest='host',metavar='<Host>', help='ipaddress/host/dns connect ssh') arg_parser.add_argument('--pass', dest='password',metavar='<Password> <filepath>', help='password/ssh key ssh client') arg_parser.add_argument('-u', '--user',dest='user', metavar='<user>', help='delete all bot registered') arg_parser.add_argument('-p', '--port', dest='port',metavar='<Port>',default='22', help='port connect ssh') arg_parser.add_argument('-f', '--file', dest='file',metavar='<filepath>', help='imports clients from a file') try: args=arg_parser.parse_args(shlex.split(args)) except: return if args.host and args.password and args.user: color.display_messages('Insert Data: SQL statement will insert a new row', info=True) C.DB_insert(self.con, self.db, args.host, args.port, args.user, args.password) color.display_messages('credentials ssh added with success', sucess=True) elif args.file: self.all_bot_checked = [] color.display_messages('searching for: {} ...'.format(path.realpath(args.file)),info=True) if path.exists(args.file): self.lines_all_read = [line.rstrip('\n') for line in open(path.realpath(args.file),'r')] for items in self.lines_all_read: if len(items.split()) == 4: self.all_bot_checked.append(items) if len(self.all_bot_checked) == 0: color.display_messages('Instruction for -f argumments:',info=True,sublime=True) print('You need to use the separator character [space] in this format below\n') print('-----cut here -------\n') print('root:~# cat example.txt\n') print('192.168.0.100 22 DemoBOT P@ssW0rd or ssh_key file') print('192.168.0.120 22 b1tifi botP@ssW0rd ssh_key file') print('\n-----cut here -------\n') print('') return None self.ListBot = [] color.display_messages('All agents imported from file:', info=True,sublime=True) for agent in self.all_bot_checked: self.ListBot += list([agent.split()]) print tabulate(self.ListBot, headers=C.headersimport) color.linefeed() choise = raw_input('{}[*]{} Do you want to import?(S/N):'.format(color.colors.GREEN,color.colors.ENDC,)) if choise.lower() == 's': color.display_messages('Importing agents...',info=True) for agent in self.all_bot_checked: C.DB_insert(self.con, self.db, agent.split()[0],agent.split()[1],agent.split()[2],agent.split()[3]) return color.display_messages('all agents ssh added with success', sucess=True) color.display_messages('import was been canceled.', error=True) else: color.display_messages('file: could not be found', error=True) else: arg_parser.print_help()
def do_interact(self,args): """ interact with one/all agents """ arg_parser = argparse.ArgumentParser(prog='interact',description='interact with one/all agents') arg_parser.add_argument('-i', '--id', dest='id',type=int,metavar='<id>', help='connect with particular agent SSH by id') arg_parser.add_argument('-a', '--all',dest='all', action='store_true', help='connect all agent Available') arg_parser.add_argument('-s', '--shell',dest='shell', action='store_true', help='connect Remote shell bin/bash') arg_parser.add_argument('-q', '--quit',dest='quit', action='store_true', help='quit all connections with agents') try: args=arg_parser.parse_args(shlex.split(args)) except: return if args.id and not args.quit: self.search_on_agents() if args.id in self.settings['agents'].keys(): if args.shell: return self.interactive_binbash(args.id) # call shell interactive /bin/bash # connect client ssh self.settings['agents'][args.id]['tunel'] = self.sshConnect.ssh( self.settings['agents'][args.id]['creds']['Host'], self.settings['agents'][args.id]['creds']['Port'], self.settings['agents'][args.id]['creds']['User'], self.settings['agents'][args.id]['creds']['Pass']) return color.display_messages('Agent added:: {}:{} status::[{}]'.format( self.settings['agents'][args.id]['creds']['Host'], self.settings['agents'][args.id]['creds']['Port'], color.setcolor('Ok', color='green')),info=True) color.display_messages('ID: could not be found', error=True) elif args.id and args.quit: # desconnect agents from ID if args.id in self.settings['agents'].keys(): if self.settings['agents'][args.id]['tunel'] != None: if self.settings['agents'][args.id]['tunel'].activated: color.display_messages('HOST::{}:{} broken::[{}]'.format( self.settings['agents'][args.id]['creds']['Host'], self.settings['agents'][args.id]['creds']['Port'], color.setcolor('OFF', color='red')), info=True) return self.settings['agents'][args.id]['tunel'].logout() color.display_messages('ID: could not be found', error=True) elif args.all: # connect all agents self.search_on_agents() if self.settings['agents'].keys() == []: return color.display_messages('No agents for kill sessions', error=True) for agent in self.settings['agents'].keys(): self.settings['agents'][agent]['tunel'] = self.sshConnect.ssh( self.settings['agents'][agent]['creds']['Host'], self.settings['agents'][agent]['creds']['Port'], self.settings['agents'][agent]['creds']['User'], self.settings['agents'][agent]['creds']['Pass']) color.display_messages('Agent:: {}:{} status::[{}]'.format( self.settings['agents'][agent]['creds']['Host'], self.settings['agents'][agent]['creds']['Port'], color.setcolor('Ok', color='green')),info=True) elif args.quit: # kill all connection activated listAgents = [] self.search_on_agents() if self.settings['agents'].keys() == []: return color.display_messages('No Agents registered', error=True) for agent in self.settings['agents'].keys(): if self.settings['agents'][int(agent)]['tunel'] != None: color.display_messages('HOST::{}:{} broken::[{}]'.format( self.settings['agents'][agent]['creds']['Host'], self.settings['agents'][agent]['creds']['Port'], color.setcolor('OFF', color='red')), info=True) self.settings['agents'][int(agent)]['tunel'].logout() listAgents.append(agent) if listAgents != []: return color.display_messages('Connection broken all agents', info=True) color.display_messages('No agents for kill session', error=True) else: arg_parser.print_help()
def stop(self, host): display_messages('Jobs:{} Stoped Command:: {}'.format( host, self.command), error=True) self.session.close()