ARTICLE DETAIL

资讯详情

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

Sliver Armory 命令体系全解析:扩展与别名包管理器的安装、搜索与更新实战

Sliver Armory 命令体系全解析:扩展与别名包管理器的安装、搜索与更新实战 网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载Armory 是 Sliver 客户端控制台内置的包管理器用于Automatically download and install extensions/aliases自动下载并安装扩展与别名。它以armory命令组的形式实现覆盖索引拉取、签名校验、包缓存、依赖解析、安装/更新/搜索以及多 Armory 配置管理等完整工作流。读完本文你将掌握armory全部子命令的用法、armories.json配置结构、Minisign 签名验证机制以及背后的缓存与并发设计。Armory 是什么Sliver 的扩展分发中心在 Sliver 中Alias别名与Extension扩展是两类可复用能力Alias 通常指将外部工具如 mimikatz、Rubeus 等包装成 Sliver 命令的 manifest 包Extension 则是包含多个自定义命令的扩展包。Armory 解决的问题是从哪下载、如何校验、怎样安装——它从配置的 Armory 仓库拉取签名索引索引中列出可用的 aliases、extensions 与 bundles包组合再按需下载、验证并安装到本地。该功能位于 client/command/armory/README.md其核心职责由以下文件承担文件职责armory.go维护 Armory 缓存生命周期拉取包元数据、验证签名、展示包清单commands.go声明 Cobra 命令层级绑定共享 flag 与补全逻辑install.go解析依赖并从缓存元数据安装 alias/extension覆盖安装时提示用户manage.go查看、添加、验证、持久化 Armory 配置的管理逻辑parsers.go拉取 Armory 索引与包的解析器及 HTTP 工具含 Minisign 验证search.go基于正则表达式的包搜索命令update.go计算可用更新、呈现选项并编排更新安装命令族总览一个命令十三个动作所有子命令在 commands.go 中通过 Cobra 注册父命令armory的 Short 描述为 Automatically download and install extensions/aliases归属GenericHelpGroup。下表是完整命令矩阵命令作用必填参数armory读取索引并列出所有可用包与 bundle无armory install [name]安装一个 alias 或 extension0~1 个包名缺省进入交互选择armory update更新已安装的 aliases 与 extensions无armory search regex按正则表达式搜索包名恰好 1 个正则armory info [name]查看已配置 Armory 列表或某 Armory/包详情0~1 个名称armory add name添加一个新 Armory名称且--url/--pubkey必填armory rm name移除一个 Armory名称armory save将当前 Armory 配置持久化到磁盘无armory enable name启用某个 Armory名称armory disable name禁用某个 Armory名称armory modify name修改某个 Armory 的配置名称armory refresh强制刷新所有 Armory 索引无armory reset删除armories.json并重置配置无父命令共享的连接级 Flagarmory及其子命令通过flags.Bind(connection, ...)绑定了四个影响 HTTP 拉取行为的全局 flagcommands.goFlag简写默认值说明--insecure-Ifalse跳过 TLS 证书校验--proxy-p空指定代理 URL如http://localhost:8080支持本地代理补全--ignore-cache-cfalse忽略元数据缓存强制刷新--timeout-t15m下载超时时间Go duration 格式超时解析逻辑位于 armory.go 的parseArmoryHTTPConfig--timeout会被time.ParseDuration解析解析失败则回退到默认的defaultTimeout 15 * time.Minute--proxy会被解析为*url.URL注入 HTTP Transport。核心命令实战armory浏览可安装的包不带子命令直接执行armory时会依次触发索引拉取、包签名拉取并打印两张表格armory.goPackages 表列包括 Armory、Command Name、Version、TypeAlias/Extension、Help、URL终端宽度足够时显示。已安装的包名会被渲染为绿色。Bundles 表列包括 Armory Name、Name、Contains所含包名每 5 个换行。执行流程的关键一步是签名验证先并发拉取所有启用 Armory 的索引fetchIndexes再为每个索引中的包拉取.minisig签名fetchPackageSignatures只有签名合法、manifest 解析成功的包才会进入展示列表任何失败都会打印错误行而不中断整体流程。armory install安装与依赖解析安装是最核心的命令支持三种用法armory install # 无参数进入交互式多选表单 armory install name # 安装指定包或 bundle armory install all # 安装全部可用包需确认专属 flagcommands.goFlag简写默认值说明--force-ffalse强制安装覆盖已存在的同名包--armory-a空指定从哪个 Armory 安装缺省搜索全部安装逻辑install.go值得注意的细节覆盖确认不带--force时promptToOverwrite true若目标已安装则弹出覆盖确认带--force则静默覆盖。依赖解析扩展的每个ExtCommand可声明DependsOnresolveExtensionPackageDependencies 会递归解析依赖深度上限maxDepDepth 10并内置自依赖与循环依赖防护跳过已解析、已 pending 的包。同名冲突处理当多个 Armory 提供同名命令时getPackageForCommand会让用户从带完整描述类型、版本、Armory、RepoURL的列表中挑选并提供 Do not install this package 取消选项。bundle 安装若名字匹配 bundle则逐个解析其中每个包的安装清单去重、跳过已安装项后批量安装。安装后加载alias 安装完成后会立即调用alias.LoadAlias加载到植入端菜单extension 则通过extensions.InstallFromDir完成。底层安装installAliasPackage / installExtensionPackage是下载 → 验签 → 落盘三步根据 RepoURL 主机名选择解析器下载 tar.gz 与签名用包自身的public_key做 Minisign 验证minisign.Verify失败即中止通过后写入临时文件sliver-armory-*再交给 alias/extension 安装器。armory search正则搜索包armory search接收恰好一个正则表达式参数search.go先强制刷新包缓存然后regexp.Compile编译用户输入非法正则直接报错分别对缓存的 alias 命令名与 extension 的每个ExtCommand.CommandName做MatchString命中结果复用PrintArmoryPackages输出表格。armory search ^mimi # 匹配以 mimi 开头的包 armory search (get|set) # 匹配包含 get 或 set 的包armory update版本比对与批量升级更新流程update.go刷新缓存 → 对比已安装包与仓库最新版本 → 展示 Available Updates 表格Package Name / Package Type / Installed Version / Available Version→ 交互式多选 → 逐项安装新版本。版本比对逻辑值得关注由于支持多 Armory 且没有官方版本号规范checkForAliasUpdates 与 checkForExtensionUpdates 均采用版本字符串比较latestAlias.Version localManifest.Version要求包作者在发布时递增版本标识。扩展还额外做了 manifest 匹配PackageName相同或存在同名ExtCommand以及同名多版本去重。与install相同--armory/-a可将更新范围限定在单个 Armory。armory info查看配置与包详情不带参数时列出所有已配置 ArmoryArmory Name / Authorization Required / Enabled / URL。manage.go带参数时如armory info sliver-armory先强制刷新缓存再输出三类详情viewDetailedInformation匹配的ArmoryName、Public Key、Enabled、是否需要授权含当前 Authorization 值、Authorization Command、URL匹配的包Name、Command Name、Armory Name、类型alias/extension、Version、Author、Repo URL、Help扩展还会列出所含命令、依赖与各命令 Help匹配的扩展命令列出包含该命令名的扩展包完整信息。Armory 配置管理armories.json的增删改查配置文件结构所有 Armory 配置持久化在客户端根目录下的armories.json常量ArmoryConfigFileName armories.json见 client/assets/armories.go每个条目对应结构体ArmoryConfigarmories.go[ { public_key: RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3, repo_url: https://api.github.com/repos/BishopFox/sliver-armory/releases, authorization: , authorization_cmd: , name: Default, enabled: true } ]字段说明字段说明public_key用于验证该 Armory 索引签名的 Minisign 公钥同时也是内存缓存的键repo_url索引的仓库 URLhttps/http以外的 scheme 会被拒绝authorization静态授权凭据请求时作为AuthorizationHeader 发送authorization_cmd本地命令每次刷新时执行并用其输出作为授权凭据nameArmory 名称需唯一enabled是否启用禁用的 Armory 不会被拉取默认 Armory 的特殊处理常量DefaultArmoryName Defaultarmories.go。GetArmoriesConfig 在读取文件时会把 Default 强制排到列表末尾getCurrentArmoryConfiguration 则维护defaultArmoryRemoved标志避免用户主动删除 Default 后又被重新加回。authorization_cmd的凭据由RefreshArmoryAuthorization在每次拉取前刷新执行本地命令捕获 stdout失败则置空并记日志。管理命令一览armory add my-armory -u https://example.com/index -k PUBKEY # 添加并验证 armory add my-armory -u https://example.com/index -k PUBKEY -a Bearer xxx # 带授权 armory add my-armory -u ... -k ... -x /path/to/token.sh # 用本地命令动态授权 armory rm my-armory # 移除并清缓存 armory modify my-armory -n new-name -u https://new.url -k NEWPK # 修改 armory enable my-armory # 启用 armory disable my-armory # 禁用 armory save # 手动持久化 armory refresh # 清空缓存强制刷新 armory reset # 删除配置文件并重置各命令的关键行为均位于 manage.goaddAddArmoryCmd--url/--pubkey为必填MarkFlagRequired。添加前先调用verifyArmory实际拉取一次索引并验证签名验证失败则拒绝添加——确保只有签名可验证的 Armory 才会进入配置。默认Enabled: true--no-save/-e只做临时添加不落盘。其他 flag--auth/-a、--authcmd/-x。rmRemoveArmoryCmd同步清除该 Armory 的索引缓存、包缓存与currentArmories条目删除 Default 时置defaultArmoryRemoved true随后保存新配置。modifyModifyArmoryCmd支持--name/-n、--pubkey/-k、--url/-u、--auth/-a、--authcmd/-x、--no-save/-e。修改 pubkey 时校验唯一性公钥是缓存键修改后会删除旧缓存、重新验证新配置验证失败时弹出交互确认可选择回滚到旧配置。enable/disableChangeArmoryEnabledState禁用时清除该 Armory 的全部缓存随后强制刷新其余 Armory。refreshRefreshArmories设置IgnoreCache true、clearAllCaches()清空三个内存缓存并重置初始化标志全量重新拉取。resetResetArmoryConfig直接删除armories.json文件并触发一次强制刷新回到仅含 Default Armory 的初始状态。底层原理缓存、签名与解析器三级内存缓存与 2 分钟有效期armory.go 用三个sync.Map构成缓存体系缓存键存储内容indexCacheArmory 公钥indexCacheEntry索引、仓库 URL、拉取时间、错误pkgCache包 IDSHA-256 哈希pkgCacheEntry签名、alias/extension manifest、错误currentArmoriesArmory 公钥当前生效的ArmoryConfig缓存有效期cacheTime 2 * time.Minutearmory.gofetchIndex与fetchPackageSignature都会先检查缓存命中且未过期则直接复用过期则删除旧条目重新拉取。--ignore-cache可强制绕过。索引与包签名拉取均通过容量为 10 的 channel 做并发限流避免对 Armory 服务器造成压力fetchIndexes。包 ID 的生成是理解缓存一致性的关键calculatePackageHash 对RepoURL PublicKey ArmoryName CommandName做 SHA-256。由于多 Armory 场景下命令名不再唯一该 ID 用于跨缓存唯一定位包索引解析时还会调用makePackageCacheConsistent把已从索引中删除的包从缓存中清除。Minisign 签名验证链路所有索引与包都必须经过 Minisign 验证基于 util/minisign索引验证DefaultArmoryIndexParserparsers.go拉取 Armory URL 的 JSON其中包含 Base64 编码的armory_index与minisig解码后用配置的公钥执行minisign.Verify失败返回index has invalid signature。签名中的TrustedComment字段实际承载 Base64 编码的 manifest 数据。包验证DefaultArmoryPkgParserparsers.go拉取包 JSONminisigtar_gz_url解析签名后用包级公钥验证 tar.gz。安装时installAliasPackage/installExtensionPackage会再次对下载的 tar.gz 做minisign.Verify双重校验。签名内容fetchPackageSignaturearmory.go解码签名TrustedComment后按IsAlias分支解析为AliasManifest或ExtensionManifest。三类解析器的选择策略解析器按 RepoURL 主机名注册parsers.go主机名索引解析器包解析器api.github.comGithubAPIArmoryIndexParserGithubAPIArmoryPackageParsergithub.com默认解析器GithubArmoryPackageParser其他自托管DefaultArmoryIndexParserDefaultArmoryPkgParserGitHub API 解析器GithubAPIArmoryIndexParser从 release 列表中取最新 release下载名为armory.json与armory.minisig的资产包解析器则下载command_name.minisig与command_name.tar.gz资产。注意 GitHub API 未认证限额为 60 次/小时超出会返回 403客户端会提示you hit the github api rate limit (60 req/hr), try later。GithubArmoryPackageParser则绕开 API通过拦截/releases/latest的 302 重定向 Location 头解析最新 tag再从releases/download/tag/name.tar.gz直链下载。自托管 Armory 只需按{armory_index, minisig}与{minisig, tar_gz_url}的 JSON 结构提供接口即可。常见问题与排查思路you hit the github api rate limitGitHub API 未认证 60 次/小时稍后重试或为 Armory 配置authorization凭据提升限额。index has invalid signature / signature verification failedpublic_key与索引/包签名不匹配检查armories.json中的公钥是否完整、与仓库发布者一致。Package is already installed目标包已存在使用armory install name --force覆盖或先执行armory update。The package cache is out of datebundle 安装时缓存与索引不一致执行armory refresh后重试。想临时体验某个 Armory用armory add name --no-save添加验证通过即可使用不会污染配置文件。结语Armory 是 Sliver 生态中连接社区工具与本地控制台的关键枢纽它以 Minisign 签名保证供应链可信用 2 分钟缓存与 10 路并发限流平衡效率与负载通过依赖解析、同名冲突消解、多 Armory 配置与动态授权命令把装包这一简单动作背后的完整工程细节收敛成一条armory install命令。理解其缓存键设计SHA-256 包 ID、解析器按主机名分发的架构以及armories.json的字段语义能帮助你在自建 Armory、排查验签失败或定制包分发时做到心中有数。赞分享网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载相关推荐Oh My Fish 插件包实战如何搜索、安装与管理 shell 扩展包Oh My Fish 插件包实战如何搜索、安装与管理 shell 扩展包 Oh My Fish 是一个专为 Fish Shell 打造的 shell 扩展包管CLI包管理器Appium CLI 扩展管理命令完全指南driver 与 plugin 的安装、更新与维护Appium CLI 扩展管理命令完全指南driver 与 plugin 的安装、更新与维护 本指南系统讲解 Appium CLI 中 appium driv任务调度大数据后端前端OMO Native Bun 安装与自更新管理器的 QA 实录从 Bun 全局安装缺陷到包管理器感知的更新命令OMO Native Bun 安装与自更新管理器的 QA 实录从 Bun 全局安装缺陷到包管理器感知的更新命令 本篇文章基于 oh my openagent人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排上一篇snapDOM配置项全解析定制你的DOM截图体验下一篇GameDevMind用户认证OAuth2.0集成实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表