0%

sliver简易入门

sliver简易入门

非零基础入门,只能说是记录一下我在用了这么久CS之后尝试sliver对比发现的一些差异点

结论为功能还是挺齐全的,就是文档写的不够详细。。。很多地方需要自己一条条命令help一点点找。。。

listener相关命令

按推荐使用顺序排列,支持的协议是mtls,wireguard,http(s)和dns
用对应的命令就能生成对应的listener,用起来都很简单,只有wireguard需要配三个端口,help看一下即可,但是我感觉这个也很不好用。。。

dns应该要配一下,没看,但是这个协议真的很不好用,建议别用

generate命令

生成马的命令,每个生成的马会内嵌一个随机的名字,可能会用作标识符吧?也可能被用作抓马的特征

生成的时候和CS不一样,需要自己手动指定协议以及IP端口,并且支持多协议+多主机,相较于CS指定listener变得麻烦了一点,但一定程度上在奇怪的代理环境和端口转发下,CS可能没法写出对应listener进而马就变得不好用,这种纯自定义ip port的生成又变得灵活了起来

不习惯用stager,所以默认都是上stageless,但是我感觉他完全没有做体积控制。。。马的大小都在15M以上,相较于C实在是有点夸张了,但同时得益于go的交叉编译,可以支持各种平台和架构。不过所有的马也都默认被defender爆杀了,归类直接就是sliver,想用还得自己套一下。一下子就不香了捏

默认情况下生成的马都是msf类型的session,也就是长tcp连接实时性交互的
有一个叫做template的选项,但是不知道这个选项有什么用。。。文档和help里都没找着

beacon子命令

generate的子选项,创建出来的马变为cs类型的beacon,定时回连,而非维持一个交互性的会话。sleep和jitter只能在编译时由-j, --reconnect/-J, --jitter确定,默认60/30s,help了一下目测没有运行时设置这两个值的命令
翻了下源码发现有一个reconfig指令能调整,help一下可以看到reconfig是配置一系列sleep reconnect timeout之类的时间设置,但是叫这个名字感觉从外面看感觉不会想到是这里配置。。。

文档里面并没有推荐应该使用session还是beacon,但支持beacon使用interactive命令拉起一个交互性的session,这样子的话用的时候起一个交互环境,不用的时候关掉继续心跳,感觉是一个很不错的设计

mtls

双向tls,就是一个双向加密的通信,是最推荐的通信协议,用起来也很简单,listener监听一个端口,implant回连一个端口。没有什么潜在的问题,session形式和beacon形式都有支持

generate beacon --mtls ip:port

http(s)

生成方式只有http,生成的马会先尝试https再尝试http,所以直接生成然后listener起一个https的就默认https通信了,生成和使用也很简单

wireguard

是一个我用的很无语的通信协议,结论为不怎么好用
官方文档里面居然没有教程。。。亏这个还是他推荐的通信方式。。。只能从port-forward那章得到一部分信息,然后在console内help到处找。。。

首先需要按照文档里apt install wireguard-tools速装一个wireguard
wg-config命令的作用是生成一个wireguard配置文件模板,然后把这个模板里的endpoint改一下用wg-quick快速启动一个wireguard服务

wireguard的listener需要三个端口,一个udp listener,一个key exchanger和一个virtual tun port,在使用wg启动listener的时候可以配置,如下(然后jobs命令居然没有describe之类的功能。。。有时候端口号是乱按的按完就忘了然后编译的时候还找不到只能翻历史命令。。。)

wg -l 5353 -x 10337 -n 55319

编译对应的马的时候使用如下的命令将各个端口进行对应

generate beacon --wg 3.3.3.3:5353 --key-exchange 10337 --tcp-comms 55319

并且有一个极大的缺点,这个玩意启动的时候居然会出现一个经典defender防火墙的是否允许应用通过网络。。。不允许的话就用不了。。。意思是只能在administrator级别的用户上使用。。。就算是本地管理员,上来这个弹窗我可受不住。。。
综合评级,一点也不好用。。。
好麻烦,感觉不如直接mtls。。。主要是不是很懂流量加密对于检测设备的效果,https也是加密流量捏,不过这种vpn性质的流量不知道是不是会更容易规避?或者是vpn性质的实现能让端口转发和socks5代理更稳定?(不过我已经习惯了gost猛代。。。马里面有没有这个功能也无所谓)

静态检测分析

因为静态直接就挂了,感觉一下子就变得不好用了。。。试了一下之前找的这个项目,对静态分析报毒的点进行检测
debug模式下生成的马,sliver的名字很明显
image-20230506104840204

去掉了debug进行生成也顶多是将一些方法名进行了混淆,结构体名还是会被作为特征,暂时不知道threadCheck是不是找到第一个特征就停了,测了几次静态特征都被标记在DNS这一块上,估计会有好几个特征

image-20230506110844962

静态特征还是挺明显的,感觉这种不是自己写的东西想批量改函数和符号名去特征也挺麻烦的。。。不过sliver的马部分的代码还是很好读的,基本上一个功能一个文件夹,之前就经常去里面抄代码哈哈

这段的结构体定义在sliver/protobuf/sliverpb/sliver.pb.go中,粗略翻了一下这里面是sliver所有命令参数和返回值的结构体,sliver的命令参数和返回结果都是用protobuf传递的,protobuf目录下的所有文件都是使用protoc-gen-go对应各命令的参数格式自动生成的,鉴定为很难修改

放一个简单定义

protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。数据二进制格式存储,可读性差

go-strip没法对sliver生成的马进行strip。。。会报一个panic: no pclntab located的错,感觉这个仓库也没人维护了,issue里面几个提这个问题的,但是没有答复。是因为现在go的版本高了导致的吗?

implant

马里面能用的命令和CS的大差不差,基本上实现对应的几个功能就差不多了,但是对socks5和端口转发之类的网络相关操作有更好的支持,CS就一socks4,真不好用,端口转发限制的也有点死,就不怎么灵活。

然后最经典的exec asm和reflective dll inject都应有尽有,扩展倒是很齐,不过好像没有power import,在powershell的支持上差了一点

shell命令和CS的差距有一点大,是直接开一个交互式shell(可能直接实现了完全交互?),所以启动的时候也会提示这是一个OPSEC bad的操作,不建议常用,但如果是提供完全交互式的shell,也能解决不少的问题

想实现CS的一次执行一条命令并回显,需要使用execute -o,不加-o就是正常的后台执行

CS内网穿透写法附录

针对网络以及代理方面写的不是很好的CS的附录环节
针对CS原生马,虽然我觉得一般情况下是用不上原生马了,也不一定,搞不好还是有很多人在写loader套皮上线

socks4代理

都2023年了CS的马自己起的socks还是4就算了,怎么支持的代理也还是4的。。。我就说上次gost怎么开个socks5跑不起来。。。

在CS生成马的地方选socks代理就可以了

端口转发

端口转发是比较尬的一个点,因为CS生成马必须选定对应的listener,端口转发的话监听的主机肯定和teamserver不在一起的,由beacon提供的pivot只支持reverse tcp,很不好用,不如gost之类的搭转发

这个时候需要找一个目标机和teamserver都空的端口,然后新建的listener上把host改为127.0.0.1之类的地址,用这个listener生成木马,然后将目标机端口转发到teamserver上端口,不建议使用stager以防遇到奇怪的bug