ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Sliver Beacon 任务管理命令组深度解析:tasks / tasks fetch / tasks cancel 实战指南

Sliver Beacon 任务管理命令组深度解析:tasks / tasks fetch / tasks cancel 实战指南 Sliver Beacon 任务管理命令组深度解析tasks / tasks fetch / tasks cancel 实战指南【免费下载链接】sliverAdversary Emulation Framework项目地址: https://gitcode.com/gh_mirrors/sl/sliver导读在 Sliver 中Beacon 模式下植入体implant采用间歇性回连的工作方式所有需要下发的指令先被服务器封装为beacon task任务排队等待植入体下一次回连时领取并执行。本指南以 client/command/tasks/README.md 为核心完整讲解tasks命令组的三个子命令列表、抓取详情、取消任务的用法、参数与过滤规则并深入源码揭示其背后的 RPC 调用链、数据模型与任务生命周期。读完本文你将能在 Sliver 控制台熟练地查看 Beacon 任务历史、按类型过滤、拉取并解读任务执行结果以及取消尚未下发的排队任务。tasks 命令组在 Sliver 客户端中的定位tasks是 Sliver 客户端控制台sliver client中针对Beacon会话的命令组位于SliverCoreHelpGroup分组并且通过Annotations: flags.RestrictTargets(consts.BeaconCmdsFilter)限制为仅在当前目标为 Beacon 时才可用参见 commands.go。与 Session 的实时交互模式不同Beacon 的任务机制是异步的操作者在控制台对 Beacon 执行任意命令如ps、ls、screenshot该命令并不会立即送达植入体命令被编码为一个 BeaconTask写入服务器数据库状态为pending植入体按设定的回连间隔jitter 间隔向 C2 拉取任务植入体取走任务后状态变为sent执行完成后上报结果状态变为completed操作者随时可以用tasks fetch拉回并查看任务的结果。因此tasks命令组就是操作者管理这条异步流水线的核心入口包含三个子命令子命令作用实现文件tasks列出当前 Beacon 的任务历史支持状态/类型过滤tasks.gotasks fetch拉取某个或一批任务的详情与执行结果fetch.gotasks cancel取消尚未下发到植入体的排队任务tasks-cancel.go三个子命令全部注册在 commands.go 中共享同一组辅助函数任务查找、格式化和补全——见 helpers.go。tasks列出任务历史不带任何子命令时tasks会调用 RPCGetBeaconTasks拉取当前活跃 Beacon 的全部任务并渲染成表格输出。支持的参数参数绑定逻辑位于 commands.go参数短参数默认值说明--timeout-tflags.DefaultTimeout秒gRPC 超时时间--overflow-Ofalse溢出终端宽度显示被截断的整行内容--skip-pages-S0跳过前 n 页配合分页表格使用--filter-f空按任务类型过滤大小写不敏感的前缀匹配输出字段与状态着色输出表格由 tasks.go 中的PrintBeaconTasks生成列为ID显示任务 UUID 的第一个段strings.Split(task.ID, -)[0]方便识别State任务状态未开始/未结束的时间戳会被渲染为空字符串Message Type任务类型描述去掉Req后缀后的消息类型名如Execute、ScreenshotCreated / Sent / Completed分别对应任务创建、下发、完成的时间RFC1123 格式。状态使用不同颜色渲染prettyState见 tasks.go状态渲染样式pending加粗等待植入体领取sent加粗橙色已下发completed加粗绿色执行完成canceled加粗灰色已取消表格最终通过settings.PaginateTable(tw, skipPages, overflow, true, con)做分页输出配合-S/-O参数控制分页与换行。过滤示例--filter采用前缀匹配因此可以用任务描述Message Type的前几个字符快速缩小范围sliver (IMPLANT_NAME) tasks -f screenshot sliver (IMPLANT_NAME) tasks -f exec sliver (IMPLANT_NAME) tasks -f env-f exec会同时命中Execute、ExecuteAssembly、ExecuteShellcode、ExecuteChildren等所有以exec开头的任务类型注意过滤逻辑位于 tasks.go对task.Description做小写化前缀比较。tasks fetch拉取任务详情与执行结果tasks fetch用于下载任务内容artifact与植入体返回的输出是查看任务执行结果的核心命令。两种用法指定任务 IDtasks fetch beacon task ID直接拉取指定任务不指定 ID此时若任务多于 1 个会进入交互式选择helpers.go 中的SelectBeaconTask渲染一个可选的表格若只有一个任务则直接使用它。交互式选择界面由forms.Select实现选项列表包含短 ID、任务描述和状态选中后自动继续。过滤与按类型拉取tasks fetch也支持--filter参数fetch.go与tasks列表命令一致按任务类型前缀过滤后再进入选择流程sliver (IMPLANT_NAME) tasks fetch -f executeID 过滤使用前缀匹配strings.HasPrefix(task.ID, strings.ToLower(taskID))因此只需输入短 IDUUID 第一段即可精确定位。任务详情面板获取到任务后客户端通过GetBeaconTaskContentRPC 拉取完整的任务内容并由PrintTaskfetch.go渲染详情面板Beacon Task ID完整 UUIDState带 emoji 状态图标✅ 完成 / ⏳ 等待 / ❌ 失败 / 已取消Description任务类型描述Created / Sent / Completed时间未发生则省略该行Request Size / Response Size请求/响应字节数以二进制单位展示如1.0 KiB对于已完成任务tasks fetch还会继续解码并渲染响应内容。按消息类型解码响应这是tasks fetch最强大的部分renderTaskResponsefetch.go会根据任务请求信封sliverpb.Envelope的类型字段reqEnvelope.Type选择对应的解码器与渲染函数覆盖了 Beacon 模式下几乎所有命令类型环境变量EnvInfo、SetEnv、UnsetEnvMsgEnvReq/MsgSetEnvReq/MsgUnsetEnvReq代码执行ExecuteAssembly含InvokeExecuteAssemblyReq、InvokeInProcExecuteAssemblyReq、ExecuteAssemblyReq三类请求统一走exec.HandleExecuteAssemblyResponse、Sideload、SpawnDll、Taskshellcode、Execute、ExecuteChildren、SSHCommand文件系统Pwd、Ls、Mkdir、Rm、Upload、Chmod、Chown、Chtimes、Memfiles系列以及Download下载结果会弹出交互选择Dump Contents 直接打印或 Save to File ... 保存网络Ifconfig、Netstat渲染时会结合 Beacon 的 PID 与 ActiveC2 信息权限GetPrivs、GetSystem、CurrentTokenOwner、Impersonate、MakeToken、RunAs进程ProcessDump、Ps按 Beacon 操作系统决定是否展示完整进程信息Windows 上默认不展示以避免触发 EDR、Terminate注册表RegistryCreateKey、RegistryDeleteKey、RegistryListValues、RegistrySubKeysList、RegistryRead、RegistryWrite截屏Screenshot解码后弹出保存对话框默认分支对未知消息类型输出Cannot render task response for msg type %v的警告。二进制结果进程转储、截屏、下载文件统一通过promptSaveToFilefetch.go保存若目标文件已存在会先询问是否覆盖写入时使用0o600权限。tasks cancel取消排队任务tasks cancel用于在任务尚未下发到植入体之前取消它——一旦任务已发送sent取消就没有实际意义了。用法tasks cancel beacon task ID直接取消指定任务tasks cancel不带 ID拉取所有pending任务若存在则进入交互式选择只有状态为pending的任务才会出现在候选列表中见 tasks-cancel.go。取消成功后控制台输出Task ID canceled。服务端行为只有 pending 状态可取消取消逻辑的约束在服务端 rpc-beacons.go 中实现CancelBeaconTaskRPC 会先按 ID 查询任务仅当任务状态为models.PENDING时才将其更新为models.CANCELED否则返回ErrInvalidBeaconTaskCancelState错误注释明确写道No real point to cancel the task if its already been sent。命令注册与补全机制Cobra 命令树Commands(con)commands.go返回一棵命令树tasks ├── fetch (cobra.RangeArgs(0, 1)) └── cancel (cobra.RangeArgs(0, 1))两个子命令都允许 01 个位置参数cobra.RangeArgs(0, 1)即任务 ID 是可选的。Long帮助文本通过help.GetHelpFor(...)从帮助文档加载。基于 carapace 的 Shell 补全命令注册时还挂载了 carapace 补全器helpers.goBeaconTaskIDCompleter为tasks fetch提供任务 ID 补全将任务按状态分组pending / completed / sent / canceled并以ID 描述的格式展示completed 和 sent 的任务还会附上完成/下发时间BeaconPendingTasksCompleter为tasks cancel只补全pending状态的任务。补全器通过con.Rpc.GetBeaconTasks实时拉取任务列表若当前没有活跃 Beacon 则返回提示no active beacon。这意味着在交互式终端中输入tasks fetch后按 Tab 即可看到当前 Beacon 的可选任务清单。服务端 RPC 链路与数据库三个子命令最终都会落到服务器rpc包的三个 RPC 方法rpc-beacons.go客户端调用服务端 RPC底层数据库操作con.Rpc.GetBeaconTasksGetBeaconTasks第 87 行db.BeaconByID校验 Beacon →db.BeaconTasksByBeaconID按 Beacon ID 取全部任务con.Rpc.GetBeaconTaskContentGetBeaconTaskContent第 100 行db.BeaconTaskByID按任务 ID 取完整内容含 Request/Response 原始字节con.Rpc.CancelBeaconTaskCancelBeaconTask第 109 行校验任务状态为 pending 后将state更新为CANCELED注意GetBeaconTasks返回的列表不包含Request/Response 原始内容用于表格展示只有GetBeaconTaskContent才会返回完整内容供tasks fetch解码渲染。这解释了为什么tasks fetch需要额外的一次 RPC 调用——列表接口只返回元数据内容接口才返回负载。BeaconTask 数据模型与任务生命周期数据模型任务的完整字段定义在 protobuf/clientpb/client.proto 的BeaconTask消息中message BeaconTask { string ID 1; // 任务 UUID string BeaconID 2; // 所属 Beacon 的 ID int64 CreatedAt 3; // 创建时间Unix 秒 string State 4; // 任务状态 int64 SentAt 5; // 下发时间 int64 CompletedAt 6; // 完成时间 bytes Request 7; // 请求载荷编码后的请求消息 bytes Response 8; // 响应载荷编码后的响应消息 string Description 9; // 任务类型描述如 ScreenshotReq }BeaconTasks消息则按 Beacon 聚合返回repeated BeaconTask Tasks第 112 行。生命周期状态从客户端渲染逻辑prettyState、emojiState与服务端实现models.PENDING/models.CANCELED可以归纳出任务完整的状态机pending任务已写入数据库等待植入体回连领取——这是唯一可以tasks cancel的状态sent植入体已领取SentAt被写入任务已离开服务器队列completed植入体执行完毕并回传结果CompletedAt被写入tasks fetch此时可解码出完整输出canceled被操作者主动取消failed执行失败emojiState中专门为failed渲染 ❌见 fetch.go。tasks表格中未发生的时间事件未 sent、未 completed会渲染为空字符串方便快速识别任务卡在哪个阶段。典型使用流程一个完整的 Beacon 任务管理闭环如下下发任务对 Beacon 执行任意命令如screenshot、ps、execute-assembly任务进入pending队列等待回连植入体按配置的间隔回连自动领取任务查看进度tasks观察任务状态从pending→sent→completed的迁移拉取结果tasks fetch 短ID查看执行输出对于截图/转储等二进制结果按提示保存到本地及时纠错若发现任务参数有误且尚未下发用tasks cancel 短ID取消无 ID 调用时交互式界面只会列出pending任务供选择。小结tasks命令组是 Sliver Beacon 异步任务模型的操作枢纽tasks负责状态监控与过滤tasks fetch负责结果回收与按消息类型智能解码tasks cancel负责在任务下发前及时止损。从 commands.go 的命令注册到 fetch.go 的响应渲染矩阵再到 rpc-beacons.go 的服务端状态校验整条链路清晰印证了 Sliver 在 Beacon 模式下服务器排队 → 植入体异步领取 → 结果回传的设计哲学。理解这一机制是高效驾驭 Sliver Beacon 会话、避免任务积压或误操作的基础。【免费下载链接】sliverAdversary Emulation Framework项目地址: https://gitcode.com/gh_mirrors/sl/sliver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表