一个用Go编写的用于初始访问的C2框架

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/dobin/antnium

Antnium

Anti Tanium

一个使用Go语言编写的C2框架和远程访问工具(RAT)。

此源代码是我在演讲《开发你自己的RAT - AV & EDR 防御》(链接)中作为参考公开发布的。Antnium是为了满足我个人的需求而设计的,并不适用于其他人的需求。它适用于我所执行的任务,但并不一定适用于通用的C2框架。

该项目包括两个组件:

  • client.exe:实际的RAT / beacon / agent / 植入物
  • server.exe:C2服务器

功能

  • 支持HTTP/S和Websocket通信通道
  • 代理支持(手动配置、Windows代理、身份验证和Kerberos代理)
  • 命令执行
    • 直接使用LOLbins
      • 首先复制文件
      • 进程空洞注入
    • 交互式cmd.exe/Powershell shell
    • 远程管理和非托管代码
      • 使用donut
      • PE转换为shellcode
      • 加密
      • AMSI绕过
  • 使用Reflexxion绕过EDR(ntdll.dll恢复)
  • 加密通信
  • 可塑性的C2
  • 文件上传/下载
  • 文件浏览器

 

 

快速使用指南

下载并安装Go(以及Git)。

我们在这里使用 127.0.0.1:8080 作为C2域(由于我们在同一主机上启动client.exe和server.exe,所以使用本地主机)。这也是默认设置,无需进行任何更改。

检查 campaign/campaign.go 中的任务设置:

  • serverUrl = "http://127.0.0.1:8080"

在Windows上构建:

markdownCopy code> .\makewin.bat deploy

在Linux上构建:

goCopy code$ make deploy

启动服务器和客户端:

arduinoCopy codecd build\
.\server.exe
.\static\client.exe

在启动 server.exe 后,在浏览器中打开以下URL以访问Web界面:

bashCopy codehttp://localhost:8080/webui/

 

 

目录

static/:工具的公共目录

将你想要在其他机器上下载的文件放在这里。比如 client.exewingman.exe。还有你的工具,比如 mimikatz.exe 或者 seatbelt.exe。但请使用更不显眼的文件名。

这些文件也可以通过使用加密的文件名请求 /secure API 来访问,并将加密+Base64编码的文件作为响应返回。

dotNet文件可以通过使用 remote 执行选项来执行(通过 /secure 访问)。

upload/:数据泄露的私有目录

客户端上传的文件将存储在这里。

详细的构建说明

Go安装:

编译 client.exe 和 server.exe:

markdownCopy code

> .\makewin.bat deploy

这将创建以下文件:

  • /build/server.exe
  • /build/server.elf
  • /build/static/client.exe
  • /build/static/client.elf
  • /build/static/wingman.exe
  • /build/upload/
  • /build/webui/

 

启动 server.exe

shellCopy code> cd build> .\server.exe​Antnium 0.1从 db.packets.json 加载了 0 个数据包从 db.clients.json 加载了 0 个客户端启用周期性数据库转储在 127.0.0.1:8080 上启动Web服务器

启动 client.exe

sqlCopy code> .\build\static\client.exe​Antnium 0.1time="2021-09-02T21:48:16+02:00" level=info msg="UpstreamHttp: Use WS"time="2021-09-02T21:48:16+02:00" level=info msg="Connecting to WS succeeded"time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...

关于交叉编译的注意事项

在Linux上编译Windows客户端是可行的,但由于一些Windows依赖关系,需要一些手动的GO gcc命令行操作。如果不能立即成功,请在Windows上自行编译Windows客户端(makewin.bat client)。

关于任务配置的注意事项

pkg/campaign/campaign.go 文件连接了一个已编译的 client.exe 和一个特定的 server.exe,形成一个任务。每个任务都有独立的加密和认证密钥,这些密钥在服务器和客户端之间共享。

goCopy codetype Campaign struct {    ApiKey      string  // 用于访问面向客户端的REST的密钥    EncKey      []byte  // 用于在服务器和客户端之间加密数据包的密钥​    ServerUrl   string  // 服务器的URL,从客户端的视角看}

而在 pkt/server/config.go 文件中,还有管理员界面/操作员密钥:

goCopy codetype Config struct {    AdminApiKey string}

请注意,ServerUrl 是客户端与服务器进行所有交互所使用的URL。它是公共服务器的URL,例如 http://totallynotmalware.ch。实际的 server.exe 可能位于反向代理后,并且以 server.exe --listenaddr 127.0.0.1:8080 启动(因此 ServerUrl 不一定等于 listenaddr)。

关于服务器访问的注意事项

在首次连接服务器时,您需要先访问并配置UI界面。

Angular UI文件是公开可访问的。假设 ServerUrl="http://localhost:8080"listenaddr=0.0.0.0:8080。您可以选择以下方式之一:

  • 使用集成的 antniumui,可在浏览器中访问 http://localhost:8080/webui

  • 或者从 antniumui 目录运行 ng serve,然后在浏览器中打开 http://localhost:4200

在浏览器中连接到UI时,您首先需要配置服务器的IP和密码:

  • AdminApiKey(默认值为 "Secret-AdminApi-Key",与默认配置文件中的相同)

  • ServerIP(默认值为 "http://localhost:8080")

  • User(可选,可以随机选择)

客户端

已在以下环境中测试通过:

  • Windows 10

  • Ubuntu 20.04 LTS

在Windows上进行编译:

markdownCopy code> .\makewin.bat client

将其部署到目标机器上。

服务器

已在以下环境中测试通过:

  • 工作:Ubuntu 20.04 LTS,Go 1.13.8

  • 工作:Windows 10,Go 1.16.6

  • 编译失败:Ubuntu 16.04 LTS,Go 1.6.2

在Linux上:

shellCopy code$ make server$ mkdir -p static upload$ ./server --listenaddr 0.0.0.0:8080

执行结果是 server.exe。确保在具有以下目录或期望的目录中运行:

  • upload/

  • static/

  • db.*.json 作为工作目录。

它将在该端口上启动一个REST服务器,提供以下功能:

  • /:面向客户端的REST接口

  • /ws:面向客户端的Websocket接口

  • /admin:用于管理员界面的REST接口(添加数据包、获取客户端)

  • /adminws:用于管理员界面的Websocket接口(推送数据包)

  • /webui:用于管理员界面的HTML文件(Angular源码和HTML),访问REST和Websocket接口

在其前面放置一个反向代理(确保它支持Websocket!)或进行端口转发。

 

 

选项

对于手动代理,使用完整的HTTP URL:

arduinoCopy codeclient.exe -proxy http://proxy:8080

或者通过环境变量:

bashCopy codeexport PROXY=http://localhost:8080./client

Wingman

Wingman基本上是Client,但没有直接连接到C2。它可以连接到本地的现有客户端(如果Campaign.AutoStartDownstreams为false,请确保它已启动)。

连接到本地的端口50000:

Copy codewingman.exe

或者使用rundll32.exe加载dll(64位版本在system32中,而不是在C:\Windows\SysWOW64\rundll32.exe中的32位版本):

makefileCopy codeC:\Windows\System32\rundll32.exe .\wingman.dll,Start

它将显示为下游 net#0

测试

bashCopy codego test ./...

可能仍然存在竞态条件。如果测试失败,请再次执行测试。

标签:工具分享, 渗透测试框架, C2框架