红队专题-Cobalt strike 4.x - Beacon重构
红队专题
- 招募六边形战士队员
- 重构后 Beacon 适配的功能
- windows平台
- linux和mac平台
- C2profile
- 重构思路
- 跨平台
- 功能免杀
- 代码部分
- sysinfo包
- packet包
- config.go
- 命令的执行
- shell、run、execute
- powershell
- powerpick命令
- powershell-import
- execute-assembly
- 堆内存加密
- 字符集
招募六边形战士队员
一起学习 代码审计、安全开发、web攻防、逆向等。。。
私信联系
重构后 Beacon 适配的功能
不局限于cobalt strike 功能的跨平台后渗透免杀信标
没有beacon的特征,针对beacon特征的AV是检测不出来的;
windows平台
sleep、
shell、
upload、
download、
exit、cd、pwd、file_browse、ps、kill、getuid、mkdir、rm、cp、mv、run、execute、drives、powershell-import、powershell命令混淆、免杀bypassuac(uac-to。ken-duplication)、
免杀系统服务提权(svc-exe)、
execute-assembly(不落地执行c#)、
多种线程注入的方法(可自己更换源码)、
spawn、
inject、shinject、
dllinject(反射型dll注入)、管道的传输、
多种cs原生反射型dll注入(mimikatz、portscan、screenshot、keylogger等)、
令牌的窃取与还原、令牌的制作、权限的获取、runu父进程欺骗、代理发包、自删除、timestomp更改文件时间等功能。支持cna自定义插件的reflectiveDll、execute-assembly、powershell、powerpick、upload and execute等功能。
linux和mac平台
sleep、shell、upload、download、exit、cd、pwd、file_browse、ps、kill、getuid、mkdir、rm、cp、mv、自删除、timestomp
后续会添加linux与mac平台下后渗透功能
进程管理部分、文件管理部分支持图形化交互
C2profile
适配了C2profile流量侧的设置与部分主机侧的设置,支持的算法有base64、base64url、mask、netbios、netbiosu。
重构思路
传统cs的免杀偏向于如何加载上线
杀软对beacon的特征查得非常严,尤其是卡巴这种查内存的
入门cs的通信协议以及cs原生的beacon实现。
根据实战的需求来调试并实现beacon的各种功能。
考虑稳定性
体积的大小
跨平台
部分功能需要分平台实现
不同平台间同一个功能部分的实现又是相同的
抽出了一个service层来实现不同平台间功能重复的部分,进而减少代码的冗余。
功能免杀
很多地方原封不动照搬cs的原生实现并不是很好
对部分功能进行了实现的调整,同时针对cs不免杀的功能进行了替换
代码部分
main.go作为主函数
在beacon第一次与服务端通信之前执行隐藏窗口、反沙箱等操作。
成功建立了连接则每隔一段时间向服务端发送请求,
查看是否有需要下发的命令及数据,如果有的话则根据下发的命令号进行不同的处理。
sysinfo包
获取不同平台下目标主机的基本信息的功能,
拼装了beacon与服务器建立通信所需的meta数据。
windows平台下部分复杂的功能被拆分成execute_assembly.go、jobs.go、token.go等来单独实现。
services.go实现了对不同命令的跨平台处理。
packet包
实现了对命令的具体的处理操作以及通信等功能。
config.go
是配置文件,类似于C2profile
适配了大部分C2profile流量端与部分主机端配置的同时
还加入了代理发包、自删除、反沙箱等cs没有的设置。
命令的执行
shell、run、execute
区别在于shell调用cmd,run调用执行的程序本身,而execute无回显。
基于go的os/exec实现了跨平台的shell
golang的底层库并不是很稳定
os/exec库的cmd不支持Token的使用 无法实现令牌的窃取
将命令执行的实现更改为了windows api CreateProcess。
首先会判断当前是否有窃取/制作的Token,若有的话则用CreateProcessWithTokenW以Token权限来执行,没有的话则用CreateProcess执行。
shell和run在执行之后会用管道将结果回传,而execute不会。
Linux和Mac平台下目前用/bin/bash来执行shell。
powershell
shell powershell是从cmd调用powershell,
而powershell命令本身是以-nop -exec bypass -EncodedCommand参数来执行编码后的命令,
如whoami
powershell -nop -exec bypass -EncodedCommand dwBoAG8AYQBtAGkA
对powershell命令集成了混淆
由于360对powershell命令执行监控的过于严格,powershell命令执行暂时过不了360
将混淆后落地的ps1文件用powershell -ExecutionPolicy Bypass -File执行可过360
可以用shell powershell执行未混淆的powershell。
powerpick命令
可以在内存中不通过powershell.exe执行powershell来绕过监控,
不过在实现的时候发现powerpick可以执行成功但是部分情况拿不到回显
可以考虑使用execute-assembly执行来代替powerpick。
powershell-import
beacon中有一个导入powershell模块的功能,
将powershell后渗透利用框架导入到内存中方便后续的利用。
在目标主机上开一个端口放上module的内容,
在下次要执行powershell命令的时候download下载该端口的module内容
并用iex进行不落地的执行。
尽管是不落地的执行,但最好还是把powershell模块混淆下。
execute-assembly
execute-assembly是在内存中执行C#程序,用不落地执行来绕过杀软的查杀,在实战中很常用。
服务端下发的主体内容为patch过的用于开环境的反射型dll、.NET程序、执行的参数
1、用CreateProcess拉起来一个rundll32.exe(默认)进程
2、服务端下发patch之后的反射型dll,
beacon将该反射型dll注入到1中的进程中并执行,该dll的作用是开.NET的环境。
3、beacon之后把.NET程序注到1的进程中并执行。
考虑到过于麻烦、某些杀软会查杀远程线程注入的操作、卡巴会内存查杀反射型dll、容易拿不到执行的回显,
用https://github.com/timwhitez/Doge-CLRLoad实现了go的原生execute-assembly。
堆内存加密
堆内存加密这个功能,即在sleep之前将内存中数据加密,sleep之后再解开,可以避免杀软对内存的扫描。
在sleep之前先将除主线程之外的线程挂起,之后遍历堆对堆内存进行加密。
sleep结束后解密并将线程恢复。
不过该功能较为不稳定,有时在进行堆遍历的时候会突然卡住或者直接退出,
并且考虑到后台可能会有keylogger或portscan这种的持久任务,将线程全部挂起有些不合适
go的time.Sleep函数在其他线程都挂起之后调用会一直沉睡,而调用windows.SleepEx就不会有问题
字符集
CobaltStrike在服务端与Beacon通信的时候协商了字符集类型,如windows默认的是GBK,linux则是UTF-8。
go对字符串的处理默认是UTF-8,但有时windows通信时服务端下发的命令中包含中文,由于是GBK无法进行正常的处理。
相关文章:

红队专题-Cobalt strike 4.x - Beacon重构
红队专题 招募六边形战士队员重构后 Beacon 适配的功能windows平台linux和mac平台C2profile 重构思路跨平台功能免杀代码部分sysinfo包packet包config.go命令的执行shell、run、executepowershell powerpick命令powershell-importexecute-assembly 堆内存加密字符集 招募六边形…...

一文掌握 Go 文件的写入操作
前言 通过案例展示如何读取文件里的内容。本文接着上篇文章的内容,介绍文件的写入操作。 File.Write、File.WriteString、File.WriteAt File.Write(b []byte) (n int, err error) 直接操作磁盘往文件里写入数据,写入单位为字节。 b 参数:…...

小程序入门及案例展示
目录 一、小程序简介 1.1 为什么要使用小程序 1.2 小程序可以干什么 二、前期准备 2.1 申请账号 2.2 开发工具下载与安装 三、电商案例演示 四、入门案例 4.1 项目结构解析 4.2 基础操作及语法 4.3 模拟器 4.4 案例演示 4.4.1 新建页面 4.4.2 头部样式设置 4.4.…...

linux 安装python django pip 遇到的问题
Python解决SSL不可用问题 解决方案: 首先要明白python版本需要和openssl的版本需要相对匹配的,在Python3.7之后的版本,依赖的openssl,必须要是1.1或者1.0.2之后的版本,或者安装了2.6.4之后的libressl,linux…...

【问题解决】【爬虫】抓包工具charles与pycharm发送https请求冲突问题
问题: 开启charles抓包,运行pycharm发送https请求报以下错误 解决: 修改python代码,发送请求时添加verify false,此时charles也能抓取到pycharm发送的请求 2. 关闭charles抓包,取消勾选window proxy...

Hadoop3教程(二):HDFS的定义及概述
文章目录 (40)HDFS产生的背景和定义(41)HDFS的优缺点(42)HDFS组成架构(43)HDFS文件块大小(面试重点)参考文献 (40)HDFS产生的背景和定…...

【物联网+JAVA 】智慧工地源码
一、什么是智慧工地? 工地本身不拥有智慧,工地的运作是依赖于人的智慧。工地信息化技术,能够减少对人的依赖,使工地拥有智慧。 智慧工地,就是立足于“智慧城市”和“互联网”,采用云计算、大数据和物联网…...

001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试
001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试 文章目录 001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试1. 安装1.1 windows下安装openssl1.2 Linux下安装OpenSSL 2. VS中使用openssl3. 测试 1. 安装 1.1 win…...

关于小编入坑第512天
机缘 最初成为创作者的初心:总结记录整个学习前端的历程 日常学习过程中的记录: 先思考,整个程序逻辑流程是否出现问题 再文档,根据相关文档了解源头,学会看懂文档,是一个锻炼自学前端能力的关键一步 …...

VS2015编译Qt工程发生MSB4018错误完整解决过程
一、错误产生环境 操作系统:Windows10 开发工具:VS2015企业版 Qt版本:Qt5.7.1 64位 二、错误内容 MSB4018 “VCMessage”任务意外失败。 System.FormatException: 索引(从零开始)必须大于或等于零,且小于参数列表的大小。 …...

如何使用JMeter测试导入接口/导出接口
今天一上班,被开发问了一个问题:JMeter调试接口,文件导入接口怎么老是不通?还有导出文件接口,不知道文件导到哪里去了? 我一听,这不是JMeter做接口测试经常遇到的嘛,但是一时半会又…...

[入门一]C# webApi创建、与发布、部署、api调用
一.创建web api项目 1.1、项目创建 MVC架构的话,它会有view-model-control三层,在web api中它的前端和后端是分离的,所以只在项目中存在model-control两层 1.2、修改路由 打开App_Start文件夹下,WebApiConfig.cs ,修改路由&…...

关于Vue+webpack使用unocss编写CSS,打包后CSS没加前缀
关于Vuewebpack使用unocss编写CSS,打包后CSS没加前缀,封装了一个插件去解决了这个问题 unocss-postcss-webpack-plugin unocss在vite中使用配置,关于unocss在vite中使用,自行查阅官网 https://unocss.dev/integrations/vite ,vi…...

软件工程与计算总结(十一)人机交互设计
目录 编辑 一.引例 二.目标 三.人类因素 1.精神模型 2.差异性 四.计算机因素 1.可视化设计 2.常见界面类型 五.人机交互设计的交互性 1.导航 2.反馈 3.设计原则 六.设计过程 1.基本过程 2.界面原型化 一.引例 无论软件功能多么出色,亦或内部的构造…...

Jmeter组件执行顺序与作用域
一、Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用。配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同一个作用域的…...

第一天商城项目
复盘 1.maven高级部分聚合和继承 maven聚合工程(深度剖析)_一宿君的博客-CSDN博客 2.yml配置文件 mybatis mybatis: mapper-locations: classpath:mappers/*mapper.xml mapper-locations:这是一个子键,用于指定MyBatis映射文件(Mapper XML…...

C++笔记之通用多态函数包装器std::function
C笔记之通用多态函数包装器std::function code review! 文章目录 C笔记之通用多态函数包装器std::function1.存储自由函数,lambda,std::bind 调用的结果2.存储到成员的调用3.存储到函数对象四.基本语法五.使用std::function定义函数对象六.使用std::fu…...

Linux命令(92)之passwd
linux命令之passwd 1.passwd介绍 linux命令passwd是用来设置/更改用户密码 2.passwd用法 passwd [参数] username passwd常用参数 参数说明--stdin非交互式密码设置-l停止用户使用-u启用停止的用户-d删除密码 [rootcentos79-3 ~]# passwd ztj Changing password for user …...

光电柴微电网日前调度报告
摘要 微电网是目前国内外应用较为广泛的一种绿色可再生能源,近几年我国微电网产业的发展十分迅速。然后,越来越多的微电网系统建立并网,微电网产生的电能受外界因素影响较大,具有一定的随机性和波动性,给并网后的电力系…...

Godot 单元测试
前言 单元测试是我们常用的功能,Godot作为一个游戏,单元测试和热重载是我们常用的功能。这里我们讲解最简单的单元测试的情况。 Godot 配置 我们添加一个最简单的节点,挂载一个最简单的脚本。 添加测试方法(只能是静态方法&…...

2.9 深入GPU硬件架构及运行机制
五、GPU技术要点 1.SMID和SIMT SIMD(Single Instruction Multiple Data)是单指令多数据,在GPU的ALU(在Core内)单元内,一条指令可以处理多维向量(一般是4D)的数据。比如,…...

【苍穹外卖 | 项目日记】第四天
前言: 今天状态还可以,既有自己实战独立写接口,又听了课,学习了新的知识 目录 前言: 今日完结任务: 今日收获: 实现店铺状态接口 杂项知识点: 总结: 今日完结任务…...

零代码编程:用ChatGPT批量采集bookroo网页上的英文书目列表
bookroo网页上有很多不错的英文图书书目。比如这个关于儿童花样滑冰的书单: https://bookroo.com/explore/books/topics/ice-skating 怎么批量下载下来呢? 这个网页是动态网页,要爬取下来比较麻烦,可以先查看源代码,…...

7.定时器
定时器资源 CC2530有四个定时器TIM1~TIM4和休眠定时器 TIM1 定时器1 是一个独立的16 位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM 功能。定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O 引脚。定时器用于…...

计算机网络 | 网络层
计算机网络 | 网络层 计算机网络 | 网络层功能概述SDN(Software-Defined Networking)路由算法与路由协议IPv4IPv4 分组IPv4 分组的格式IPv4 数据报分片 参考视频:王道计算机考研 计算机网络 参考书:《2022年计算机网络考研复习指…...

21GA-ELM,遗传算法优化ELM预测,并和优化前后以及真实数值进行对比,确定结果,基于MATLAB平台,程序已经调通,可以直接运行,需要直接拍下。
GA-ELM,遗传算法优化ELM预测,并和优化前后以及真实数值进行对比,确定结果,基于MATLAB平台,程序已经调通,可以直接运行,需要直接拍下。 21matlab时间序列预测极限学习遗传优化算 (xiaohongshu.co…...

287_C++_TaskQueue管理任务队列和定时器(头文件.h)
#ifndef TASKQUEUE_H #define TASKQUEUE_H#include <sys/types.h> #include <stdlib.h> #include <pthread.h>...

Hadoop+Zookeeper+HA错题总结(一)
题目3: 下列哪项通常是hadoop集群运行时的最主要瓶颈?() [单选题] A、CPU B、网络 C、磁盘 IO D、内存 【参考答案】: C 【您的答案】: D 这道题的答案取决于集群的性能,一般来说运行时的主要瓶颈是网络。但是如果集群的磁盘IO性能较差&am…...

React高级特性之context
例1: createContext // 跨组件通信Context引入createContext import React, { createContext } from react// App传数据给组件C App -- A -- C// 1. 创建Context对象 const { Provider, Consumer } createContext()function SonA () {return (<div>我是…...

【OS】操作系统课程笔记 第五章 并发性——互斥、同步和通信
并发性:并发执行的各个进程之间,既有独立性,又有制约性; 独立性:各进程可独立地向前推进; 制约性:一个进程会受到其他进程的影响,这种影响关系可能有3种形式: 互斥&am…...