0x00前言
一直忙于工作,没时间写blog,最近时间闲得无事就捣鼓起远控,其实说起远控都有比较久的历史了,不管是以前基于MSF框架,还是现在windows的GUI远控,比如大灰狼、gh0st、Cobaltstrike等等,通信方式都有各自特点,甚至完全不同,其根本还是通过建立受害者主机与控制端主机连接从而实现控制。
现在远控基本都分两大类,一种基于sessions会话的连接方式,另一种基于beacon心跳的连接方式进行控制保持。其中sessions的代表就是MSF,beacon心跳的形式最为经典的还是cobaltstrike,但是由于cobaltstrike属于商用版,正版使用昂贵,破解的还需要去查后门,暂不讨论,今天简单分析下开源的C2框架——sliver。
本文用于技术研究学习,不用做其他用途
0x01简介
sliver是基于Go语言写的跨平台开源远控框架,对比商用cobaltstrike,显得方便很多,cobaltstrike主要针对是windows。
其中sliver内置了动态编译,使得免杀能力会高于cobaltstrike,cobaltstrike依赖cna插件或者需要自写配置优化,当然这有很大部分也是跟cobaltstrike使用人数居多,其大量特征加入到了各大杀毒有关。
sliver最大的优势还是开源,可控,可个性化定制
其详细文档可移步到sliver官网,
0x02远控对比
本次将用sliver和cobaltstrike进行对比
| 特性 | Sliver | Cobalt Strike | 
| 语言 | Go | Java | 
| 跨平台 | Windows, Linux, macOS | 主要 Windows | 
| 开源 | 是 | 商用 | 
| 通信协议 | mTLS, WireGuard, HTTP(S), DNS | HTTP(S), DNS, SMB | 
| 免杀能力 | 较强(动态编译) | 依赖配置优化 | 
0x02项目结构
项目版本为1.5.43
整体架构主要分为三部分
client(客户端)
server(服务端)
implant(木马生成)
I. client客户端模块
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 
 | ├── assets   					# 加载客户端静态资源,如客户端配置│   ├── aliases.go
 │   ├── armories.go
 │   ├── assets.go
 │   ├── config.go
 │   ├── extensions.go
 │   └── settings.go
 ├── cli								# 运行到控制台的cli脚本
 │   ├── cli.go
 │   ├── config.go
 │   ├── import.go
 │   └── version.go
 ├── command						# 执行命令模块
 │   ├── alias					# 创建别名 类似快捷方式
 │   │   ├── alias.go
 │   │   ├── alias_test.go
 │   │   ├── install.go
 │   │   ├── load.go
 │   │   └── remove.go
 │   ├── armory
 │   │   ├── armory.go
 │   │   ├── armory_test.go
 │   │   ├── install.go
 │   │   ├── parsers.go
 │   │   ├── search.go
 │   │   └── update.go
 │   ├── backdoor				# 后门模块
 │   │   └── backdoor.go
 │   ├── beacons					# beacon心跳模块
 │   │   ├── beacons.go
 │   │   ├── helpers.go
 │   │   ├── prune.go
 │   │   ├── rm.go
 │   │   └── watch.go
 │   ├── builders				#
 │   │   └── builders.go
 │   ├── commands.go
 │   ├── completers
 │   │   └── completers.go
 │   ├── cursed
 │   │   ├── cursed-chrome.go
 │   │   ├── cursed-console.go
 │   │   ├── cursed-cookies.go
 │   │   ├── cursed-edge.go
 │   │   ├── cursed-electron.go
 │   │   ├── cursed-rm.go
 │   │   ├── cursed-screenshot.go
 │   │   └── cursed.go
 │   ├── dllhijack
 │   │   └── dllhijack.go
 │   ├── environment
 │   │   ├── get.go
 │   │   ├── set.go
 │   │   └── unset.go
 │   ├── exec
 │   │   ├── execute-assembly.go
 │   │   ├── execute-shellcode.go
 │   │   ├── execute.go
 │   │   ├── migrate.go
 │   │   ├── msf-inject.go
 │   │   ├── msf.go
 │   │   ├── psexec.go
 │   │   ├── sideload.go
 │   │   ├── spawndll.go
 │   │   └── ssh.go
 │   ├── extensions
 │   │   ├── extensions.go
 │   │   ├── extensions_test.go
 │   │   ├── install.go
 │   │   ├── list.go
 │   │   ├── load.go
 │   │   └── remove.go
 │   ├── filesystem
 │   │   ├── cat.go
 │   │   ├── cd.go
 │   │   ├── chmod.go
 │   │   ├── chown.go
 │   │   ├── chtimes.go
 │   │   ├── download.go
 │   │   ├── ls.go
 │   │   ├── memfiles-add.go
 │   │   ├── memfiles-list.go
 │   │   ├── memfiles-rm.go
 │   │   ├── mkdir.go
 │   │   ├── mv.go
 │   │   ├── pwd.go
 │   │   ├── rm.go
 │   │   └── upload.go
 │   ├── generate
 │   │   ├── canaries.go
 │   │   ├── generate-beacon.go
 │   │   ├── generate-info.go
 │   │   ├── generate-stager.go
 │   │   ├── generate.go
 │   │   ├── helpers.go
 │   │   ├── implants-rm.go
 │   │   ├── implants.go
 │   │   ├── profiles-generate.go
 │   │   ├── profiles-new.go
 │   │   ├── profiles-rm.go
 │   │   ├── profiles.go
 │   │   └── regenerate.go
 │   ├── help
 │   │   ├── help.go
 │   │   └── long-help.go
 │   ├── hosts
 │   │   ├── hosts-ioc-rm.go
 │   │   ├── hosts-ioc.go
 │   │   ├── hosts-rm.go
 │   │   └── hosts.go
 │   ├── info
 │   │   ├── info.go
 │   │   └── ping.go
 │   ├── jobs
 │   │   ├── dns.go
 │   │   ├── http.go
 │   │   ├── https.go
 │   │   ├── jobs.go
 │   │   ├── mtls.go
 │   │   ├── stage.go
 │   │   └── wg.go
 │   ├── kill
 │   │   └── kill.go
 │   ├── loot
 │   │   ├── add-credential.go
 │   │   ├── fetch.go
 │   │   ├── helpers.go
 │   │   ├── local.go
 │   │   ├── loot.go
 │   │   ├── remote.go
 │   │   ├── rename.go
 │   │   └── rm.go
 │   ├── monitor
 │   │   ├── start.go
 │   │   └── stop.go
 │   ├── network
 │   │   ├── ifconfig.go
 │   │   └── netstat.go
 │   ├── operators
 │   │   └── operators.go
 │   ├── pivots
 │   │   ├── details.go
 │   │   ├── graph.go
 │   │   ├── helpers.go
 │   │   ├── pivots.go
 │   │   ├── start.go
 │   │   └── stop.go
 │   ├── portfwd
 │   │   ├── portfwd-add.go
 │   │   ├── portfwd-rm.go
 │   │   └── portfwd.go
 │   ├── prelude-operator
 │   │   ├── connect.go
 │   │   └── operator.go
 │   ├── privilege
 │   │   ├── getprivs.go
 │   │   ├── getsystem.go
 │   │   ├── impersonate.go
 │   │   ├── make-token.go
 │   │   ├── rev2self.go
 │   │   └── runas.go
 │   ├── processes
 │   │   ├── procdump.go
 │   │   ├── ps.go
 │   │   ├── pstree.go
 │   │   └── terminate.go
 │   ├── reaction
 │   │   ├── helpers.go
 │   │   ├── reaction.go
 │   │   ├── reload.go
 │   │   ├── save.go
 │   │   ├── set.go
 │   │   └── unset.go
 │   ├── reconfig
 │   │   ├── reconfig.go
 │   │   └── rename.go
 │   ├── registry
 │   │   ├── reg-create.go
 │   │   ├── reg-delete.go
 │   │   ├── reg-list.go
 │   │   ├── reg-read.go
 │   │   └── reg-write.go
 │   ├── rportfwd
 │   │   ├── portfwd-add.go
 │   │   ├── portfwd-rm.go
 │   │   └── portfwd.go
 │   ├── screenshot
 │   │   └── screenshot.go
 │   ├── sessions
 │   │   ├── background.go
 │   │   ├── close.go
 │   │   ├── helpers.go
 │   │   ├── interactive.go
 │   │   ├── prune.go
 │   │   └── sessions.go
 │   ├── settings
 │   │   ├── beacons.go
 │   │   ├── opsec.go
 │   │   ├── settings.go
 │   │   └── tables.go
 │   ├── shell
 │   │   └── shell.go
 │   ├── shikata-ga-nai
 │   │   └── sgn.go
 │   ├── socks
 │   │   ├── socks-start.go
 │   │   ├── socks-stop.go
 │   │   └── socks.go
 │   ├── tasks
 │   │   ├── fetch.go
 │   │   ├── helpers.go
 │   │   ├── tasks-cancel.go
 │   │   └── tasks.go
 │   ├── update
 │   │   └── update.go
 │   ├── use
 │   │   ├── beacons.go
 │   │   ├── sessions.go
 │   │   └── use.go
 │   ├── websites
 │   │   ├── websites-add-content.go
 │   │   ├── websites-rm-content.go
 │   │   ├── websites-rm.go
 │   │   ├── websites-update-content.go
 │   │   └── websites.go
 │   └── wireguard
 │       ├── wg-config.go
 │       ├── wg-portfwd-add.go
 │       ├── wg-portfwd-rm.go
 │       ├── wg-portfwd.go
 │       ├── wg-socks-start.go
 │       ├── wg-socks-stop.go
 │       └── wg-socks.go
 ├── console
 │   └── console.go					# 启用控制台库管理
 ├── constants
 │   └── constants.go
 ├── core
 │   ├── bof.go
 │   ├── curses.go
 │   ├── portfwd.go
 │   ├── reactions.go
 │   ├── socks.go
 │   ├── tunnel.go
 │   ├── tunnel_io.go
 │   └── tunnels.go
 ├── licenses
 │   └── licenses.go
 ├── main.go
 ├── overlord
 │   └── overlord.go
 ├── prelude
 │   ├── bof.go
 │   ├── bridge.go
 │   ├── commands.go
 │   ├── config.go
 │   ├── execute-assembly.go
 │   ├── prelude.go
 │   └── util
 │       └── executors.go
 ├── spin
 │   └── spin.go
 ├── tcpproxy
 │   └── tcpproxy.go
 ├── transport
 │   └── mtls.go
 └── version
 ├── sliver-version.go
 └── updates.go
 
 | 
