网站vps,关于网站建设的合同范本,微信分销app,友链交换网站源码红队专题 招募六边形战士队员重构后 Beacon 适配的功能windows平台linux和mac平台C2profile 重构思路跨平台功能免杀代码部分sysinfo包packet包config.go命令的执行shell、run、executepowershell powerpick命令powershell-importexecute-assembly 堆内存加密字符集 招募六边形… 红队专题 招募六边形战士队员重构后 Beacon 适配的功能windows平台linux和mac平台C2profile 重构思路跨平台功能免杀代码部分sysinfo包packet包config.go命令的执行shell、run、executepowershell powerpick命令powershell-importexecute-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命令混淆、免杀bypassuacuac-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调用cmdrun调用执行的程序本身而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默认的是GBKlinux则是UTF-8。
go对字符串的处理默认是UTF-8但有时windows通信时服务端下发的命令中包含中文由于是GBK无法进行正常的处理。