freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

如何使用bof-launcher在CC++Zig应用程序中执行Beacon对象文件(BOF)
2024-03-03 01:34:07

关于bof-launcher

bof-launcher是一款针对Beacon对象文件(BOF)的安全测试工具,在该工具的帮助下,广大研究人员可以轻松在C/C++/Zig应用程序中执行Beacon对象文件(BOF)。

Cobalt Strike 4.1于2020年6月25日发布,该版本引入了一种能够运行Beacon对象文件的功能,即能够Beacon中执行代码、解析参数、调用一些Win32 API、报告输出和退出。自那时起,BOF变得非常流行,因此也衍生出了在Cobalt Strike的Beacon之外的其他环境中启动或执行BOF的需求。

功能介绍

bof-launcher是一个开源库,可以在Windows和UNIX/Linux系统上加载、重新定位和启动BOF。当前版本的bof-launcher支持下列功能:

1、与Cobalt Strike的Beacon完全兼容,可以编译和运行Cobalt Strike Community Kit中提供的每一个BOF以及其他所有遵循通用BOF模板的开源BOF;

2、作为一个完全独立的库分发,不依赖与任何其他组件(甚至不使用libc);

3、支持与C/C++/Zig应用程序完美集成;

4、增加了用Zig编程语言编写BOF的能力,该语言的所有功能和丰富的标准库都可以用于BOF;

5、异步BOF执行,能够在单独的线程中启动更耗时的BOF;

6、BOF进程注入,通过将其注入新进程来启动风险更大的BOF;

7、完美支持Windows COFF和UNIX/Linux ELF格式;

8、支持Linux ARM和AARCH64;

7、允许直接从文件系统运行BOF文件(需配合cli4bofs工具);

8、高效灵活的API用于BOF链调用;

工具下载

首先,广大研究人员需要使用下列命令将该项目源码克隆至本地:

git clone https://github.com/The-Z-Labs/bof-launcher.git

然后,我们可以直接使用Zig来构建该项目代码。为此,我们需要在当前目录中下载Zig的tarball文件,将该目录路径添加到PATH环境之后,构建项目代码就非常简单了:

cd bof-launcher

zig build

构建生成的文件将存储在ig-out/bin和zig-out/lib目录中。

下列命令即可构建并运行测试BOF:

zig build test

针对Linux操作系统,项目提供了一个专门的zigupdate.sh脚本来执行工具代码构建:

wget https://raw.githubusercontent.com/The-Z-Labs/bof-launcher/main/utils/zigupdate.sh

chmod +x zigupdate.sh; ./zigupdate.sh

<update PATH>

git clone https://github.com/The-Z-Labs/bof-launcher

cd bof-launcher

zig build

zig build test

bof-launcher库

bof-launcher库是一个完全开源且独立的代码库,可以用来执行任何形式的BOF构建。在Windows平台上,bof-launcher支持x86和x86_64架构,在Linux上支持x86、x86_64、ARM和AArch64架构。该代码库对外提供了CAPIZig API,支持解析COFF/ELF对象数据,能够加载所有需要的符号,最后处理BOF输出。

C API基础使用

// 加载对象文件(COFF或ELF)并获得一个对应的句柄

BofObjectHandle bof_handle;

if (bofObjectInitFromMemory(obj_file_data, obj_file_data_size, &bof_handle) < 0) {

    // handle the error

}

 

// 执行

BofContext* context = NULL;

if (bofObjectRun(bof_handle, NULL, 0, &context) < 0) {

    // handle the error

}

 

// 获取输出

const char* output = bofContextGetOutput(context, NULL);

if (output) {

    // 处理BOF输出

}

 

bofContextRelease(context);

工具使用

在开发和调试过程中,我们可以直接从文件系统来运行BOF代码。为此,我们还专门开发了cli4bofs工具。下载并构建项目代码后,我们就可以运行所有的BOF了。下面给出的是我们BOF的运行示例:

cli4bofs.exe exec .\zig-out\bin\wWinver.coff.x64.o

cli4bofs.exe exec .\zig-out\bin\udpScanner.coff.x64.o str:162.159.200.1-5:123,88

如需在其他CPU架构上运行该BOF的话,可以使用QEMU

qemu-aarch64 -L /usr/aarch64-linux-gnu ./zig-out/bin/cli4bofs exec zig-out/bin/test_obj0.elf.aarch64.o

qemu-arm -L /usr/arm-linux-gnueabihf ./zig-out/bin/cli4bofs exec zig-out/bin/test_obj0.elf.arm.o

下列代码可以创建体积更大的跨平台BOF:

const w32 = @import("bof_api").win32;

const beacon = @import("bof_api").beacon;

 

extern fn @"ntdll$RtlGetVersion"(

    lpVersionInformation: *w32.RTL_OSVERSIONINFOW,

) callconv(w32.WINAPI) w32.NTSTATUS;

 

const RtlGetVersion = @"ntdll$RtlGetVersion";

 

pub export fn go(_: ?[*]u8, _: i32) callconv(.C) u8 {

    var version_info: w32.OSVERSIONINFOW = undefined;

    version_info.dwOSVersionInfoSize = @sizeOf(@TypeOf(version_info));

 

    if (RtlGetVersion(&version_info) != .SUCCESS)

        return 1;

 

    _ = beacon.printf(

        0,

        "Windows version: %d.%d, OS build number: %d\n",

        version_info.dwMajorVersion,

        version_info.dwMinorVersion,

        version_info.dwBuildNumber,

    );

    return 0;

}
#include <windows.h>

#include "beacon.h"

 

NTSYSAPI NTSTATUS NTAPI NTDLL$RtlGetVersion(OSVERSIONINFOW* lpVersionInformation);

 

unsigned char go(unsigned char* arg_data, int arg_len) {

    OSVERSIONINFOW version_info;

    version_info.dwOSVersionInfoSize = sizeof(version_info);

 

    if (NTDLL$RtlGetVersion(&version_info) != 0)

        return 1;

 

    BeaconPrintf(

        0,

        "Windows version: %d.%d, OS build number: %d\n",

        version_info.dwMajorVersion,

        version_info.dwMinorVersion,

        version_info.dwBuildNumber

    );

    return 0;

}

许可证协议

本项目的开发与发布遵循BSD-3-Clause开源许可证协议。

项目地址

bof-launcher:【GitHub传送门

参考资料

https://blog.z-labs.eu/2024/02/08/bof-launcher.html

https://www.cobaltstrike.com/blog/cobalt-strike-4-1-the-mark-of-injection/

https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/beacon-object-files_main.htm

https://www.cobaltstrike.com/

https://z-labs.eu/

https://ziglang.org/

https://www.qemu.org/

# CobaltStrike # 安全测试 # 开源工具 # bof # Beacon
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录