II. server客户端模块
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 
 | ├── assets										# 加载服务端静态资源,就是根据系统不同选择函数入口│   ├── assets-client.go
 │   ├── assets.go
 │   ├── assets_darwin_amd64.go
 │   ├── assets_darwin_arm64.go
 │   ├── assets_linux_amd64.go
 │   ├── assets_linux_arm64.go
 │   ├── assets_windows_amd64.go
 │   └── fs
 │       ├── adjectives.txt
 │       ├── darwin
 │       ├── empty.txt
 │       ├── english.txt
 │       ├── linux
 │       ├── nouns.txt
 │       ├── sliver.asc
 │       └── windows
 ├── builder
 │   └── builder.go
 ├── c2
 │   ├── c2_test.go
 │   ├── dns.go
 │   ├── dns_test.go
 │   ├── http.go
 │   ├── http_test.go
 │   ├── jobs.go
 │   ├── mtls.go
 │   ├── tcp-stager.go
 │   └── wireguard.go
 ├── certs
 │   ├── acme.go
 │   ├── ca.go
 │   ├── certs.go
 │   ├── certs_test.go
 │   ├── https.go
 │   ├── mtls.go
 │   ├── operators.go
 │   ├── subject.go
 │   ├── tlskeys.go
 │   └── wireguard.go
 ├── cli
 │   ├── builder.go
 │   ├── certs.go
 │   ├── cli.go
 │   ├── daemon.go
 │   ├── operator.go
 │   ├── unpack.go
 │   └── version.go
 ├── codenames
 │   └── codenames.go
 ├── configs
 │   ├── database.go
 │   ├── http-c2.go
 │   ├── http-c2_test.go
 │   └── server.go
 ├── console
 │   ├── console-admin.go
 │   ├── console-admin_test.go
 │   └── console.go
 ├── core
 │   ├── builders.go
 │   ├── clients.go
 │   ├── connnection.go
 │   ├── core.go
 │   ├── events.go
 │   ├── hosts.go
 │   ├── jobs.go
 │   ├── pivots.go
 │   ├── rtunnels
 │   │   └── rtunnels.go
 │   ├── sessions.go
 │   ├── socks.go
 │   └── tunnels.go
 ├── cryptography
 │   ├── cryptography.go
 │   ├── cryptography_test.go
 │   └── minisign
 │       ├── LICENSE
 │       ├── internal
 │       │   └── testdata
 │       │       ├── message.txt
 │       │       ├── message.txt.minisig
 │       │       ├── minisign.key
 │       │       ├── minisign.pub
 │       │       └── robtest.ps1.minisig
 │       ├── minisign.go
 │       ├── minisign_test.go
 │       ├── private.go
 │       ├── public.go
 │       ├── public_test.go
 │       ├── signature.go
 │       └── signature_test.go
 ├── daemon
 │   └── daemon.go
 ├── db
 │   ├── README.md
 │   ├── db.go
 │   ├── gosqlite
 │   │   ├── License
 │   │   ├── ddlmod.go
 │   │   ├── ddlmod_test.go
 │   │   ├── errors.go
 │   │   ├── migrator.go
 │   │   └── sqlite.go
 │   ├── helpers.go
 │   ├── logger.go
 │   ├── models
 │   │   ├── beacon.go
 │   │   ├── canary.go
 │   │   ├── certificates.go
 │   │   ├── host.go
 │   │   ├── implant.go
 │   │   ├── keyvalue.go
 │   │   ├── loot.go
 │   │   ├── operator.go
 │   │   ├── website.go
 │   │   └── wgkeys.go
 │   ├── sql.go
 │   ├── sql_cgo.go
 │   └── sql_go.go
 ├── generate
 │   ├── README.md
 │   ├── binaries.go
 │   ├── binaries_test.go
 │   ├── canaries.go
 │   ├── donut.go
 │   ├── external.go
 │   ├── implants.go
 │   ├── profiles.go
 │   ├── profiles_test.go
 │   ├── srdi-shellcode.go
 │   ├── srdi.go
 │   └── wgips.go
 ├── gogo
 │   ├── go.go
 │   └── go_test.go
 ├── handlers
 │   ├── README.md
 │   ├── beacons.go
 │   ├── data_cache.go
 │   ├── handlers.go
 │   ├── pivot.go
 │   ├── sessions.go
 │   └── tunnel_writer.go
 ├── log
 │   ├── audit.go
 │   └── log.go
 ├── loot
 │   ├── backend.go
 │   ├── loot.go
 │   └── loot_test.go
 ├── main.go
 ├── msf
 │   └── msf.go
 ├── netstack
 │   └── tun.go
 ├── rpc
 │   ├── errors.go
 │   ├── rpc-backdoor.go
 │   ├── rpc-beacons.go
 │   ├── rpc-env.go
 │   ├── rpc-events.go
 │   ├── rpc-execute.go
 │   ├── rpc-extensions.go
 │   ├── rpc-filesystem.go
 │   ├── rpc-generate.go
 │   ├── rpc-hijack.go
 │   ├── rpc-hosts.go
 │   ├── rpc-jobs.go
 │   ├── rpc-kill.go
 │   ├── rpc-loot.go
 │   ├── rpc-monitor.go
 │   ├── rpc-msf.go
 │   ├── rpc-net.go
 │   ├── rpc-operators.go
 │   ├── rpc-ping.go
 │   ├── rpc-pivots.go
 │   ├── rpc-portfwd.go
 │   ├── rpc-priv.go
 │   ├── rpc-process.go
 │   ├── rpc-reconfig.go
 │   ├── rpc-registry.go
 │   ├── rpc-rportfwd.go
 │   ├── rpc-screenshot.go
 │   ├── rpc-service.go
 │   ├── rpc-sessions.go
 │   ├── rpc-shell.go
 │   ├── rpc-shellcode.go
 │   ├── rpc-socks.go
 │   ├── rpc-stager.go
 │   ├── rpc-tasks.go
 │   ├── rpc-tunnel.go
 │   ├── rpc-website.go
 │   ├── rpc-wg.go
 │   └── rpc.go
 ├── sgn
 │   └── sgn.go
 ├── transport
 │   ├── local.go
 │   ├── middleware.go
 │   └── mtls.go
 ├── watchtower
 │   └── watchtower.go
 └── website
 ├── website.go
 └── website_test.go
 
 | 
III. implant木马生成模块
由于展开过长,简单标记下各个文件夹的作用
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 | ├── scripts├── sliver
 │   ├── constants				# 存放一些常量
 │   ├── cryptography		# 加密模块
 │   ├── encoders				# 编码模块,比如base家族等
 │   ├── evasion					# 免杀
 │   ├── extension				# 插件
 │   ├── forwarder
 │   ├── handlers
 │   ├── hostuuid
 │   ├── limits
 │   ├── locale
 │   ├── netstack
 │   ├── netstat
 │   ├── pivots
 │   ├── priv
 │   ├── procdump
 │   ├── proxy
 │   ├── ps
 │   ├── registry
 │   ├── rportfwd
 │   ├── screen
 │   ├── service
 │   ├── shell
 │   ├── spoof
 │   ├── syscalls
 │   ├── taskrunner
 │   ├── tcpproxy
 │   ├── transports
 │   ├── version
 │   └── winhttp
 └── vendor
 ├── filippo.io
 ├── github.com
 ├── golang.org
 ├── golang.zx2c4.com
 ├── google.golang.org
 ├── gopkg.in
 └── gvisor.dev
 
 | 
0x03通信方式
0x04功能拓展
