ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Sliver 网络侦察命令组实战:ifconfig 与 netstat 的架构、实现与使用详解

2026/9/24 3:02:26 拓冰建站 浏览量
Sliver 网络侦察命令组实战:ifconfig 与 netstat 的架构、实现与使用详解 网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载导读本篇技术指南以 Sliver 客户端client/command/network命令组为主线深入解析其两个核心网络侦察命令ifconfig与netstat的完整调用链路从客户端 Cobra 命令注册、参数解析到 gRPC 请求下发再到 implant 端 socket 采集与回传渲染。读完本文你将掌握这两个命令的每个命令行参数的作用与默认值、客户端与服务端的协议数据结构、输出渲染逻辑含异步 Beacon 回调并了解如何在实战中高效使用它们进行目标网络态势侦察。一、命令组概览Sliver 客户端的 Network 模块client/command/network目录是 Sliver 客户端控制台console中Network帮助分组的实现载体。根据 README.md 的说明该模块实现了network命令组将 Cobra 命令调用映射到 ifconfig、netstat 两类网络侦察工作流。目录下仅包含三个 Go 文件职责清晰文件职责commands.go注册网络侦察命令ifconfig、netstat及其全部命令行标志ifconfig.go向目标请求并打印网卡接口配置详情netstat.go展示目标远程 socket 连接列表输出风格类似系统netstat两个命令都被归入consts.NetworkHelpGroup值为Network定义见 client/constants/constants.go命令名常量IfconfigStr ifconfig与NetstatStr netstat也定义于同一文件constants.go。二、ifconfig枚举目标网络接口2.1 命令注册与参数ifconfig命令的 Short 描述为 View network interface configurations其参数绑定逻辑位于 commands.goifconfigCmd : cobra.Command{ Use: consts.IfconfigStr, Short: View network interface configurations, Long: help.GetHelpFor([]string{consts.IfconfigStr}), Run: func(cmd *cobra.Command, args []string) { IfconfigCmd(cmd, con, args) }, GroupID: consts.NetworkHelpGroup, } flags.Bind(, false, ifconfigCmd, func(f *pflag.FlagSet) { f.BoolP(all, A, false, show all network adapters (default only shows IPv4)) f.Int64P(timeout, t, flags.DefaultTimeout, grpc timeout in seconds) })该命令只暴露两个参数默认值均由定义处给出参数简写默认值说明--all-Afalse显示所有网卡适配器默认只展示 IPv4 相关条目--timeout-tflags.DefaultTimeoutgRPC 超时秒数2.2 客户端调用链同步会话与异步 Beacon 双路径执行IfconfigCmd时ifconfig.go客户端首先通过con.ActiveTarget.GetInteractive()获取当前选中的会话Session或 Beacon若两者皆为空则直接返回随后构造sliverpb.IfconfigReq请求并调用con.Rpc.Ifconfig通过 gRPC 下发ifconfig, err : con.Rpc.Ifconfig(context.Background(), sliverpb.IfconfigReq{ Request: con.ActiveTarget.Request(cmd), })响应处理包含两条路径这是 Sliver 客户端命令处理的通用模式同步会话直接调用PrintIfconfig渲染输出异步 Beacon若ifconfig.Response.Async为真则通过con.AddBeaconCallback(ifconfig.Response.TaskID, ...)注册回调待 Beacon 任务完成后用proto.Unmarshal(task.Response, ifconfig)解码响应并渲染同时先用con.PrintAsyncResponse打印异步任务信息。2.3 输出渲染逻辑表格、排序与过滤PrintIfconfigifconfig.go使用jedib0t/go-pretty/v6/table渲染表格每个网卡以独立表格呈现表头包含# / IP Addresses / MAC Address三列排序按Index网卡索引升序排列IPv4 高亮解析 IP 字符串中的/子网前缀长度strconv.Atoi当子网掩码在(0, 32]区间内且非回环地址时用console.StyleBoldGreen绿色粗体渲染本地 IP回环过滤isLoopback函数ifconfig.go以127前缀IPv4 回环与::1IPv6 回环为判定依据--all行为默认模式下仅显示含可高亮 IPv4 地址的网卡其他网卡计入hidden计数最后输出%d adapters not shown.提示加--all后则打印全部网卡的全部 IP含回环与 IPv6。2.4 服务端协议结构ifconfig请求/响应对应的 protobuf 消息定义在 protobuf/sliverpb/sliver.protomessage IfconfigReq { commonpb.Request Request 9; } message Ifconfig { repeated NetInterface NetInterfaces 1; commonpb.Response Response 9; } message NetInterface { int32 Index 1; string Name 2; string MAC 3; repeated string IPAddresses 4; }2.5 服务端实现implant 端网卡枚举implant 端的ifconfigHandler与ifconfig()实现在 implant/sliver/handlers/rpc-handlers.go通过 Go 标准库net.Interfaces()枚举网卡对每个接口取Index、Name、HardwareAddr.String()MAC并调用iface.Addrs()收集 CIDR 格式的 IP 地址如192.168.1.5/24填充进sliverpb.Ifconfig。这也解释了客户端为何要解析/子网前缀implant 上报的正是带前缀长度的 CIDR 地址。三、netstat查看目标连接状态3.1 命令注册与参数netstat命令的 Short 描述为 Print network connection information参数绑定位于 commands.goflags.Bind(, false, netstatCmd, func(f *pflag.FlagSet) { f.BoolP(tcp, T, true, display information about TCP sockets) f.BoolP(udp, u, false, display information about UDP sockets) f.BoolP(ip4, 4, true, display information about IPv4 sockets) f.BoolP(ip6, 6, false, display information about IPv6 sockets) f.BoolP(listen, l, false, display information about listening sockets) f.BoolP(numeric, n, false, display numeric addresses (disable hostname resolution)) f.Int64P(timeout, t, flags.DefaultTimeout, grpc timeout in seconds) })各参数默认值归纳如下注意与ifconfig的差异默认已开启 TCP、IPv4关闭 UDP、IPv6参数简写默认值说明--tcp-Ttrue显示 TCP socket 信息--udp-ufalse显示 UDP socket 信息--ip4-4true显示 IPv4 socket 信息--ip6-6false显示 IPv6 socket 信息--listen-lfalse仅显示监听状态LISTEN的 socket--numeric-nfalse以数字地址显示禁用主机名解析--timeout-tflags.DefaultTimeoutgRPC 超时秒数3.2 客户端调用链与 PID/ActiveC2 标注NetstatCmdnetstat.go读取全部标志后构造sliverpb.NetstatReq并调用con.Rpc.Netstat。值得注意的是两个辅助函数getPIDnetstat.go取当前 Session/Beacon 的 implant 进程 PIDgetActiveC2netstat.go取当前活动的 C2 通道标识session.ActiveC2或beacon.ActiveC2。这两个值在后续渲染中用于将 implant 自身进程的 socket 行绿色高亮帮助操作者快速识别哪个连接是 implant 的 C2 通道。与 ifconfig 相同Beacon 模式下同样走AddBeaconCallback异步回调路径。3.3 输出渲染五列表格与反向 DNSPrintNetstatnetstat.go输出表头为Protocol / Local Address / Foreign Address / State / PID/Program name的五列表格PID/Program name若entry.Process非空格式化为PID/可执行文件名反向 DNS 解析默认非--numeric下调用net.LookupAddr将 IP 解析为域名并拼上端口addr:port解析失败则回退为原始 IPimplant 自身高亮当entry.Process.Pid implantPID时整行用console.StyleGreen绿色渲染。3.4 服务端协议结构与 filter 语义NetstatReq、SockTabEntry、Netstat定义于 protobuf/sliverpb/sliver.protomessage NetstatReq { bool TCP 1; bool UDP 2; bool IP4 3; bool IP6 5; bool Listening 6; commonpb.Request Request 9; } message SockTabEntry { message SockAddr { string Ip 1; uint32 Port 2; } SockAddr LocalAddr 1; SockAddr RemoteAddr 2; string SkState 3; uint32 UID 4; commonpb.Process Process 5; string Protocol 6; } message Netstat { repeated SockTabEntry Entries 1; commonpb.Response Response 9; }每条连接记录SockTabEntry携带本地/远端地址端口、socket 状态SkState、UID、所属进程commonpb.Process与协议类型客户端正是利用这些字段完成表格渲染与 PID 高亮。3.5 implant 端实现按协议与地址族过滤采集implant 端netstatHandlerimplant/sliver/handlers/rpc-handlers.go根据NetstatReq的布尔字段决定采集策略其过滤逻辑与客户端默认值一一对应UDP 分支netstat.UDPSocksIPv4/netstat.UDP6SocksIPv6枚举 UDP socketTCP 分支构造netstat.AcceptFn过滤函数——Listeningtrue时只接受State netstat.Listen的监听 socket否则排除监听态、只保留已建立的连接State ! netstat.Listen地址族IP4/IP6分别决定调用TCPSocks/TCP6Socks或对应的 UDP 变体最终由buildEntriesrpc-handlers.go将[]netstat.SockTabEntry转换为[]*sliverpb.SockTabEntry回传。底层 socket 表枚举能力由 implant/sliver/netstat 包提供跨平台实现测试用例见 handlers_network_test.go。需要说明的是-l/--listen标志在客户端本地并不参与渲染决策而是作为请求字段下发给 implant 端的过滤条件这一点从 handler 的AcceptFn逻辑可以明确看到。四、实战使用示例以下示例均基于已在 Sliver 控制台sessions或beacons中选中活动目标的前提ActiveTarget为空时两个命令都会直接静默返回。1. 查看目标 IPv4 网卡信息默认行为sliver (IMPLANT_NAME) ifconfig输出为每个网卡独立表格本地 IPv4 以绿色粗体高亮末尾会提示被隐藏的适配器数量--------------------------------------- | # | IP Addresses | MAC Address | --------------------------------------- | 1 | 10.10.10.5/24 | aa:bb:cc:dd:ee:ff | --------------------------------------- 1 adapters not shown.2. 查看全部网卡含回环、IPv6sliver (IMPLANT_NAME) ifconfig --all3. 查看目标全部 IPv4 TCP 连接含监听态sliver (IMPLANT_NAME) netstatimplant 自身进程即当前 C2 通道所在进程的行会被绿色渲染便于在大量连接中快速定位 C2 链路。4. 仅查看监听中的 TCP 连接sliver (IMPLANT_NAME) netstat --listen5. 查看 TCP UDP禁用主机名解析纯数字地址sliver (IMPLANT_NAME) netstat --udp --numeric6. 仅查看 IPv6 socketsliver (IMPLANT_NAME) netstat --ip4false --ip67. 调整 gRPC 超时sliver (IMPLANT_NAME) ifconfig --timeout 30 sliver (IMPLANT_NAME) netstat --timeout 30五、小结从命令到数据的完整链路梳理整个调用链Sliver 的network命令组体现了典型的瘦客户端 胖 implant架构命令注册层commands.go 声明 Cobra 命令与标志默认值并将命令归入Network帮助分组客户端请求层ifconfig.go 与 netstat.go 构造 protobuf 请求、通过 gRPC 下发并统一处理同步 Session 与异步 Beacon 两种响应模式协议层sliver.proto 定义Ifconfig/IfconfigReq/NetInterface与Netstat/NetstatReq/SockTabEntry消息客户端标志如-l、-4、-6、-T、-u被编码进NetstatReq字段直接约束服务端采集行为implant 采集层rpc-handlers.go 通过net.Interfaces()与netstat包枚举网卡/socket按协议、地址族与监听态过滤后回传渲染层客户端对回传数据做排序、CIDR 解析、回环过滤、反向 DNS 解析与 PID 高亮最终以易读的表格呈现给操作者。掌握这套链路后你不仅能用好这两个命令还能理解 Sliver 命令扩展的通用模式——新增一个侦察能力本质上就是注册 Cobra 命令 定义 protobuf 消息 实现 implant handler 编写客户端渲染四个步骤的组合这正是扩展 Sliver 客户端功能时可复用的最小骨架。赞分享网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载相关推荐SerenityOS 网络配置指南ifconfig 命令详解与静态网络设置实战SerenityOS 网络配置指南ifconfig 命令详解与静态网络设置实战 ifconfig 是 SerenityOS 中用于显示和修改网络接口配置的核心操作系统内核驱动DiffSynth Studio释放扩散模型创造力的终极开源框架 DiffSynth Studio释放扩散模型创造力的终极开源框架 想要在个人电脑上运行最先进的AI图像和视频生成模型吗DiffSynth Studio人工智能大模型媒体生成深度学习预训练微调【免费下载】 VxWorks 6.9下的ifconfig网络配置命令详解VxWorks 6.9下的ifconfig网络配置命令详解 本文档详细介绍了在VxWorks 6.9操作系统下如何使用ifconfig命令进行网络配置。内容包文档/教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考