本文最后更新于 2024-09-18,文章内容可能已经过时。

Brute Ratel C4(BRC4)攻击框架安装与木马生成

image-20240914160016872

Brute Ratel C4简介

Brute Ratel C4是一款类似于Cobalt Strike的商业红队武器框架,每年License收费为2500美元,客户需要提供企业电子邮件地址并在颁发许可证之前进行验证,首个版本Brute Ratel C4 v0.2于2021年2月9日发布,它是由Mandiant和CrowdStrike的前红队队员Chetan Nayak创建的,该工具独特之处在于它专门设计防止端点检测和响应(EDR)和防病毒(AV)软件的检测,是一款新型的红队商业对抗性攻击模拟武器。

与Cobalt Strike的Beacon后门类似,Brute Ratel C4允许红队在远程终端主机上部署Badger后门程序,Badger连接回攻击者的命令和控制服务器,接收服务器端的命令执行相关的恶意行为。主要是用于windows系统的,和cs一样

简介:

Brute Ratel C4的作者在其网站上称其为当前市场中最先进的红队攻击模拟工具,最近几年Cobalt Strike已经成为了全球黑客组织或红队最受欢迎的攻击武器之一,被广泛应用到了各种APT攻击和勒索攻击等攻击活动当中,Brute Ratel C4相对比较新,出现的时间不长,在一些功能上也没有Cobalt Strike的强大,目前使用的黑客组织或红队相对比较少,不过通过上面的分析可以看出,有多个全球主流的勒索病毒黑客组织和高端成熟APT攻击组织都已经开始使用这款新型的后门武器,以逃避EDR和AV解决方案的检测,随着Brute Ratel C4越来越成熟,可以预测在未来几年Brute Ratel也将会成为全球各大黑客组织或红队必备工具之一,主要原因还是Brute Ratel C4独特的EDR和AV免杀功能,相信Brute Ratel C4的作者在也会不断优化自己的免杀技术,以逃避EDR和AV安全产品的检测,红队的兄弟们是不是都已经开始在研究这款新型的后门利用工具了,未来这款新型的攻击武器一定会越来越多的出现在各种真实的攻击事件以及攻防对抗演练当中,各大安全厂商都需要加强对这款后门的检测能力,同时作者也在不断的更新自己的免杀技术,以逃避EDR和AV产品的检测,攻与防就是这样,是一个对抗不断升级的过程。

官网:https://bruteratel.com/tabs/download/

https://0xdarkvortex.dev/

安装过程

该C2目前只有Linux和ARM版本,服务端与客户端均为二进制文件,UI因为QT的原因需要安装一些依赖库(高版本可能不需要这个过程)作者也给出了安装脚本:

sudo apt-get install libqt5webenginewidgets5 libqt5websockets5
## server dependenciessudo apt-get install nasm mingw-w64

下载BRC4,解压上传至kali

image-20240914162113733

cd到解压目录下,将整个目录赋予可执行权限

image-20240914162203567

cd到adhoc_scripts目录下,给install.sh和genssl.sh 赋予可执行权限

image-20240914162644146

执行./install.sh(保证kali联网,最好挂代理)

程序执行后会自动下载依赖包

image-20240914163016745

生成证书:中间的随便填

./genssl.sh

image-20240914173522217

执行完后将生成的key.pem 和cert.pem复制到工具的目录下

执行服务端
可以允许./brute-ratel-linx64 -ratel 命令查看支持哪些参数,感兴趣的可以根据自己需求添加参数运行

image-20240914173604875

cd回到根目录,将破解脚本文件的权限设置为可执行

image-20240914163402451

chmod +x lib64/commander   

