首页/新闻资讯/正文详情

Sliver builders 命令深度解析:外部构建机(External Builder)元数据的管理与控制台展示

发布时间:2026/9/23 11:18:21 来源:云帆数科 栏目:资讯中心
Sliver builders 命令深度解析:外部构建机(External Builder)元数据的管理与控制台展示
网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载builders是 Sliver 客户端控制台中的一个命令组用于列出当前已注册到 Sliver 服务器上的所有外部构建机external builders。外部构建机允许 Sliver 服务器将植入体implant的编译任务卸载到外部机器上执行从而减轻服务器自身负载并实现多平台、多架构的并行构建。阅读本文后你将掌握builders命令的注册机制、RPC 数据链路、输出字段含义以及服务器端如何通过内存注册表维护这些构建机的生命周期。模块定位client/command/builders 包在 Sliver 客户端源码中builders命令组实现在 client/command/builders 目录下由两个 Go 文件构成职责划分非常清晰builders.go向服务器 RPC 发起请求获取外部构建机元数据并将结果格式化后渲染到控制台commands.go负责将builders命令注册到 Cobra 命令树中绑定标志flags与帮助文本。从包结构上可以推断Sliver 客户端采用了命令注册与命令执行分离的模块化设计每个命令组目录下通常都有commands.go定义命令、标志和帮助与若干业务文件承载具体执行逻辑builders包正是这一模式的典型范例。命令注册Cobra 命令树中的 builderscommands.go 中的Commands函数返回一个*cobra.Command切片定义了builders命令的完整形态func Commands(con *console.SliverClient) []*cobra.Command { buildersCmd : cobra.Command{ Use: consts.BuildersStr, Short: List external builders, Long: help.GetHelpFor([]string{consts.BuildersStr}), Run: func(cmd *cobra.Command, args []string) { BuildersCmd(cmd, con, args) }, GroupID: consts.PayloadsHelpGroup, } flags.Bind(builders, false, buildersCmd, func(f *pflag.FlagSet) { f.Int64P(timeout, t, flags.DefaultTimeout, grpc timeout in seconds) }) return []*cobra.Command{buildersCmd} }几个值得注意的实现细节命令名来源Use字段直接引用了常量consts.BuildersStr其值为builders定义于 client/constants/constants.go。整个客户端命令体系通过client/constants统一管理命令名字符串避免硬编码散落各处。命令分组GroupID: consts.PayloadsHelpGroup将该命令归入Payloads帮助分组与generate、profiles等命令并列便于用户在help输出中按主题定位。唯一标志该命令只暴露一个--timeout别名-t标志用于指定 gRPC 调用的超时秒数默认值来自flags.DefaultTimeout由 client/command/flags 统一管理。由于builders是只读的元数据查询命令因此不需要任何过滤或分页参数。命令的长帮助文本定义在 client/command/help/long-help.go明确说明了其用途Lists external builders currently registered with the server并指出外部构建机允许 Sliver 服务器将植入体构建任务卸载到外部机器上执行。执行逻辑一次 RPC 调用完成元数据拉取与展示当用户在 Sliver 控制台中输入builders时最终执行的是 builders.go 中的BuildersCmd函数func BuildersCmd(cmd *cobra.Command, con *console.SliverClient, args []string) { builders, err : con.Rpc.Builders(context.Background(), commonpb.Empty{}) if err ! nil { con.PrintErrorf(%s, err) return } if len(builders.Builders) 0 { con.PrintInfof(No external builders connected to server\n) } else { PrintBuilders(builders.Builders, con) } }整个执行链路清晰简洁通过客户端持有的 gRPC 连接con.Rpc调用Builders方法请求参数是空的commonpb.Empty——该命令不需要任何过滤条件若 RPC 返回错误直接以错误样式打印PrintErrorf若返回的构建机列表为空打印提示信息 No external builders connected to server否则调用PrintBuilders渲染表格输出。对应的服务器端 RPC 实现在 server/rpc/rpc-generate.gofunc (rpc *Server) Builders(ctx context.Context, _ *commonpb.Empty) (*clientpb.Builders, error) { return clientpb.Builders{Builders: core.AllBuilders()}, nil }可以看到服务端只是从核心内存注册表中取出当前全部构建机并返回没有任何磁盘或数据库操作——这印证了外部构建机的元数据是纯内存态、实时维护的。表格渲染五列信息揭示构建机全貌PrintBuildersbuilders.go使用go-pretty/v6表格库渲染输出表头包含五个字段列名含义数据来源Name构建机注册名称全局唯一builder.NameOperator注册该构建机的操作员身份builder.OperatorNameTemplates支持的植入体模板列表逗号分隔builder.TemplatesPlatform构建机自身的操作系统/架构builder.GOOS / builder.GOARCHCompiler Targets可编译的目标平台列表每个占一行builder.Targets其中两个字段的格式化逻辑值得展开Compiler Targets每个目标被格式化为fmt.Sprintf(%s:%s/%s, target.Format, target.GOOS, target.GOARCH)即输出格式:操作系统/架构的组合例如EXECUTABLE:windows/amd64或SHARED_LIB:linux/arm64。多个目标通过换行符\n连接在表格中纵向排列。Platform直接使用构建机自身的GOOS/GOARCH拼接展示。表格样式通过settings.GetTableStyle(con)获取会跟随用户在控制台中配置的终端主题保证输出风格与其他命令一致。数据结构protobuf 层的 Builder 定义客户端展示的所有字段都来自 protobuf 消息Builder其定义位于 protobuf/clientpb/client.protomessage Builders { repeated Builder Builders 1; } message Builder { string Name 1; string OperatorName 2; string GOOS 3; // The builders OS string GOARCH 4; // The builders Arch repeated string Templates 5; repeated CompilerTarget Targets 6; repeated CrossCompiler CrossCompilers 7; }该消息引用了两个子类型同样定义在 client.protomessage CompilerTarget { string GOOS 1; // The servers OS string GOARCH 2; // The servers Arch OutputFormat Format 3; } message CrossCompiler { string TargetGOOS 1; // The servers OS string TargetGOARCH 2; // The servers Arch string CCPath 3; string CXXPath 4; }注意CrossCompiler字段交叉编译器路径并未在客户端表格中展示但从源码结构看它在builder向服务器注册自身能力时会被携带属于构建机能力描述的一部分。此外同一 proto 文件还定义了ExternalGenerateReqclient.proto携带ImplantConfig、BuilderName、Name三个字段用于将植入体构建请求定向转发给指定名称的外部构建机——这就是builders查询结果与外部构建功能之间的衔接点。服务器端实现内存注册表与连接生命周期外部构建机的注册与注销由 server/core/builders.go 中的核心注册表统一管理var ( // ClientID - *clientpb.Builder builders sync.Map{} ErrDuplicateExternalBuilderName errors.New(builder name must be unique, this name is already in use) )该模块提供了四个线程安全的基本操作基于sync.MapAddBuilder以构建机名称为 key 执行LoadOrStore若名称已被占用则返回ErrDuplicateExternalBuilderNameGetBuilder按名称查询单个构建机AllBuilders遍历返回全部构建机切片buildersRPC 的数据源RemoveBuilder按名称删除。构建机注册的完整流程在 server/rpc/rpc-generate.go 的BuilderRegister流式 RPC 中实现关键步骤包括从 gRPC 上下文mTLS 证书中提取操作员身份写入OperatorName——这解释了控制台表格中Operator列的来源校验Name非空缺失则返回InvalidArgument错误调用core.AddBuilder注册名称冲突时返回ErrDuplicateExternalBuilderName对应的 gRPC 错误映射见 server/rpc/errors.go注册成功后订阅事件代理core.EventBroker仅向该构建机转发ExternalBuildEvent类型的构建任务事件rpc-generate.go通过defer确保流关闭stream.Context().Done()时自动注销构建机并退订事件。这种注册即订阅、断连即注销的设计意味着构建机列表是实时的任何构建机掉线后都会立刻从服务器注册表中移除builders命令查询到的永远是在线构建机集合。外部构建事件从查询到任务的闭环builders命令解决的是发现可用构建机问题而完整的外部构建闭环还依赖事件机制。构建任务被创建时服务器会为每个构建记录构建机/操作员绑定关系这由 server/core/externalbuilds.go 中的ExternalBuildAssignment结构体跟踪TrackExternalBuildAssignment/GetExternalBuildAssignment/RemoveExternalBuildAssignment对应单元测试见 server/core/externalbuilds_test.go。构建事件的处理逻辑位于 server/rpc/rpc-generate.go 与 server/builder/builder.go服务器通过ExternalBuildEvent事件将构建请求定向推送给目标构建机按targetBuilderName匹配见 rpc-generate.go外部构建机会回传ExternalBuildProgressEvent、ExternalBuildFailedEvent、ExternalBuildCompletedEvent等事件见 builder.go 中的事件分发逻辑构建完成或失败后服务器会清理对应的外部构建分配RemoveExternalBuildAssignment。由此形成完整的调用链外部构建机注册BuilderRegister→ 服务器内存注册表core/builders.go→ 客户端查询builders 命令→ 定向构建任务ExternalGenerateReq ExternalBuildEvent→ 构建结果回传。builders命令正是这条链路中唯一面向用户的构建机目录视图。实战速查场景操作查看所有在线外部构建机在 Sliver 控制台输入builders指定 gRPC 调用超时builders --timeout 30或-t 30在植入体生成时指定构建机generate命令配合--builder 名称对应 proto 中的BuilderName字段查看命令帮助help builders长帮助定义见 long-help.go使用前提builders命令的输出结果取决于服务器当前在线的外部构建机数量若没有任何外部构建机接入命令会提示 No external builders connected to server。外部构建机本身需要通过 Sliver 的 builder 二进制连接服务器完成注册注册后其元数据名称、操作员、模板、平台、编译目标才会出现在本命令的表格中。延伸阅读如需深入了解外部构建机制的完整实现建议按以下路径继续阅读仓库源码客户端命令执行与表格渲染client/command/builders/builders.go、client/command/builders/commands.goprotobuf 数据结构定义protobuf/clientpb/client.proto服务器端注册表server/core/builders.go外部构建分配跟踪与测试server/core/externalbuilds.go、server/core/externalbuilds_test.go注册与构建事件 RPCserver/rpc/rpc-generate.go、server/builder/builder.go命令常量与帮助文本client/constants/constants.go、client/command/help/long-help.go赞分享网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载相关推荐Hyperledger Fabric 外部构建器External Builders and Launchers原理与实战指南Hyperledger Fabric 外部构建器External Builders and Launchers原理与实战指南 本指南围绕 Hyperledg区块链密码学Authelia authelia-scripts suites external 命令详解外部测试套件的管理与执行Authelia authelia scripts suites external 命令详解外部测试套件的管理与执行 导读 authelia scripts后端认证鉴权单点登录身份认证应用安全Yi-1.5-6B-Chat模型深度解析从架构到性能的完整评测指南Yi 1.5 6B Chat模型深度解析从架构到性能的完整评测指南 Yi 1.5 6B Chat 是一款基于Llama架构优化的中文对话大语言模型专为中文用上一篇量子机器学习新工具TorchQuantum实现MNIST数据集分类完整案例下一篇5个功能让Zotero文献管理效率翻倍zotero-style插件深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Word分栏中插入通栏图片的四种方案与实操指南
Word分栏中插入通栏图片的四种方案与实操指南

做Word排版的人,十有八九被同一个问题卡过:辛辛苦苦把文档分成了两栏,文本流顺顺当当,结果要插一张信息图的时候,图片死死缩在其中一栏里,怎么拖都拖不满。两栏中间放通栏图片,这个需求听着很基… · 2026/9/23 11:18:21

王文渊项目实战:3个源码细节搞定学时管理最佳实践
王文渊项目实战:3个源码细节搞定学时管理最佳实践

王文渊项目实战:3个源码细节搞定学时管理最佳实践 学会语法却不知怎么搭项目?很多学员卡在“代码能跑,业务不懂”的坑里。今天拆解一个真实的教育培训管理模块,用王文渊项目源码里的 继续教育学时规定… · 2026/9/23 11:18:15

3个维度拆解刷信用卡的pos机性能优化与API变更实战
3个维度拆解刷信用卡的pos机性能优化与API变更实战

3个维度拆解刷信用卡的pos机性能优化与API变更实战 版本升级后 API 全变了,导致老代码直接崩盘,这是最近半年后台收到最多的吐槽。很多项目现场管理员发现,原本跑得飞起的交易脚本,换完新版本的 SDK 后,响应时间从 200ms… · 2026/9/23 11:18:15

Privazer:Windows深度隐私清理的底层原理与专业用法
Privazer:Windows深度隐私清理的底层原理与专业用法

1. Privazer不是“一键清空”,而是“精准擦除”的底层逻辑Privazer这个名字,第一次看到时我下意识以为是某个小众浏览器插件——毕竟市面上叫“XXazer”“XXer”结尾的工具,十有八九是轻量级前端小工具。但实际下载安装、打开界面后&#xff… · 2026/9/23 11:51:05

拒绝官方文档劝退:3步画清图书馆管理系统流程图,实战项目必备
拒绝官方文档劝退:3步画清图书馆管理系统流程图,实战项目必备

拒绝官方文档劝退:3步画清图书馆管理系统流程图,实战项目必备 别被那几百页的《软件工程标准》吓跑了,官方文档太长,新人根本抓不住重点。想把这个 实战项目 搞明白,别死磕理论,直接看流程图。… · 2026/9/23 11:51:05

告别只会背题:晶联讯实战项目拆解与高频面试题避坑指南
告别只会背题:晶联讯实战项目拆解与高频面试题避坑指南

告别只会背题:晶联讯实战项目拆解与高频面试题避坑指南 看了一堆教程还是不会写项目?别慌,这太正常了。很多兄弟都卡在“懂代码”和“能干活”之间的那道坎上。尤其是准备面试时,发现那些 高频面试题 看似简单,真让你手写一遍,逻辑全乱,连个完整的… · 2026/9/23 11:51:05

素数筛选全解析:从试除法到欧拉筛的工程实践
素数筛选全解析:从试除法到欧拉筛的工程实践

面试、竞赛、工程项目里,素数相关的问题几乎可以说是算法入门路上绕不开的一道坎。拿到“求素数”这个需求,最简单的想法是逐个判断,但数据范围一旦拉到百万甚至千万级别,复杂度就藏不住了。今天我结合自己实际上手优化过的经验&a… · 2026/9/23 11:51:05

Java Web教材征订系统:MVC分层+主题切换+Excel导出源码
Java Web教材征订系统:MVC分层+主题切换+Excel导出源码

简介:这是一套面向计算机专业本科生的Java课程设计实战项目,聚焦高校教材征订业务全流程管理,适用于软件工程实践、Java Web开发入门与MVC架构学习。资源包含完整可运行源码,共603个文件,涵盖101个JavaScript前端交互脚… · 2026/9/23 11:50:58

3个避坑点讲透煽情是什么意思,高频面试题不再丢分
3个避坑点讲透煽情是什么意思,高频面试题不再丢分

3个避坑点讲透煽情是什么意思,高频面试题不再丢分 看了一堆教程还是不会写项目?别急,这不是你的问题。 很多转岗的朋友,包括我自己当年,都卡在这一步。 书看了,视频听了,笔记也做了,真让你上手做个东西,脑子就一片空白。… · 2026/9/23 11:50:39

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码