def create(ipaddress=None, sessionid=None, user_input=None): try: user_input = user_input.strip() if user_input.startswith('shell'): command = user_input[len('shell'):] if len(command) == 0: new_bufer = "\n{}\n".format( "Not support switch to Dos/Bash,input like\"shell whoami\" to run os cmd." ) result = Xcache.add_sessionio_cache(ipaddress, new_bufer) context = data_return(200, SessionIO_MSG.get(200), result) return context else: user_input = f"shell -c '{command}'" if user_input.startswith('exit'): params = [sessionid] result = RpcClient.call(Method.SessionMeterpreterSessionKill, params) context = data_return(203, SessionIO_MSG.get(203), result) return context params = [sessionid, user_input] result = RpcClient.call(Method.SessionMeterpreterWrite, params) if result is None: context = data_return(305, SessionIO_MSG.get(305), {}) elif result.get('result') == 'success': new_bufer = "{}{}\n".format(METERPRETER_PROMPT, user_input) result = Xcache.add_sessionio_cache(ipaddress, new_bufer) context = data_return(200, SessionIO_MSG.get(200), result) else: context = data_return(305, SessionIO_MSG.get(305), {}) except Exception as E: logger.error(E) context = data_return(306, SessionIO_MSG.get(306), {}) return context
def update(ipaddress=None, sessionid=None): old_result = Xcache.get_sessionio_cache(ipaddress) if sessionid is None or sessionid == -1: context = data_return(202, SessionIO_MSG.get(202), old_result) return context try: params = [sessionid] result = RpcClient.call(Method.SessionMeterpreterRead, params) if result is None or (isinstance(result, dict) is not True): context = data_return(303, SessionIO_MSG.get(303), old_result) return context new_bufer = result.get('data') result = Xcache.add_sessionio_cache(ipaddress, new_bufer) context = data_return(200, CODE_MSG.get(200), result) # code特殊处理 except Exception as E: logger.error(E) context = data_return(306, SessionIO_MSG.get(405), old_result) return context