执行破解,启动服务端:(用户名和密码:xiaoe和xiaoe@123和后面的端口号可自行定义

./brute-ratel-linx64_crack -ratel -a xiaoe -p xiaoe@123 -h 127.0.0.1:50000 -sc cert.pem -sk key.pem

image-20240914174648030

这样就生成了服务端,这里记得保存一下key,后续登录可以使用

启动客户端:(其他机器或者本机连接都行

image-20240914163924362

./commander-runme 

image-20240914164010895

image-20240914164114569

填写刚才设置的端口号和用户名及密码进行连接。点击图标进行连接

image-20240914164206918

使用并生成木马

C4 Profiler =》 Add HTTP Linstener

image-20240914164413057

image-20240914164439076

image-20240914165118622

URL(这里为了方便是随便填的,实际可以填写域名

image-20240914165216466

点击下方保存按钮,即可返回主页面

image-20240914165316962

这样就生成了监听的程序名称auto-201b3ea9

生成window的exe木马:

image-20240914165642299

右键监听=》Stageless =》Service Executable

image-20240914170334785

image-20240914170727821

稍微等待一会,

image-20240914171013520

cd到保存的目录下,python开启http服务

python3 -m http.server

image-20240914171144412

目标服务器或者主机下载木马后执行,等待BRC4回弹在Badgers可以看到上线

如果这里生成的是DLL类型木马需要这样执行:(222.dll是生成的木马名称)

image-20240914172716393

image-20240914171722643

image-20240914171820860

上线后点击load即可进入目标系统的控制台

image-20240914171858825

后续执行命令在Command输入框中输入对应指令即可

可以通过help查看可以输入的指令详情等。

image-20240914172010258

image-20240914172040355

这里也可以对域进行命令执行和信息搜集等操作。

image-20240914172059204

其余的功能

Operator

image-20240915091813858

此处相比cs的好处在于,cs貌似是自动加用户,只要你密码对,账号是什么都可以

这里可以选择的选项有三个,我都测了一遍

第一个加用户,后续有团队其他成员加进来可以一起操作,并且新加进来的用户这些选项依然存在,权限相等且为管理员(但是根据官方说法 管理员只能有一个,其他创建的都是操作员,应该有bug)

第二个选项为删除某一个用户

第三个选项是可以修改当前已有用户的密码

C4 Profiler

image-20240915091931443

1.Add Http Listener:

image-20240915092006180

第一个 监听器名称 随便取

第二个 监听绑定主机 也就是你的网卡上对应的所有ip都会在里面,可以自己选择

第三个 官方解释为重定向 可以自己设置 也可以点右边的same和上面一样 类似于cs

第四个 端口

第五个 UA头

第六个 header 举个例子

image-20240915092041005

第七个 postdata 根据我的理解来说 就是挂上后门之后是http连接 会发送一个post请求 这个框里可以填post中传递的data或者json等数据进行伪装 这里我们填一个json

image-20240915092057001

效果

image-20240915092116918

第八处 UrI(s) 根据官方说法 可以自行设置任何域名

第九处 OS 只有一个windows

第十处 SSL证书 默认为yes

第十一处 代理 我还没看到后面 估计可以在多层网络环境中 转发上线

下面的两个类似于cs的心跳频率

image-20240915092146429

最后下面 这个东西非常有意思 相比cs来说非常强

image-20240915092259526

Common Auth 就是当目标执行载荷后 会一直反弹shell 如果他们一直执行 将会一直反弹shell 就是和cs msf一样

One time Auth 就很有意思 选择这个之后可以自定义能反弹多少次shell 比如反弹或者目标执行10次后 该载荷就废弃 这样的话 你可以最多放到10台主机上反弹shell 不会被对方拿到载荷后一直执行

当你选择 One time Auth之后 下面这个选项右边默认是1次 并且你不开启下面的选项的话 只能设置一次(但是当你选择选项之后 调完次数 再把选项点掉 他还是你调好的次数 应该是个bug)

我们先来解释一下下面这个选项 他会创建不同的身份验证密钥 如果右边的选项为10 那么他会创建10个不同的密钥

image-20240915092248883

接下来我们看最后两个地方

image-20240915092352580

第一个框框就是你可以自定义一个唯一的身份验证密钥用于公共身份验证 只能用于 Common Auth 选项

最后一个选项 他的意思是如果你在目标机器上执行了有效载荷,反弹shell的时候可能是防火墙,也可能是什么原因导致没有反弹成功,服务端始终收不到shell的时候,他不会在内存里一直发起请求,而是在连接不上之后会挂掉

这是官方推荐的配置:

image-20240915092442331

保存之后选择 点击下面的设置 可以看到你的c2配置详情

image-20240915092511329

接下来根据这个生成payload

image-20240915092530126

image-20240915092544306

你也可以在监听器上生成

image-20240915092611112

2.Add DOH Listener:

参考官方教程

3.Hosted Files:

该选项用于文件托管的管理

打开这个选项的时候会报错,因为你还没有配置,设置的是443端口,首先我们先找到我们的监听器,根据自己实际情况来看,以下是操作步骤

随便拷一个html页面,随便放入一个文件夹,

然后存到了brc4根目录里,命名为index.html

然后找到我们的443端口的监听器 点击这里的 Host File

image-20240917180019906

image-20240917180033217

记住一定要是text/html不能是 text/plain 否则无法解析html

然后点击OK

接下来访问当前监听器的 ip+端口/文件名 如下图

image-20240917180050005

访问成功就行 然后你会在 Hosted Files 看到你所有设置的监听器网站目录下的文件 并可以选择删除

image-20240917180104624

这里起到一个混淆迷惑的作用

当然不仅如此,你还可以放入一些ps,zip等等文件,他可以起到一些文件传输的作用,这取决于你怎么使用他

image-20240917180118994

4.Change Root Page

更改根页面,该处选项可填入html代码,他会将你除了第三条你设置了那些节点以外的任何页面以外的所有页面,都会显示为你填入的html页面

以下为示例

image-20240917180321975

此处我们键入了一个html页面,点击ok,接下来我们访问任意一个节点

image-20240917180217289

再次访问自行设置的节点

image-20240917180207694

可以看到自行设置的节点不受影响,并且随机输入任何一个其他节点,访问的都是我们在该选项设置的页面

5.Autoruns

选择之后点击+号输入命令,这些命令将会在shell反弹成功之后自动执行

image-20240917180353897

可以看到下图 他自动执行了 sleep 2,并且会标识出来这是设置的自动执行命令,

image-20240917180407082

此处能自动执行的命令请参考下面

首先双击反弹shell的主机 双击红框

image-20240917180420444

然后在下面的 Command 中输入 help 会出现一系列命令 根据需求来

image-20240917180438941

6.Payload Profiler
此处能添加payload配置 修改payload配置 删除payload配置 ,然后根据你选择的不同配置文件,生成该监听器的后门,此处有DOH (DNS over HTTPS),HTTP/HTTPS,TCP,SMB 可以选择,详情还是请参考官方文档,其中http/doh 大部分和原先配置相同,要注意的是tcp和smb,并且它可以和下一个选项 PsExec Config 可以联动,这可以用于多级网络反弹shell搭建隧道,当前多级网络环境我电脑上没有,拿到了之后会试试看
image-20240917180510685

7.PsExec Config

Brc4的PsExec特性部分类似于Microsoft的PsExec特性。它在给定的远程系统上创建一个服务,并使用远程过程调用(remote Procedure Calls, RPC)启动它。但是,与Microsoft的PsExec使用CreateProcess在SMB上管道cmd.exe不同,BRc4的PsExec服务包含一个shellcode blob,用于在PsExec执行期间提供的有效负载配置文件,此有效负载可以是SMB、DOH、HTTP或TCP配置文件,并且不一定仅限于SMB。你可以自定义,也可以默认。

image-20240917180531730

可以在此输入服务名称及服务描述,之后点下图中第一个红框的位置可以看到,因为我没有修改,所以该处还是默认状态,当你修改后,它会变成你修改的样子。

image-20240917180543705

8.ClickScript

此处是设置的自动点击脚本,相比之前的自动运行脚本来说,那个在连接shell会自动执行,这个你可以根据需求设置,根据需求来运行,以下为操作步骤

image-20240915093146014

点击上面的+号创建一个脚本目录,随便取一个名称,这里我取了test这个名称

创建完成之后点击test这个目录,使其变成红色

然后再点下面的那个 窗户+ 如下在里面放入你想执行的命令之后点击OK 这样我们就存入了一个命令 你可以放置多条命令在test这个命令执行目录下 这里我们只存入一个命令

image-20240915093239244

点击save保存下来 接下来我们反弹一个shell 然后选此处 Load Clickscript

他会弹出来一个窗口加在后面

b-3 是你反弹回来的shell id值,下面选择刚刚生成的命令脚本,点击run(在最右边)

查看刚刚连接的shell,执行成功

Sever

1.View Active Socks

第一条这个用来查看所设置的代理,但是在我完完全全测一遍之后还没找到代理点,我只发现了设置http监听器的时候可以设置代理,但是跟这个不一样,后续找到了会更新这一条

2.Add Credentials

image-20240917180632811

添加凭证,用户名,密码,域,备注 ,你可以自行添加,也可以在brc4根目录下找到server_confs文件夹,该文件夹下有个creds.csv,这是官方提供默认的凭证,你可以将其导入进去,用于横向移动

image-20240917180643195

导入后 点击creds选项卡可以看到我们导入的凭证

image-20240917180659377

3.Save Credentials

将你当前设置的凭证保存下来,这里我存入名称为test.csv

image-20240917180713610

但是有个小问题,这里存储的即使我设置为csv,依然能看出来他就是个json,并且直接导入会导致客户端崩溃,开头说了,brc4核心点在于它的配置文件,他的配置文件就是以json写入的,这样理解其实就通了。

以下写了个python脚本将该导出的json转为csv格式,并可以继续导入进去而不会报错

import json
import csv
# creduser,credpass,creddomain,crednote

class json_to_csv():
    def __init__(self,file):
        self.json_Credentials = json.loads(open(file, 'r', encoding='utf-8').read())
        self.csv_Credentials = csv.writer(open(f"./{file.split('.')[0]}.csv", 'w' ,encoding='utf-8'),lineterminator='\n')
        print(self.json_Credentials)
        self.csv_Credentials.writerow(['creduser','credpass','creddomain','crednote'])
        self.json_length = len(self.json_Credentials)
        self.json_csv()

    def json_csv(self):
        for i in range(0, self.json_length):
            print(self.json_Credentials[f'{str(i)}'])
            self.csv_Credentials.writerow([f"{self.json_Credentials[f'{str(i)}']['user']}",f"{self.json_Credentials[f'{str(i)}']['passowrd']}",f"{self.json_Credentials[f'{str(i)}']['domain']}",f"{self.json_Credentials[f'{str(i)}']['note']}"])




json_to_csv('test.txt')


4.View Downloads

image-20240917180756082

你所有下载的东西在这都能看到

5.View Logs

日志记录 选择日志点击View即可查看 这个详细解释还是有点麻烦的,手测都看看理解更快

最后一个badger_token.conf 记录了反弹shell的监听器详情,目标主机的连接详情

image-20240917180822090

6.Enable/Disable DOH Debug Logs
操作员可以在Server->Enable/Disable DOH Debug Logs中启用它。一旦启用,在禁用之前,每次回调时,服务器都会显示shell签入。调试日志显示在级别服务器日志中。

大致意思就是doh的调试默认不存入日志,启用了就会存入日志,提供官方解释

The debug DOH logs help provide a bit more verbosity to the DOH logging functionality. Due to the way DNS is built, The RFC only allows sending up-to 64 bytes per subdomain per request. This means if the badger needs to send back a large response, it will send it in multiple chunks. Badger sends all output in encrypted format, which means unless the whole response is received from the badger, the server cannot decrypt it, and if it cannot decrypt it, it means it cannot identify which badger is sending the response. This means until the full response is received, the server cannot decrypt the data and Commander won’t show whether the badger checkin-in even if it is continuously sending in chunks of response. However, in order to tackle this, the ratel server comes pre-built with a debug log functionality. This is by-default disabled unless the operator enables it from Server->Enable/Disable DOH Debug Logs. Once enabled, the ratel server will show up the badger checking in everytime it calls back, until disabled. Debug logs show up in the ratel server logs.

image-20240917180903186

7.User Activity

看每个用户做了哪些操作并将操作次数,操作时间等数据记录下来,可以查看所有用户的操作并可以导出csv

image-20240917180915758

不得不说brc4对安全这方面严谨性还是很高的

8.MITRE Team Activity(闪退)

MITRE 地图提供了所有 Brute Ratel 命令的 MITRE 图形,与之不同的是,MITRE 团队活动只显示红队/先遣队模拟团队执行的命令的 MITRE 图形。这有助于缩小红队交战期间哪类命令最有效,并在报告时将其列出。

image-20240915093738646

9.MITRE Team ActivityBrute Ratel MITRE Map(闪退)

Brute Ratel 的所有 Badger 命令都可以在基于节点的 MITRE 图中查看,该图显示了各自的策略和技术。这可以从服务器配置 -> Brute Ratel MITRE Map 访问。

image-20240915093812572

Listeners Tab

上线之后的菜单:

上线后可以使用进程查看的模块(Process Manager)和文件查看(File Explorer)等功能

image-20240914172202562

Badgers

1.Load/Load Adjacent Tab/Load New Window

这三个选项就放一起了

第一个直接开启一个命令行对话框在下面

image-20240917181213048

第二个在右边开启了个小窗口

image-20240917181228788

第三个开启了个独立的窗口,可伸缩

image-20240917181244508

2.Clear Cmd-Q

监听器默认心跳返回为60,在60秒期间如果你输入了任何命令,他都会等这一个60秒结束才会执行,然后在等60秒返回结果。

这个选项的作用是用来消除你第一个60秒内输入的命令,就是还没执行的时候输入的命令

当你执行成功等下一个60秒返回响应结果的时候,在点此选项就没用了,因为你已经执行成功

可能我说起来有点绕,但还是很好理解的

3.Arsenal

这一块还挺多的,不过还是一次性说完吧

image-20240917181313216

1.LDAP sentinel

用于查询域控的信息,里面选项有很多

image-20240917181336739

他能自动查询到域控里所有的信息

在右边默认选项第一个选项就是全部信息

右边第二个选项点开之后可以筛选部分信息,右边的框是个查询过滤器

最下面那个点击之后 他所有的操作全是在默认域里查询

image-20240917181354268

选择域控输入命令查询

这里在交互界面也出现了

image-20240917181410433

这里举个例子

image-20240917181424320

他的意思是查询域控中 cn 相等于 Domain Admins 并且 在当前域下的信息

image-20240917181440095

2.Switch Profile

查看你当前监听器的配置,点击 Load from file… 也可以在加载一个配置上来,当你点击save之后,他会在当前页面重新加载一个shell,需要注意三点

第一,你点save加载上来的shell并不是在目标主机重新反弹了一次,而是多了一次显示而已

第二,它只支持http/s的shell

第三,当你点击save之后,他会显示一个新的shell,原先的shell将被抛弃,无法响应
image-20240917181502489

3.Process Manager

进程管理 你可以看到所有进程 上面的选项分别为 刷新列表,杀死进程,设置为父节点,窃取令牌,搜索进程pid

image-20240917181515514

4.File Explorer

就是文件目录显示出来,可以下载,删除,查看,但是我测的有bug,有时候有些目录进不去,不如命令行里直接看,直接命令行下载

5.Crypt Vortex

文件加密/解密,用于勒索,加密对方电脑上的文件,这里先放教程,在说一下我没测试成功的原因猜测

先看一下参数

image-20240917181537631

第一个为加密密钥

第二个为加密路径(此处需要注意,加密是递归的。所以如果你的路径包含多个文件夹,而这些文件夹又包含更多的文件夹,那么所有的文件夹都会一个接一个地递归加密。如果忘记密钥也不要紧,badger日志里包含加密密钥)

第三个为你加密文件之后的文件后缀名

第四个可以看到是为可选项,你可以选择一些文件,比如你想选择 .xlsx 和 .docx 那么你只需要用逗号隔开即可,例如(.xlsx,.docx)

点击OK即可加密完成
image-20240917181556737

接下来是解密部分

image-20240917181610286

其实都差不多,只要输入密钥,目录,加密之后的后缀名点击OK即可解密

image-20240917181626781

接下来讨论一下 为什么我在我这台win11家庭中文版上没有测试成功(后续会在虚拟机上重新测试win10专业版) 此处可以跳过直接翻到下一节

我在官方教程中看到他启用了 werfault.exe

image-20240917181646325

而我这边报错

image-20240917181657828

大概率可能是因为 werfault.exe 没有启动成功

werfault.exe是一个windows系统自带的程序。用于错误报告.

我参考以下文章尝试启动

Win11家庭版找不到gpedit.msc文件怎么办?

Win10系统无法启动werfault.exe的解决方法教学

快速解决Win10系统上的WerFault.exe错误(4个方案)_系统堂官网_系统堂官网")

但是进程里依然没有显示 werfault.exe

暂时不清楚哪地方出了问题,感兴趣的师傅可以测测看,我更多的是感觉这个东西应该是在 windows server上的

4.Clickscript

这个之前说了一次,还是在写一下吧

Clickscript是一个允许用户自动执行批量命令的功能。与允许用户在第一次连接时自动执行几个命令的“自动运行”功能不同,点击脚本基本上是多个命令的列表,可以在任何时间点链接在一起执行一个接一个的命令。

image-20240917181739602

5.Remove

删除这一条,当然只是删除没有退出的作用,反连之后依然会再次弹出来,一般都是当shell失效之后用这个把他删掉。

6.Export To CSV

导出为CSV 它可以将一个shell的连接详情导出来

image-20240917181801676

导出的结果

image-20240917181824107

7.Mark Dead

用于标记没有连接回来的shell

如下第一个没有连接回来,使用该项测试之后变色,第二个一直有连接, 所以即使选择了该选项,他依然保持高亮

image-20240917181838303

8.Color

这个确实没啥好说的 更改字体颜色 更改背景颜色 重置颜色 用于标记的

image-20240917181853934

9.Exit Thread

退出线程并且会自动变暗

image-20240917181909250

10. Exit Process

退出进程并且会自动变暗

image-20240917181923969

这两条很相似,但是这里官方没有说明,所以根据我测的结果来解释

image-20240917181951672

可以看到退出进程(Exit Process)之后的 b-3 pid为 22584 并且在目标机器进程里看不到,说明彻底退出了,进程也被杀死

退出线程(Exit Thread)之后 可以看到 b-2 pid 为 18636 在目标机器进程里依然看得到,但是shell已经断开,这就是差别

退出进程就是字面意思在目标机器里shell进程会推出,退出线程shell会断开,但是进程依然存在

关闭服务端后重启需验证

可以执行目录下的./Temserver

image-20240914183725122

./Teamserver -ratel -a admin -p password -h 127.0.0.1:50000 -sc cert.pem -sk key.pem

注意如果之前没保存后退出的话需要先删除根目录下的autosave.profile文件,再执行上述命令,不然就和下面一样报错。

image-20240914184049148

后续执行./Rungui.sh直接连接服务端就行

image-20240914184245315

配置文件存储

点击图中的图标可以将当前brc4的配置文件存下来以供下次启动或者转移机器启动,命名格式为 xxx.conf ,xxx可以自己取名,之后再次启动brc4服务端的时候可以使用

./brute-ratel-linx64 -ratel -c xxx.conf

这里跟开头说的一样,这是brc4相比cs来说最重要的一个点

配置文件格式为json,各个参数详情可以自行了解,这里提供教程

https://www.youtube.com/watch?v=7vv3y9dNQZg&t=3s

image-20240917182128825

2.选项卡切换

其实我一开始都没注意到,后面才发现的

下面这一排为你打开的选项卡,可以切换的

image-20240917182148606

总结

优点: 免杀非常友好,和cs等工具相似,入手门槛低。

不足: 目前仅支持Windows Payload。 希望在后面能增加其他平台的Payload。

参考

https://wiki.hackjie.com/2347.html

https://blog.bbskali.cn/4290.html

https://blog.csdn.net/2401_86449870/article/details/141896500