Exemple #1
0
    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
Exemple #2
0
    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